目录
什么是 Samba?
安装 Samba
创建samba共享文件夹的两种方式Anonymous 和 Secured
Ubuntu环境下测试
Samba配置文件说明
用户账号映射
Samba 的一个应用场景是,有两台主机,一台Windows主机,一台Linux主机,当这两台主机位于同一个局域网之下时,可以在Linux主机上搭建一个Samba服务器,之后,在Windows主机上连接到Linux主机,二者就可以共享各自主机的文件了,而不必再通过额外的介质(例如U盘)来在两台主机之间传递文件了。
首先可以检查一下是否安装了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
上面这两条命令是安装一些工具,可以忽略。
创建一个 Anonymous share, 顾名思义,即在Linux主机上创建一个可以匿名访问的目录,之后,任何可以连接到该Linux主机的Windows主机,都可以访问到这个目录下的文件,而无需输入用户名和密码。
Anonymos share 共享目录的创建步骤如下:
$ sudo mkdir -p /home/share
$ sudo chmod o+w /home/share
$ 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默认也会被安装。如果没有默认安装可参考前文。
$ sudo service smbd restart
至此,Samba服务器配置完成。
创建一个 Anonymous share 目录的优点是访问比较方便,只要在 Windows Exploer 中找到相应的Linux主机后,就可以直接访问,而无需输入用户名和密码,这种情况比较适用于一个安全的环境中(例如家庭中), 但是如果在一个不安全的环境中(例如公共场合), Anonymous share 就不太适用了。
Secured share 与 Anonymous share 不同,一个 Secured share 共享目录,当客户端访问时需要输入用户名和密码,因此,相比 Anonymous share, Secured share 共享目录的安全性更高。当你在一个公共场合搭建Samba服务器时,应该创建 Secured share 共享目录。
Secured share 共享目录的创建方法如下:
$ sudo mkdir -p /home/secret
$ sudo chmod o+w /home/secret
$ sudo useradd sambauser -s /usr/sbin/nologin //创建一个名为sambauser的用户指定路径为/usr/sbin/nologin即不需登陆
$ sudo chown sambauser:sambauser /home/secret //此操作可以忽略
在文件末尾添加如下内容:
[secret]
comment = Secret File
path = /home/secret
valid user = sambauser
guest ok = no
writable = yes
browsable = yes
create mask = 0755
directory mask =0755
$ sudo smbpasswd -a sambauser
执行完该命令后会在/etc/samba/smbpasswd添加一条关于密码的信息
$ sudo service smbd restart
至此,Samba服务器配置完成。在Windows可以连接和查看如下:
share是匿名访问,可以直接打开,secret打开时需要使用用户名和密码登陆。
使用安装的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 这个指令来测试:
$ sudo mount -t cifs //127.0.0.1/share /mnt
该命令用到了cifs,这是前文介绍的安装的工具,只有安装了cifs-utils之后才能正常执行。
在提示输入Password时,因为Anonymous 没有密码,所以直接Enter 即可,如果成功则没有提示,然后可以进入到/mnt查看挂载已经成功。
$ sudo mount -t cifs -o user=sambauser //127.0.0.1/secret /mnt
类似于上面的命令,这个命令中加入了user=sambauser参数,是为了能正确找到用户名,在提示输入Password时,输入通过sudo smbpasswd -a sambauser配置的密码即可。
至此,samba服务器的Anonymous 和 Secured 两种方式已经配置和测试成功,接下来就可以愉快的使用了。
挂载后记得用umount卸载
在 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服务器时就使用虚拟来登录。
在配置global下添加一行字段username map = /etc/samba/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帐号,这样一来就解决了安全问题。
$ sudo service smbd restart
参考:
http://cn.linux.vbird.org/linux_server/0370samba.php
NOTE:以上的配置例子只用来简单搭建Samba服务器,如果在是服务器上搭建需要做更深层次的研究。