Ubuntu搭建简单的samba服务器

目录

什么是 Samba?

安装 Samba

创建samba共享文件夹的两种方式Anonymous 和 Secured

创建一个 Anonymous share

创建一个 Secured share

Ubuntu环境下测试

Samba配置文件说明

用户账号映射


什么是 Samba?

Samba 的一个应用场景是,有两台主机,一台Windows主机,一台Linux主机,当这两台主机位于同一个局域网之下时,可以在Linux主机上搭建一个Samba服务器,之后,在Windows主机上连接到Linux主机,二者就可以共享各自主机的文件了,而不必再通过额外的介质(例如U盘)来在两台主机之间传递文件了。

安装 Samba

首先可以检查一下是否安装了Samba

$ samba -V

如何已经安装了会有提示当前安装的Samba的版本。如果没有安装 Samba, 你需要自己安装它。安装方法很简单,只需要在终端输入如下条命令即可:

$ sudo apt-get update //不一定需要

$ sudo apt-get install samba samba-common

经测试,安装samba 后会默认安装samba-common

$ sudo apt-get install smbclient

$ sudo apt-get install cifs-utils

上面这两条命令是安装一些工具,可以忽略。

 

创建samba共享文件夹的两种方式Anonymous 和 Secured

创建一个 Anonymous share

创建一个 Anonymous share, 顾名思义,即在Linux主机上创建一个可以匿名访问的目录,之后,任何可以连接到该Linux主机的Windows主机,都可以访问到这个目录下的文件,而无需输入用户名和密码。

Anonymos share 共享目录的创建步骤如下:

  1. 创建 share 目录并设置权限

    $ sudo mkdir -p /home/share

    $ sudo chmod o+w /home/share

  2. 修改Samba的配置文件 /etc/samba/smb.conf

    $ sudo vim /etc/samba/smb.conf

    在文件末尾添加如下内容:

    [share]

    comment = this is Linux share directory

    path = /home/share

    browsable = yes

    public = yes

    writable = yes

    create mask = 0755

    directory mask =0755

    上述配置的解释如下:

    comment 是关于该目录的简要描述

    path 参数的共享目录的位置

    browsable 表示是否在 Window Explorer中显示该目录

    guest ok (或者使用 public)表示是否允许匿名访问该共享目录

    read only (或者使用 writable = yes)表示是否是只读

    create mode 指明新建立的文件的属性,一般是0755

    directory mode 指明新建立的目录的属性,一般是0755

    修改完配置文件后可以使用testparm检查一下配置文件是否有语法错误,如果提示有Error则需要检查配置文件语法是否正确。若想使用testparm则需要安装samba-common,一般情况下安装samba后会samba-common默认也会被安装。如果没有默认安装可参考前文。

  3. 重启Samba服务使配置生效

    $ sudo service smbd restart

    至此,Samba服务器配置完成。

    创建一个 Anonymous share 目录的优点是访问比较方便,只要在 Windows Exploer 中找到相应的Linux主机后,就可以直接访问,而无需输入用户名和密码,这种情况比较适用于一个安全的环境中(例如家庭中), 但是如果在一个不安全的环境中(例如公共场合), Anonymous share 就不太适用了。

创建一个 Secured share

Secured share 与 Anonymous share 不同,一个 Secured share 共享目录,当客户端访问时需要输入用户名和密码,因此,相比 Anonymous share, Secured share 共享目录的安全性更高。当你在一个公共场合搭建Samba服务器时,应该创建 Secured share 共享目录。

Secured share 共享目录的创建方法如下:

  1. 创建一个 secured share 共享目录并设置权限

    $ sudo mkdir -p /home/secret

    $ sudo chmod o+w /home/secret

  2. 创建一个用于访问这个 secured share 的用户

    $ sudo useradd sambauser -s /usr/sbin/nologin //创建一个名为sambauser的用户指定路径为/usr/sbin/nologin即不需登陆

  3. 修改共享目录的User 为 sambauser

    $ sudo chown sambauser:sambauser /home/secret //此操作可以忽略

  4. 修改 Samba 配置文件

    在文件末尾添加如下内容:

    [secret]

    comment = Secret File

    path = /home/secret

    valid user = sambauser

    guest ok = no

    writable = yes

    browsable = yes

    create mask = 0755

    directory mask =0755

  5. 将用户 sambauser加入到本 smbpasswd file

    $ sudo smbpasswd -a sambauser

    执行完该命令后会在/etc/samba/smbpasswd添加一条关于密码的信息

  6. 重启 Samba 服务使配置生效

    $ sudo service smbd restart

至此,Samba服务器配置完成。在Windows可以连接和查看如下:

share是匿名访问,可以直接打开,secret打开时需要使用用户名和密码登陆。

Ubuntu环境下测试

使用安装的smbclient工具执行命令

$ smbclient -L //127.0.0.1

得到如下信息,可以查看到已经创建好的共享文件夹

wxy@3020:~$ smbclient -L //127.0.0.1

WARNING: The "syslog" option is deprecated

Enter WORKGROUP\wladmin's password:

Sharename Type Comment

--------- ---- -------

print$ Disk Printer Drivers

share Disk this is Linux share directory

