第415集集群架构-CIFS文件共享服务 | 字数总计: 4.6k | 阅读时长: 18分钟 | 阅读量:
集群架构 - CIFS文件共享服务 1. Samba基本概述 1.1 SMB协议简介 Server Message Block (SMB) 是Windows服务器和客户端之间实现文件共享的服务协议。
Samba服务通常用来做跨系统文件共享服务,实现不同操作系统之间的资源共享。
1.2 Samba相关功能 Samba服务提供以下主要功能:
用户验证 : 支持多种用户认证方式
文件共享 : 实现跨平台文件共享
打印共享 : 共享打印机资源
域名解析 : 提供NetBIOS名称解析
1.3 Samba软件包
软件包
说明
用途
samba
samba服务端共享程序
提供Samba服务器功能
samba-common
samba服务配置文件语法检验
提供testparm等工具
cifs-utils
samba客户端软件
提供所需工具指令集
1.4 Samba主要程序 服务端程序 :
smbd: SMB守护进程,处理文件共享和打印服务
nmbd: NetBIOS名称服务器,提供名称解析服务
客户端工具 :
smbclient: SMB客户端工具
mount.cifs: 挂载CIFS文件系统
管理工具 :
pdbedit: 管理Samba用户数据库
testparm: 测试Samba配置文件语法
smbpasswd: 管理Samba用户密码
2. Samba服务配置 2.1 实践环境准备 环境说明 :
Samba服务器 : 192.168.56.11
客户端 : Windows和Linux系统
2.2 安装Samba服务程序 1 2 3 4 5 6 7 8 [root@xuliangwei ~] [root@xuliangwei ~] [root@xuliangwei ~]
2.3 Samba主配置文件 Samba主配置文件默认存放于/etc/samba/smb.conf。
查看配置文件
全局参数配置 1 2 3 4 5 6 7 8 9 10 11 12 [global] //全局参数 workgroup = SAMBA //工作组名称 hosts allow = 192.168.56. //表示允许IP或网段, 允许使用通配符或主机名 interfaces = eth0 //SambaServer监听网卡, 也可以写IP地址 max connections = 0 //最大连接数目, 超出拒绝, 0表示不限制 max log size = 50 //定义日志文件的最大容量为50KB security = user //安全验证方式,总共有4种 passdb backend = tdbsam //定义用户密码的类型,共有3种 printing = cups //设置Samba共享打印机的类型 printcap name = cups //设置共享打印机的配置文件 load printers = yes //设置在Samba服务启动时是否共享打印机设备 cups options = raw //打印机的选项
全局参数详细说明 workgroup : 工作组名称
默认值: SAMBA
说明: 设置Samba服务器所属的工作组
hosts allow : 允许访问的主机
格式: IP地址或网段
示例: 192.168.56. 或 192.168.56.0/24
说明: 允许使用通配符或主机名
interfaces : 监听网卡
格式: 网卡名称或IP地址
示例: eth0 或 192.168.56.11
说明: SambaServer监听网卡
max connections : 最大连接数
默认值: 0(不限制)
说明: 超出连接数将拒绝新连接
max log size : 日志文件最大容量
默认值: 50(KB)
说明: 定义日志文件的最大容量
security : 安全验证方式
验证方式
说明
安全性
share
无需验证身份
简单方便,安全性差
user
需要验证用户密码才可访问
安全性高
server
需要通过三方服务验证账号密码
集中管理账户
domain
使用域控制器进行身份验证
企业级方案
passdb backend : 用户密码类型
类型
说明
管理工具
smbpasswd
为系统用户设置Samba服务程序的密码
smbpasswd
tdbsam
创建数据库文件并使用pdbedit命令建立Samba服务程序的用户
pdbedit
ldapsam
基于LDAP服务进行账户验证
LDAP服务
printing : 共享打印机类型
可选值: bsd, sysv, plp, lprng, aix, hpux, qnx, cups
默认值: cups
共享参数配置 1 2 3 4 5 6 7 8 9 10 [共享名/访问名] comment = 任意字符串 //共享描述 path = 共享目录路径 //共享目录的绝对路径 browseable = yes /no //指定该共享是否可以浏览 writable = yes /no //指定该共享路径是否可写 valid users = 用户名列表 //允许访问该共享的用户 invalid users = 用户名列表 //禁止访问该共享的用户 write list = 用户名列表 //允许写入该共享的用户 guest ok = yes /no //指定该共享是否允许guest账户访问 public = yes /no //等同于guest ok
共享参数说明 :
参数
说明
示例
comment
共享描述
comment = This is share SMB Service
path
共享目录路径
path = /share/smb
browseable
是否可浏览
browseable = yes
writable
是否可写
writable = yes
valid users
允许访问的用户
valid users = bgx1,bgx2
invalid users
禁止访问的用户
invalid users = bgx3
write list
允许写入的用户
write list = bgx1
guest ok
允许guest访问
guest ok = no
public
等同于guest ok
public = no
2.4 建立访问共享资源 在Linux 7系统中,Samba服务程序默认使用的是用户口令认证模式,确保仅让有密码且受信任的用户访问共享资源,不过需要使用pdbedit建立账户信息数据库来管理SMB服务程序。
pdbedit命令说明 1 2 3 4 5 //pdbedit [选项] 账户 //-a 用户名 建立Samba用户 //-x 用户名 删除Samba用户 //-L 列出用户列表 //-Lv 列出用户详细信息的列表
创建Samba用户 1 2 3 4 5 6 7 [root@xuliangwei ~] [root@xuliangwei ~] new password: //输入密码 retype new password: //确认密码
注意 : 必须先创建系统用户,然后才能添加为Samba用户。
2.5 创建共享目录 创建用于共享资源的文件目录,要考虑到文件读写权限的问题。
1 2 3 4 5 6 [root@xuliangwei ~] [root@xuliangwei ~] [root@xuliangwei ~]
2.6 修改Samba主配置文件 修改Samba服务程序的主配置文件,可以删除[homes]和[printers]部分。
完整配置示例 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [global] workgroup = SAMBA security = user passdb backend = tdbsam printing = cups printcap name = cups load printers = yes cups options = raw [share] comment = This is share SMB Service path = /share/smb public = no writable = yes valid users = bgx
2.7 重启smb服务并加入开机自启动 1 2 3 4 5 6 7 8 [root@xuliangwei ~] [root@xuliangwei ~] [root@xuliangwei ~]
2.8 防火墙配置 如果必须开启防火墙,注意执行如下指令:
1 2 3 4 5 6 7 8 [root@xuliangwei ~] [root@xuliangwei ~] [root@xuliangwei ~]
Samba需要开放的端口 :
TCP 139 : NetBIOS会话服务
TCP 445 : SMB直接承载
UDP 137 : NetBIOS名称服务
UDP 138 : NetBIOS数据报服务
3. Win挂载Samba 3.1 Windows访问Samba共享 要在Windows系统中访问共享资源,只需在我的电脑上方输入\\192.168.56.11(服务器IP地址)即可。
访问步骤 :
打开”我的电脑”或”文件资源管理器”
在地址栏输入: \\192.168.56.11
按回车键
3.2 登录Samba共享 正确输入bgx账户名以及使用pdbedit命令设置的密码后,就可以登录到共享界面中了。
登录界面 :
用户名 : bgx
密码 : 使用pdbedit设置的密码
3.3 操作共享资源 登录成功后,可以尝试执行以下操作:
查看文件 : 浏览共享目录中的文件
写入文件 : 创建新文件或修改现有文件
更名文件 : 重命名文件或目录
删除文件 : 删除文件或目录
3.4 Windows映射网络驱动器 可以将Samba共享映射为网络驱动器:
右键”此电脑” → “映射网络驱动器”
选择驱动器盘符
输入共享路径: \\192.168.56.11\share
勾选”登录时重新连接”
点击”完成”
输入用户名和密码
4. Linux挂载Samba 4.1 安装客户端工具 Samba服务可以实现Linux系统之间的文件共享,在客户端安装支持文件共享服务的软件包cifs-utils。
4.2 临时查看SMB服务端共享资源 以匿名身份查看授权资源 1 2 3 4 5 6 7 8 9 10 [root@samba-client ~] Enter SAMBA\root's password: Anonymous login successful OS=[Windows 6.1] Server=[Samba 4.6.2] Sharename Type Comment --------- ---- ------- samba-share Disk This is Share /data/samba/share IPC$ IPC IPC Service (Samba 4.6.2)
以指定用户身份查看授权资源 1 2 3 4 5 6 7 8 [root@samba-client ~] Domain=[SAMBA-SERVER] OS=[Windows 6.1] Server=[Samba 4.6.2] Sharename Type Comment --------- ---- ------- samba-share Disk This is Share /data/samba/share IPC$ IPC IPC Service (Samba 4.6.2)
命令说明 :
-L: 列出服务器上的共享资源
-U: 指定用户名和密码(格式:用户名%密码)
直接访问共享
smbclient常用命令 :
命令
说明
ls
列出文件
cd
切换目录
get
下载文件
put
上传文件
mkdir
创建目录
rm
删除文件
exit
退出
4.3 手动挂载SMB访问共享 建立挂载点
以匿名身份挂载资源
以账户密码身份挂载
挂载参数说明 :
参数
说明
-t cifs
指定文件系统类型为CIFS
-o rw
以读写方式挂载
-o user=用户名
指定用户名
-o pass=密码
指定密码
-o guest
匿名访问
4.4 使用配置文件保存密码 也可以将登录账户密码保存至配置文件,可以免输入密码去访问挂载。
创建密码文件 1 2 3 4 5 6 7 8 9 [root@samba-client ~] username=bgx password=123 domain=MYGROUP [root@samba-client ~]
使用密码文件挂载
配置文件格式 :
1 2 3 username=用户名 password=密码 domain=工作组名称
4.5 自动挂载SMB共享 编辑/etc/fstab文件
第一种方式:用户名密码方式 1 //192.168.56.11/samba-share /cifs cifs domain=WORKGROUP,user=bgx,pass=123 0 0
第二种方式:使用配置文件 1 //192.168.56.11/samba-share /cifs cifs credentials=/etc/samba/bgx 0 0
fstab格式说明 :
1 设备名 挂载点 文件系统类型 挂载选项 备份 检查
挂载选项说明 :
domain=WORKGROUP: 指定工作组
user=bgx: 指定用户名
pass=123: 指定密码
credentials=/etc/samba/bgx: 使用密码文件
_netdev: 网络设备,网络连通后挂载(重要)
测试自动挂载 1 2 3 4 5 [root@samba-client ~] [root@samba-client ~]
5. SMB多用户挂载 5.1 需求说明 在Samba Server服务器上,共享/data/samba/public,实现对访问挂载后的共享的每个用户单独的验证,实现权限隔离。
权限要求 :
bgx1 : 能够读写
bgx2 : 能够读
bgx3 : 不能访问
5.2 配置步骤 步骤1: 创建系统用户 1 2 3 4 [root@samba-server ~] [root@samba-server ~] [root@samba-server ~]
步骤2: 添加系统用户至samba服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@samba-server ~] new password: 123 retype new password: 123 [root@samba-server ~] new password: 123 retype new password: 123 [root@samba-server ~] new password: 123 retype new password: 123 [root@samba-server ~] bgx2:1008: bgx1:1007: bgx3:1009:
步骤3: 修改samba配置文件共享目录 1 2 3 4 5 6 7 8 9 10 11 12 [root@samba-server ~] [samba-public] comment = This is a Share samba-public path = /data/samba/public public = no valid users = bgx1,bgx2 invalid users = bgx3 writable = yes write list = bgx1 EOF
配置说明 :
valid users = bgx1,bgx2: 允许bgx1和bgx2访问
invalid users = bgx3: 禁止bgx3访问
writable = yes: 允许写入
write list = bgx1: 只有bgx1可以写入
步骤4: 创建共享目录并设置权限 1 2 3 4 5 6 [root@samba-server ~] [root@samba-server ~] [root@samba-server ~]
步骤5: 使用testparm测试配置 1 2 3 4 5 [root@samba-server ~] Processing section "[samba-share]" Processing section "[samba-public]" Loaded services file OK.
testparm命令报错处理 :
如果出现以下错误:
1 rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
临时生效 :
重启后生效 :
步骤6: 重启smb服务 1 2 3 4 5 6 7 8 [root@samba-server ~] [root@samba-server ~] [root@samba-server ~]
步骤7: 客户端挂载并测试权限 1 2 3 4 5 6 7 8 9 10 11 12 13 [root@samba-client ~] [root@samba-client ~] [root@samba-client ~] [root@samba-client ~] mount error(13): Permission denied Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
权限验证 :
1 2 3 4 5 6 7 8 9 10 11 12 13 [root@samba-client ~] [root@samba-client ~] [root@samba-client ~] test [root@samba-client ~] touch : cannot touch '/bgx2/test2.txt' : Permission denied[root@samba-client ~] ls : cannot access '/bgx3' : Permission denied
步骤8: 自动挂载 注意 : 挂载属性_netdev是关键选项,网络连通后挂载,否则容易引起服务器无法启动。
1 2 3 4 5 6 7 [root@samba-client ~] //192.168.56.11/samba-public /bgx1 cifs defaults,username=bgx1,password=123,_netdev 0 0 //192.168.56.11/samba-public /bgx2 cifs defaults,username=bgx2,password=123,_netdev 0 0 //192.168.56.11/samba-public /bgx3 cifs defaults,username=bgx3,password=123,_netdev 0 0
fstab参数说明 :
defaults: 使用默认挂载选项
username=用户名: 指定用户名
password=密码: 指定密码
_netdev: 网络设备,系统启动时等待网络就绪后再挂载
测试自动挂载 :
1 2 3 4 5 6 7 8 [root@samba-client ~] [root@samba-client ~] [root@samba-client ~]
6. Samba服务管理 6.1 服务管理命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 systemctl start smb nmb systemctl stop smb nmb systemctl restart smb nmb systemctl reload smb systemctl status smb nmb systemctl enable smb nmb
6.2 用户管理命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 pdbedit -a -u 用户名 pdbedit -x -u 用户名 pdbedit -L pdbedit -Lv pdbedit -u 用户名
6.3 配置文件测试 1 2 3 4 5 6 7 8 testparm testparm -s testparm /etc/samba/smb.conf
6.4 日志查看 1 2 3 4 5 6 tail -f /var/log/samba/log.smbdtail -f /var/log/samba/log.nmbdjournalctl -u smb -f
7. Samba故障排查 7.1 常见问题 问题1: 无法连接Samba服务器 排查步骤 :
1 2 3 4 5 6 7 8 systemctl status smb nmb ss -lntup | grep -E '139|445' firewall-cmd --list-services | grep samba
问题2: 登录失败 排查步骤 :
1 2 3 4 5 6 7 8 pdbedit -L pdbedit -Lv tail -f /var/log/samba/log.smbd
问题3: 无法写入文件 排查步骤 :
1 2 3 4 5 6 7 8 ls -ld /share/smbgetenforce grep writable /etc/samba/smb.conf
7.2 错误代码
错误代码
说明
解决方法
NT_STATUS_LOGON_FAILURE
登录失败
检查用户名密码
NT_STATUS_ACCESS_DENIED
访问被拒绝
检查用户权限和目录权限
NT_STATUS_BAD_NETWORK_NAME
共享名不存在
检查共享配置
NT_STATUS_IO_TIMEOUT
连接超时
检查网络和防火墙
8. Samba安全加固 8.1 安全建议
使用强密码 : Samba用户密码要足够复杂
限制访问IP : 使用hosts allow限制访问来源
禁用匿名访问 : 设置security = user
最小权限原则 : 只给用户必要的权限
定期更新 : 保持Samba软件最新版本
8.2 防火墙配置 1 2 3 4 5 6 7 8 9 10 firewall-cmd --permanent --add-service=samba firewall-cmd --reload firewall-cmd --permanent --add-port=139/tcp firewall-cmd --permanent --add-port=445/tcp firewall-cmd --permanent --add-port=137/udp firewall-cmd --permanent --add-port=138/udp firewall-cmd --reload
8.3 SELinux配置 1 2 3 4 5 6 chcon -t samba_share_t /share/smbsemanage fcontext -a -t samba_share_t "/share/smb(/.*)?" restorecon -Rv /share/smb
9. Samba性能优化 9.1 性能参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 vim /etc/samba/smb.conf [global] max connections = 100 max log size = 50 read raw = yes write raw = yes socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072
9.2 系统优化 1 2 3 4 5 6 7 8 9 cat >> /etc/sysctl.conf <<EOF # Samba优化 net.core.somaxconn = 1024 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 8192 EOF sysctl -p
10. Samba实战案例 10.1 案例1: 部门文件共享 需求 : 为不同部门创建独立的共享目录,每个部门只能访问自己的目录。
配置步骤 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 useradd -s /sbin/nologin dept1_user1 useradd -s /sbin/nologin dept2_user1 pdbedit -a dept1_user1 pdbedit -a dept2_user1 mkdir -p /data/samba/{dept1,dept2}chown dept1_user1 /data/samba/dept1chown dept2_user1 /data/samba/dept2cat >> /etc/samba/smb.conf <<EOF [dept1] comment = Department 1 Share path = /data/samba/dept1 valid users = dept1_user1 writable = yes [dept2] comment = Department 2 Share path = /data/samba/dept2 valid users = dept2_user1 writable = yes EOF systemctl restart smb
10.2 案例2: 公共只读共享 需求 : 创建一个公共共享目录,所有用户只能读取,不能写入。
配置步骤 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 mkdir -p /data/samba/publicchmod 755 /data/samba/publiccat >> /etc/samba/smb.conf <<EOF [public] comment = Public Read-Only Share path = /data/samba/public public = yes writable = no guest ok = yes EOF systemctl restart smb
实战优化