一.Samba的工作原理

Samba服务功能强大,这与其通信基于SMB/CIFS协议有关。SMB不仅提供目录和打印机共享,还支持认证、权限设置。在早期,SMB运行于NBT协议(NetBIOS over TCP/IP)上,使用UDP协议的137、138及TCP协议的139端口;后期SMB经过开发,可以直接运行于TCP/IP协议上,没有额外的NBT层,使用TCP协议的445端口。

Samba的工作流程主要为四个阶段:

一:协议协商
客户端在访问Samba服务器时,首先由客户端发送一个SMB negprot请求数据报,并列出它所支持的所有SMB协议版本。服务器在接收到请求信息后开始响应请求,并列出希望使用的协议版本,选择最优的SMB类型。如果没有可使用的协议版本则返回oXFFFFH信息,结束通信。

二:建立连接
当SMB协议版本确定后,客户端进程向服务器发起一个用户或共享的认证,这个过程是通过发送SesssetupX请求数据报实现的。客户端发送一对用户名和密码或一个简单密码到服务器,然后服务器通过发送一个SesssetupX请应答数据报来允许或拒绝本次连接。

三:访问共享资源
当客户端和服务器完成了协商和认证之后,它会发送一个Tcon或SMB TconX数据报并列出它想访问网络资源的名称,之后服务器会发送一个SMB TconX应答数据报以表示此次连接是否被接受或拒绝。

四:断开连接
连接到相应资源,SMB客户端就能够open SMB打开一个文件,通过read SMB读取文件,通过write SMB写入文件,通过close SMB关闭文件。

Samba相关进程

Samba服务是由两个进程组成,分别是nmbd和smbd。
nmbd:其功能是进行NetBIOS名解析,并提供浏览服务显示网络上的共享资源列表。
smbd:其主要功能就是用来管理Samba服务器上的共享目录、打印机等,主要是针对网络上的共享资源进行管理的服务。当要访问服务器时,要查找共享文件,这时我们就要依靠smbd这个进程来管理数据传输。

二.samba服务器的安全模式

samba服务器有share、user、server、domain和ads 五种安全模式,用来适应不同的企业服务器需求。
(1)share安全级别模式
客户端登录samba服务器,不需要输入用户名和密码就可以浏览samba服务器的资源,适用于公共的共享资源,安全性差,需要配合其他权限设置,保证samba服务器的安全性。
(2)user安全级别模式
客户端登录samba服务器,需要提交合法帐号和密码,经过服务器验证才可以访问共享资源,服务器默认为此级别模式。
(3)server安全级别模式
客户端需要将用户名和密码,提交到指定的一台samba服务器上进行验证,如果验证出现错误,客户端会用user级别访问。
(4)domain安全级别模式
如果samba服务器加入windows域环境中,验证工作服将由windows域控制器负责,domain级别的samba服务器只是成为域的成员客户端,并不具备服务器的特性,samba早期的版本就是使用此级别登录windows域滴。
(5)ads安全级别模式
当samba服务器使用ads安全级别加入到windows域环境中,其就具备了domain安全级别模式中所有的功能并可以具备域控制器的功能。

Samba配置

1.安装samba

#yum install -y samba*

2.修改主配置文件

#vim /etc/samba/smb.conf
#全局配置
[global]
workgroup = Gwin            #类似于在Windows中显示的工作组名称
server string = samba testserver   #服务器说明
netbios name = mabin-samba         #被netbios解析出来的计算机名
security = user                    #security是登录和验证方式
#对用户家目录的共享,可以限制不共享出用户所在家目录
[homes]
#打印机共享
[printers]
#在Windows中显示出来的共享目录名,可自定
[share]
comment = share file                      #注释
path = /tmp/test                          #共享目录的路径
browseable = yes                          #是否可浏览
writeable = yes                           #是否可写
valid users = test,@group                #设置有效用户/组
invalid users = blabla                    #禁止访问该共享的用户

一些其他参数

guest ok = yes                    #设置匿名用户以guest身份登录
public = yes                      #是否是公用的
write list = test                 #允许写入该共享的用户

ps:用户的最终权限分配为目录的权限和samba权限的最小交集;
write list会覆盖用户原有的用户权限,即使他们原先只有读的权限。

3.创建smb用户密码,需要时系统存在的

#smbpasswd -a test

4.重启服务并设置开机自启

#service smb restart 
 #chkconfig smb on

5.本机测试

检查配置文件里是否有语法错误 
 #testparm 
 进入共享目录 
 #smbclient -U test -L //192.168.173.140/共享名

6.win7测试

输入ip后,在弹出的验证框里输入合法用户和对应密码

修改SAMBA 端口 samba的端口_samba

修改SAMBA 端口 samba的端口_selinux_02

三.Selinux和iptables

Selinux
# chcon -R -t smb_share_t /tmp/test 
 #chcon -t public_content_rw_t /tmp/test 
 #setsebool -P samba_enable_home_dirs on 
 #setsebool -P samba_share_nfs on
iptables

新增入站规则

#iptables -A INPUT -p tcp -m multiport –dports 139,445 -j ACCEPT 
 #iptables -A INPUT -p udp -m multiport –dports 137,138 -j ACCEPT

新增出站规则

#iptables -A OUTPUT -p tcp -m multiport –sports 139,445 -j ACCEPT 
 #iptables -A OUTPUT -p tcp -m multiport –sports 137,138 -j ACCEPT