samba原理



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

(1)samba的工作流程
当客户端访问服务器时,信息通过SMB协议进行传输,其工作过程可以分成四个步骤:

步骤1:协议协商
客户端在访问Samba服务器时,发送negprot指令数据包,告知目标计算机其支持的SMB类型。Samba服务器根据客户端的情况,选择最优的SMB类型,并做出回应;

步骤2:建立连接
当SMB类型确认后,客户端会发送session setup指令数据包,提交帐号和密码,请求与Samba服务器建立连接,如果客户端通过身份验证,Samba服务器会对session setup报文作出回应,并为用户分配唯一的UID,在客户端与其通信时使用;

步骤3:访问共享资源
客户端访问Samba共享资源时,发送tree connect指令数据包,通知服务器需要访问的共享资源名,如果设置允许,Samba服务器会为每个客户端与共享资源连接分配TID,客户端即可访问需要的共享资源;

步骤4:断开连接
共享使用完毕,客户端向服务器发送tree disconnect报文关闭共享,与服务器断开连接。

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

samba搭建

一、安装和启动samba
(1)使用命令rpm -qa | grep samba可以检查是否安装了samba服务,没有安装下载安装一个即可;
(2)关闭防火墙:可使用service iptables stop命令关闭防火墙,也可以对防火墙进行修改,放行某些端口(如445);
(3)samba服务操作:service smb start | stop | restart;如果想让samba服务开机自动加载,可使用ntsysv命令打开开机自动加载的服务,并勾选smb后按Tab键确认退出,即可实现开机加载samba服务;

二、配置samba服务

(1)samba服务的配置文件是 /etc/samba/smb.conf,smb.conf文件中包括4中结构,[Global]、[Homes]、[printers]、[Userdefined_shareName],其中Globa用于定义全局参数和缺省值;Homes用于用户的home目录共享;Printers用于定义打印机共享;Userdefined_ShareName用于自定义共享(可有多个)。(说明:文件中开头带有"#"为说明文件,不执行, 开头带有";"为举例文件,不执行(若想让其执行,去掉";"));

(2)配置全局参数[global]

1) 基本全局参数

workgroup 设置samba要加入的工作组;server string 指定浏览列表里的机器描述;netbios name 设置samba的NetBIOS名字 (需要自己添加);client code page 设置客户字符编码也 936为简体中文(需要自己添加);display charset、unix charset、dos charset是设置字符集(主要目的是支持中文,通过locale命令获取LANG的值,这里为zh_CN.GBK,可在相应的.bash_profile里添加export LANG=zh_CN.GBK后source即可); 

2) 日志全局参数

log file 指定日志文件的名称;max log size 指定日志文件的最大尺寸(KB)。

3) 安全全局参数

security 定义samba的安装等级:share:用户不需要用户名和密码即可登陆samba服务器;user:由提供samba服务的samba服务器负责检查帐户及口令;server:检查帐户及口令的工作指定由另一台WindowsNT/2000或samba服务器负责;domain:指定windowsNT/2000域控制器来验证用户帐户、密码;

encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
这两行用于设定是否对samba密码进行加密,并指定加密文

件存放路径。

hosts allow 定义允许访问此服务器的IP地址,如192.168.1. 意思为只有192.168.1.0这个网段的IP才能访问该服务器

(3)配置home共享[home]

由于在home共享默认将用户的宿主目录进行了共享,这是十分危险的。所以我们必须删除home共享,方法很简单,将所有的指令前加";"或"#",让这条指令不执行,也就不对用户的宿主目录共享了 

(4)配置自定义共享

自定义共享,只需在文件最后加入[$name],$name任意起,其参数意义为:comment 描述该共享的名称;path 定义该共享的目录;browseable 指定共享的目录是否可浏览;writable 指定共享的目录是否有写入权限;read only 指定共享的目录为只读权限;public 指定是否可以允许Guest帐户访问;guest ok 通public相同,yes为允许guest访问;only guest 指定只有guest用户可以访问;calid users 指定访问该共享的用户。 

(5)其他
1) 访问服务器需用户名和密码验证:命令行下输入smbpasswd -a test,使test用户同时成为samba用户(前提Global中设置security=user);smbpasswd -d test 禁用test用户作为samba用户、smbpasswd -e test 启用test用户作为samba用户、smbpasswd -x test 删除test用户作为samba用户;
2) 客户端只能通过用户访:在相应[Userdefined_shareName]中添加valid users = test,即可只允许该用户登录;
3) 上面实例中给出的是一个针对guest用户仅read功能的情况,那其中的东西该如何维护,可以新建一用户,其宿主目录设为/home/seqa_photo,仅该用户维护即可。

完成以上配置后重启samba服务,在文件窗口打开"\\\10.20.146.13"即可看到存放在linux上的内容。