注:文中截图来自鸟哥linux私房菜,链接见文末。
一、SAMBA简介
SAMBA,原名:Server Message Block(SMB),与NFS、CIFS一样,SAMBA也是用于共享不同主机数据的一种文件系统。NFS用于在Linux系统主机之间共享文件,CIFS用于在windows系统主机之间共享文件,而SAMBA则实现了Linux系统主机与windows系统主机之间的文件共享。
就像NFS是基于RPC协议一样,SAMBA是基于NetBIOS(Network Basic Input/Output System)协议上开发的。NetBIOS是用于局域网少数计算机进行网络连接的一个通讯协议,无法跨越路由,SAMBA使用NetBIOS over TCP/IP实现跨路由通讯。
NetBIOS使用NetBIOS name识别不同的主机,在同一个群组中,每个主机的NetBIOS name必须是唯一的。所以SAMBA提供的文件共享服务主要分为两个步骤:
1. 通过NetBIOS name定位主机;
2. 根据权限控制资源读写。
SAMBA通过两个服务进程支持这两个步骤,分别是:
1. nmb:管理工作组,负责NetBIOS name解析。主要使用UDP协议,开启137,138端口来负责NetBIOS name解析的任务。
2. smb:管理SAMBA分享的目录、文件等。主要使用TCP协议,开启139,445端口进行数据传输。(445端口非必要)
SAMBA有两种联机模式:
1. peer/peer(Workgroup model,对等模式):各个主机地位平等,都可独立运作。不会出现一部计算机关闭,其他计算机就无法工作的情况。主机之间可同时互为client与server,但用户需要记住所有主机的账号与密码,很麻烦,适合小型网域。
2. domain model(主控模式):主控计算机(Primary Domain Controller,PDC)统一管理当前网域所有主机与用户的账号与密码。无论登录哪一个主机都需要先到PDC进行账号密码判断与授权。
二、SAMBA服务器
1. 安装
yum install samba samba-client samba-common
samba:主要提供了SAMBA服务器所需的各项服务程序,如:smb,nmb等。
samba-client:主要提供了SAMBA客户端所需的工具指令,如:mount.cifs、smbtree等。
samba-common:提供SAMBA服务器与SAMBA客户端公用的数据,如:smb.conf、testparm等。
2. 配置
(1)配置文件
SAMBA的主要配置文件:/etc/samba/smb.conf
主要包含两部分配置:
[global]:全局整体参数配置。
[分享资源名称]:各个共享资源的参数配置。
(2)配置示例
不需要密码的分享配置:
需要密码的分享配置:
(3)检验配置语法正确性
testparm
samba包含了很多默认设置(不在smb.conf文件中),可使用“-v“项查看全部设置:
testparm -v
3. 启动
systemctl start smb
systemctl start nmb
其中smb使用了端口139和445,但445不是必须的,可在smb.conf配置进行关闭:
smb ports=139
4. SAMBA用户账号与密码管理
通过SAMBA访问Linux系统上的资源,需要先取得Linux系统上的UID与GID,所以SAMBA的账号应该是Linux系统用户账号的其中一个,但由于Linux系统与SAMBA的密码验证方式及编码格式不同,SAMBA与Linux系统的密码文件并不相同。
(1)添加Linux系统用户账号并设置密码
useradd -G users smb1
passwd smb1
(2)添加samba用户账号
pdbedit -a -u smb1
(3)查看所有samba账号
pdbedit -L
(4)修改samba账号密码
smbpassword smb1
(5)删除samba账号
pdbedit -x -u smb1
注:管理 TDB 数据库格式建议使用 pdbedit 这个新的玩意儿来处理,smbpasswd 仅剩下修改密码的功能需记忆即可!
5. 查看SAMBA的状态
smbstatus
6. 安全
(1)SELinux
SELinux默认关闭了很多SAMBA联机的功能,可使用相应命令进行查看与开启。
#查看samba相关的SELinux规则
getsebool -a | grep samba
#开启samba_enable_home_dirs
setsebool -P samba_enable_home_dirs=1
(2)防火墙
使用iptables进行管理:
由于smb及nmb并不支持TCP Wrappers ,所以也只能通过iptables来控制了。
通过smb.conf设置开放网域:
(3)文件
利用Quota限制用户磁盘使用。
三、SAMBA客户端
1. 安装
yum install samba samba-client samba-common
2. 查询SAMBA服务器分享的资源信息
3. 挂载SAMBA服务器分享目录
4. 查看各个SAMBA服务器的所有分享资源
四、建议与问题排查
1. 建议(SAMBA服务器)
(1)在规划Linux时,/home最好独立出一个partition,而且硬盘空间最好能够大一些。
(2)/home独立出来的partition可用独立运行quota作业,规范用户的最大磁盘使用量。
2. 问题排查
(1)SAMBA服务器遇到问题,查看用户登录日志
log file=/var/log/samba/log.%m
%m:客户端主机的NetBIOS name
若客户端主机没有NetBIOS name,则登录信息会被记录到/var/log/samba/下的log.smbd或log.nmbd。
(2)权限问题,检查:SAMBA配置的权限、Linux文件系统的权限、SELinux规则。
(3)修改SAMBA密码的时候同步更新对应Linux用户的密码