Samba
是著名的开源软件项目,在
Linux/UNIX
系统中实现了
SMB/CIFS
网络协议,因此使得跨平台的文件共享变得容易。在部署
Windows
、
Linux/UNIX
混合平台的企业环境时,使用
Samba
可以很好地解决不同系统之间的文件互访问题。
在配置
Samba
服务之前我们必须对其做一个了解,现在主要向大家说明以下几个方面:
首先说
Samba
服务的组成。
Samba
服务至少需要安装
samba
、
samba-client
、
samba-common
这三个软件包,其中
samba
和
samba-client
软件包分别用于提供服务器和客户机端程序文件,
samba-common
软件包提供了服务器和客户端都要使用的公共文件。
Samba
服务器主要提供
smbd
服务程序和
nmbd
服务程序,前者是为客户机提供服务器中共享资源的访问,后者则用于提供基于
NetBIOS
主机名称的解析,为
Windows
网络中的主机进行名称解析。
其次,说一下
Samba
服务的主配置文件。
Samba
服务的配置文件位于“
/etc/samba
”目录下,主配置文件为
smb.conf
。在该文件中,注释行以“
#
”开始,配置样例以“;”开始。样例行是对配置内容的举例。用户可以参考样例行进行服务器的配置。无论是注释行还是样例行,
Samba
服务器都将予以忽略。
Smb.conf
配置文件包括三个部分。[
global
]――这部分内容对整个
Samba
服务器有效。[
homes
]――设置对应
Samba
用户宿主目录的默认共享。[
printers
]――用于设置打印机。
对上面所说的概念了解之后,配置就变的相对简单了,下面我们通过建立可匿名访问的文件共享和建立带验证的文件共享来看一下具体的配置步骤。
一.
建立可匿名的文件共享
建立匿名共享时,在
smb.conf
文件中主要设置两个地方即可:将安全级别调整为
share,
添加共享目录配置段。其它配置根据具体需要更改。
1.
创建共享目录并发布
说明:创建共享目录
/var/public/dir
,并创建一个文件
file1
以便测试。
说明:修改默认工作组为与
windows
主机同一默认的工作组,以便
windows
主机能够访问资源,将安全级别修改为
share.
添加共享文件夹的描述信息、路径、权限待内容。
2.
启动服务
说明:启动服务之后,通过命令
netstat �Canptu | grep mbd
可以看到,
smbd
服务程序监听
TCP
协议的
139
端口(
SMB
)、
445
端口(
CIFS
),
nmbd
服务程序监听
UDP
协议的
137-138
端口(
NetBIOS
)。
3.
验证
通过上图可以看到客户端主机已经可以看到
samba
服务器上的共享资源,直接访问,不需要用户验证就可以访问了,如下图所示,
windows
主机直接使用
UNC
路径访问即可。
二.
建立带验证的文件共享
匿名共享虽然用起来非常方便,但由于任何人都可以访问到共享的文件数据,在某些时候可能导致信息泄漏。如果希望只有指定的合法用户才能访问共享的数据,就需要对共享目录添加授权设置。必要的时侯,还可以对访问共享的客户端
IP
地址进行限制。下面就来看看建立带用户及客户端验证的文件共享是如可的配置。
1.
建立
Samba
用户数据库
为了区别于系统用户,通常将用于访问共享的用户称为
Samba
用户。
Samba
服务器使用独立的帐号数据文件,但是在建立
Samba
用户帐号时需要确保有对应的系统用户帐号存在,
Samba
用户的密码可以与系统用户的密码不同。
1>.
为
Samba
服务添加一个帐户,并将
roote
用户添加为
Samba
用户。
说明:此处添加了一个名为
zpp
的用户帐号,同时将
root
用户也加入了
samba
用户。
Smbpasswd
命令除了可以添加
samba
用户帐号外,还可以结合不同的命令选项完成不同的帐号维护工作。例如:
-h:
显示
smbpasswd
命令的帮助信息;
-a:
添加指定的
samba
用户帐号;
-d:
禁用指定的用户帐号;
-x:
删除指定的用户帐号;不使用任何命令选项时可以用于修改
samba
用户的密码。
2>.
查看
Samba
服务器默认的用户名称映射内容。
基于
windows
客户端主机的特点和用户安全性考虑,
samba
服务器提供了用户名称映射(
usernamemap
)功能,即可以将多个不同的用户名对应为同一个
samba
用户,起到隐藏对应的系统用户帐号的效果,减少密码穷举攻击的风险。用户名称映射文件位于“
/etc/samba/smbusers
”,文件中默已经添加了两条兼容
windows
客户机的用户名称映射,如图:
说明:当客户端主机以
administrator
用户名访共享时,
samba
服务器将其映射为
root
用户;同样地,
guest
用户名映射为
nobody
。当然,若要正常使用,还需要添加并启用对应的
samba
用户(在“
/etc/samba/smbpasswd
”文件中有
root
、
nobody
)。
3>.
为
Samba
用户
zpp
设置到名称
hello
的映射
说明:此处将
zpp
映射为
hello
是为了安全性考虑,由于
samba
用户
zpp
对应有同名的系统用户,而映射的名称
hello
只相当于一个别名(而非实际存在的用户),为了安全起见,可以不将
zpp
帐户名称告诉共享用户,而只告诉其名为
hello
的用户帐户和密码(也就是
zpp
帐户的密码)。注意不要望了在
samba
主配置文件的全局设置中添加
username map = /etc/samba/smbusers
以此指定名称映射文件。
2.
添加用户授权设置
在
smb.conf
主配置文件中,共享目录的用户授权设置主要由“
valid users
”、“
write list
”配置项指定,同时要取消公开访问的设置
(
即设为“
public=no
”
).
说明:此处设置共享的目录为“
/var/public
”取消了公开的访问的设置。合法访问者为用户
zpp
及
root
组内的用户,并设置只有
root
用户可有写入的权限。当需要授权多个用户时以空格或逗号分隔开,注意不能使用帐户别名。授权一个组时使用“
@groupname
”的形式,组内的每个用户都需要有对应的
Samba
用户。上图中的“
directory mask
”、“
create mask
”配置项用于给
samba
用户设置在共享目录中建立子目录、文件等权限。
另外,控制
samba
用户访问共享目录的读取、写入权限时,注意要满足一个前提条件,即与该
samba
用户同名的系统用户对服务器中的共享目录(如:“
/etc/public/dir
”)也必须有相应的读取、写入权限。
3.
添加客户端地址授权设置
在
smb.conf
文件中,使用“
host allow
”配置项可设设置仅允许访问共享的客户机地址,使用“
host deny
”配置项可以设置仅拒绝访问共享的客户机地址,两者选其一。配置参数可以使用主机名或
IP
地址、网络地址的形式,多个地址之间以空格或逗号分隔。
说明:此处在
host allow
配置项中设置仅允许
192.168.1.0/24
、
172.16.0.0/16
网段的客户机访问
samba
服务器。
4.
重新启动
Smb
服务。
建立好
Samba
用户数据库,并为共享目录添加好用户授权设置、客户端地址授权设置、重新启动
smb
服务之后,我们就可以来测试了。
从下图可以看到,
IP
地址为
192.168.1.2/24
,的客户机使用映射帐户
hello
可以成功的访问到
samba
服务器上的资源。
从下图可以看到,在客户机上使用
hello
帐户成功挂载共享目录
//192.168.1.1/dir
后,它只有读取的权限,并没有创建目录及文件的权限。
从下图可以看到,在客户机上使用
root
帐户成功挂载共享目录
//192.168.1.1/dir
后,他不但可以读取
samba
服务器上的共享资源,同时具有创建目录及文件的权限。
最后,值得注意的是可匿名访问的文件共享只适用于安全性不高的情况下,如果对安全性有更高的要求,建议使用带用户验证的文件共享。