secret Disk Secret File

IPC$ IPC IPC Service (3020 server (Samba, Ubuntu))

Reconnecting with SMB1 for workgroup listing.

Server Comment

--------- -------

Workgroup Master

--------- -------

WORKGROUP UBUNTU

wxy@3020:~$

已经查看到信息,接下来可以利用 mount 这个指令来测试:

  1. 连接到Anonymous share

    $ sudo mount -t cifs //127.0.0.1/share /mnt

    该命令用到了cifs,这是前文介绍的安装的工具,只有安装了cifs-utils之后才能正常执行。

    在提示输入Password时,因为Anonymous 没有密码,所以直接Enter 即可,如果成功则没有提示,然后可以进入到/mnt查看挂载已经成功。

  2. 连接到Secured share

    $ sudo mount -t cifs -o user=sambauser //127.0.0.1/secret /mnt

    类似于上面的命令,这个命令中加入了user=sambauser参数,是为了能正确找到用户名,在提示输入Password时,输入通过sudo smbpasswd -a sambauser配置的密码即可。

至此,samba服务器的Anonymous 和 Secured 两种方式已经配置和测试成功,接下来就可以愉快的使用了。

挂载后记得用umount卸载

Samba配置文件说明

  1. smb.conf 的服务器整体参数: [global] 项目

    在 smb.conf 这个配置文件当中的设定项目有点像底下这样:

    # 会有很多加上 # 或 ; 的批注说明,你也可以自行加上来提醒自己相关设定

    [global]

    参数项目 = 设定内容

    ....

    [分享资源名称]

    参数项目 = 设定内容

    ....

    在 [global] 当中的就是一些服务器的整体参数了,包括工作组、主机的 NetBIOS 名称、字符编码的显示、登录文件的设定、 是否使用密码以及使用密码验证的机制等等,都是在这个 [global] 项目中设定的。至于 [分享资源名称] 则是针对你开放的目录来进权限方面的设定,包括谁可以浏览该目录、是否可以读写等等参数。 在 [global] 部分关于主机名信息方面的参数主要有:

    workgroup = 工作组的名称:注意,主机群要相同;

    netbios name = 主机的 NetBIOS 名称啊,每部主机均不同;

    server string = 主机的简易说明,这个随便写即可。

    有些语言编码的设定如下所示:

    display charset

    unix charset

    dos charset

    登录文件方面的信息,包括这些参数:

    log file = 登录档放置的档案,文件名可能会使用变量处理;

    max log size = 登录档最大仅能到多少 Kbytes ,若大于该数字,则会被 rotate 掉。

    认证模式有关的参数:

    security = share, user, domain:三选一,这三个设定值分别代表:

    share:分享的数据不需要密码,大家均可使用 (没有安全性);

    user :使用 SAMBA 服务器本身的密码数据库,密码数据库与底下的 passdb backend 有关;

    domain:使用外部服务器的密码,亦即 SAMBA 是客户端之意,如果设定这个项目, 你还得要提供『password server = IP』的设定值才行;

    encrypt passwords = Yes 代表密码要加密,注意那个 passwords 要有 s 才对!

    passdb backend = smbpasswd 本例中使用的此加密配置

    smb passwd file = /etc/samba/smbpasswd 根据上面的配置项而配置的加密文件

    username map = /etc/samba/smbusers开启用户帐号映射功能

更多信息请参考man smb.conf

用户账号映射

samba的用户帐号信息是保存在smbpasswd文件中滴,而且可以访问samba服务器的帐号也必须对应一个同名的系统帐号。基于这 一点,所以,对于一些hacker来说,只要知道samba服务器的samba帐号,就等于是知道了Linux系统帐号,只要crack其samba帐号密码加以利用就可以攻击samba服务器。所以我们要使用用户帐号映射这个功能来解决这个问题。 

用户帐号映射这个功能需要建立一个帐号映射关系表,里面记录了samba帐号和虚拟帐号的对应关系,客户端访问samba服务器时就使用虚拟来登录。

  1. 编辑主配置文件smb.conf 

    在配置global下添加一行字段username map = /etc/samba/smbusers开启用户帐号映射功能。

  2. 编辑smbusers

    如果没有smbusers文件需要根据smb.conf配置在相应的路径下创建一个smbusers文件

    smbusers文件保存帐号映射关系,其有固定格式: 

    samba = 虚拟帐号(映射帐号) 如:

    sambauser = networkusername

    帐号sambauser就是我们上面建立的samba帐号(同时也是Linux系统帐号),networkusername就是映射的帐号名(虚拟帐号),帐号 sambauser在我们访问共享目录时只要输入networkusername就可以成功访问了:

    $ sudo mount -t cifs -o user=networkusername //127.0.0.1/secret /mnt

    但是实际上访问samba服务器的还是我们的sambauser帐号,这样一来就解决了安全问题。

  3. 重启samba服务

    $ sudo service smbd restart


参考:

http://cn.linux.vbird.org/linux_server/0370samba.php

NOTE:以上的配置例子只用来简单搭建Samba服务器,如果在是服务器上搭建需要做更深层次的研究。

你可能感兴趣的:(Linux,Linux,server)