CentOS 配置 Samba 服务指南 🖥️
📋 导航目录
🌟 简介
本指南将帮助您在 CentOS 系统上部署和配置 Samba 服务,实现文件共享功能。Samba 允许 Linux/Unix 系统与 Windows 系统之间共享文件和打印机。
🔧 一、Samba 基础设置
1. 更新系统并安装 Samba
1
|
yum update -y && yum install samba -y && sudo systemctl enable smb && sudo systemctl restart smb
|
2. 创建 admin 用户并设置密码
1
|
useradd admin && smbpasswd -a admin
|
系统会提示您输入并确认 admin 用户的 Samba 密码
⚙️ 二、CentOS Samba 服务端配置
1. 备份原始配置文件
1
|
cp -i /etc/samba/smb.conf /etc/samba/smb.conf.bak && cd /etc/samba && ls
|
2. 方法一:覆盖 Samba 配置文件
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
mkdir -pm 755 /mnt && chmod +x /etc/samba/smb.conf && cat > /etc/samba/smb.conf <<'EOF'
###################################
######## samba全局配置 ########
[global]
## 设置工作组名称
workgroup = WORKGROUP
## 设置非活动连接被关闭的时间(分钟)
deadtime = 99
## 服务器描述字符串
server string = Samba on CentOS
## 设置网络基本输入/输出系统(NetBIOS)名称
netbios name = CentOS
## Unix字符集设置为UTF-8
unix charset = UTF-8
## 禁用核心转储
enable core files = no
## 设置安全模式为用户级别
security = user
## 将未知用户映射为访客
map to guest = Bad User
## 设置socket选项,优化网络传输性能
socket options = IPTOS_LOWDELAY TCP_NODELAY
## 设置最大传输单元大小
max xmit = 131072
## 设置最小接收文件大小,用于异步I/O操作
min receivefile size = 131072
## 启用假的机会锁
fake oplocks = Yes
## 启用sendfile系统调用,提高文件传输效率
use sendfile = Yes
## 设置异步I/O读取阈值,0表示禁用
aio read size = 0
## 设置异步I/O写入阈值,0表示禁用
aio write size = 0
## 设置服务器支持的最低SMB协议版本
server min protocol = NT1
## 允许使用NTLMv1认证方式
ntlm auth = ntlmv1-permitted
## 禁用自动加载printcap打印机
load printers = No
## 设置打印服务不使用printcap
printcap name = /dev/null
## 禁用SPOOLSS服务
disable spoolss = yes
## 设置打印机状态信息的解释方式
printing = bsd
## 设置通过MDNS广告的服务器名称
mdns name = mdns
## 设置Samba不共享的文件和目录列表
veto files = /Thumbs.db/.DS_Store/._.DS_Store/.apdisk/
## 允许删除只包含veto文件的目录
delete veto files = yes
# 设置无效用户
# invalid users = root
## 指定服务器应该监听 SMB 流量的端口。
## 139 是 netbios/nmbd
# smb ports = 445 139
######## 我的samba共享设置 ########
[CentOS]
## 这是我的共享名称
comment = mysamba
## 共享目录的路径
path = /mnt
## 指定共享是否应该在网络邻居中被浏览到,yes显示共享名称,no隐藏共享名称。
browseable = yes
## 是否允许用户写入此共享,yes为可写入,no为不可写入。
writeable = yes
## 指定共享用户是否可读写,yes为只读,no为读写。
read only = no
## 新建文件的默认权限掩码
create mask = 0777
## 新建目录的默认权限掩码
directory mask = 0777
## 允许访客否
guest ok = no
## 强制用户为root
force user = root
## 强制组为root
force group = root
## 定义管理员用户列表
admin users = admin
## 定义允许访问此共享的有效用户列表,也可以是组名(以 @ 开头)
valid users = admin,root
## 要求密码访问
password required = yes
## 共享是否可用, yes为显示共享,no 为隐藏共享
available = yes
## 对于Apple文件进行编码
fruit:encoding = native
## 对于Apple文件元数据
fruit:metadata = stream
## 设置为 no 表示Samba不会拒绝AppleDouble文件
fruit:veto_appledouble = no
## 这些VFS模块可以增强Samba服务器的功能
vfs objects = catia fruit streams_xattr
EOF
chown admin /mnt/ && systemctl restart smb && hostname -i
|
3. 方法二:追加 Samba 配置
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
mkdir -pm 755 /mnt && chmod +x /etc/samba/smb.conf && tee -a /etc/samba/smb.conf <<'EOF'
###################################
######## 我的samba共享设置 ########
[CentOS]
## 这是我的共享名称
comment = mysamba
## 共享目录的路径
path = /mnt
## 指定共享是否应该在网络邻居中被浏览到,yes显示共享名称,no隐藏共享名称。
browseable = yes
## 是否允许用户写入此共享,yes为可写入,no为不可写入。
writeable = yes
## 指定共享用户是否可读写,yes为只读,no为读写。
read only = no
## 新建文件的默认权限掩码
create mask = 0777
## 新建目录的默认权限掩码
directory mask = 0777
## 允许访客否
guest ok = no
## 强制用户为root
force user = root
## 强制组为root
force group = root
## 定义管理员用户列表
admin users = admin
## 定义允许访问此共享的有效用户列表,也可以是组名(以 @ 开头)
valid users = admin,root
## 要求密码访问
password required = yes
## 共享是否可用, yes为显示共享,no 为隐藏共享
available = yes
## 对于Apple文件进行编码
fruit:encoding = native
## 对于Apple文件元数据
fruit:metadata = stream
## 设置为 no 表示Samba不会拒绝AppleDouble文件
fruit:veto_appledouble = no
## 这些VFS模块可以增强Samba服务器的功能
vfs objects = catia fruit streams_xattr
EOF
chown admin /mnt/ && systemctl restart smb && hostname -i
|
4. 方法三:一键部署脚本
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
touch ~/smb.sh && cat > ~/smb.sh <<'EOF'
#!/bin/bash
yum update -y && yum install samba -y
mkdir -pm 755 /mnt && cat >>/etc/samba/smb.conf <<'MYENDMARK'
[CentOS]
## 这是我的共享名称
comment = mysamba
## 共享目录的路径
path = /mnt
## 指定共享是否应该在网络邻居中被浏览到,yes显示共享名称,no隐藏共享名称。
browseable = yes
## 是否允许用户写入此共享,yes为可写入,no为不可写入。
writeable = yes
## 指定共享用户是否可读写,yes为只读,no为读写。
read only = no
## 新建文件的默认权限掩码
create mask = 0777
## 新建目录的默认权限掩码
directory mask = 0777
## 允许访客否
guest ok = no
## 强制用户为root
force user = root
## 强制组为root
force group = root
## 定义管理员用户列表
admin users = admin
## 定义允许访问此共享的有效用户列表,也可以是组名(以 @ 开头)
valid users = admin,root
## 要求密码访问
password required = yes
## 共享是否可用, yes为显示共享,no 为隐藏共享
available = yes
## 对于Apple文件进行编码
fruit:encoding = native
## 对于Apple文件元数据
fruit:metadata = stream
## 设置为 no 表示Samba不会拒绝AppleDouble文件
fruit:veto_appledouble = no
## 这些VFS模块可以增强Samba服务器的功能
vfs objects = catia fruit streams_xattr
MYENDMARK
## 新建admin用户 && 为admin用户创建两次密码
useradd admin 2>/dev/null || true
(echo yifan0719; echo yifan0719) | smbpasswd -a -s admin
systemctl restart smb
EOF
chmod +x ~/smb.sh && bash ~/smb.sh
|
查看脚本内容:
🔗 三、CentOS 作为 Samba 客户端配置
1. 安装 Samba 客户端工具
1
|
yum update -y && yum install samba-client cifs-utils -y
|
2. 创建挂载点并配置自动挂载
1
2
3
4
5
6
7
8
|
mkdir -pm 755 /mnt/ARS2-SMB && tee -a /etc/fstab <<'EOF'
## CentOS 8为samba客户端配置(追加内容)
## 服务器地址和共享名:10.10.10.251/ARS2,挂载到本地路径: /mnt/ARS2-SMB,账户:root,密码:yifan0719
//10.10.10.251/ARS2 /mnt/ARS2-SMB cifs username=root,password=yifan0719,uid=1000,gid=1000,file_mode=0777,dir_mode=0777 0 0
EOF
# 测试挂载
mount -a
|
注意:在实际使用中,建议使用凭据文件而不是直接在 fstab 中存储密码,以提高安全性。
3. 使用凭据文件(更安全的方法)
1
2
3
4
5
6
7
8
9
10
11
12
|
# 创建凭据文件
echo "username=root" > /root/.smbcredentials
echo "password=yifan0719" >> /root/.smbcredentials
chmod 600 /root/.smbcredentials
# 更新 fstab 使用凭据文件
sed -i '/\/\/10.10.10.251\/ARS2/d' /etc/fstab
echo "//10.10.10.251/ARS2 /mnt/ARS2-SMB cifs credentials=/root/.smbcredentials,uid=1000,gid=1000,file_mode=0777,dir_mode=0777 0 0" >> /etc/fstab
# 重新挂载
umount /mnt/ARS2-SMB 2>/dev/null
mount -a
|
🔍 四、验证 Samba 服务
1. 安装 Samba 客户端工具
1
|
yum update -y && yum install samba-client -y
|
2. 验证 Samba 服务
1
|
smbclient //10.10.10.246/CentOS -U admin
|
输入密码后,使用 ls
命令查看共享内容,按 Ctrl+C
退出
3. 检查 Samba 安装状态
4. 查看 Samba 服务状态
1
2
|
systemctl status smb
systemctl status nmb # NetBIOS 名称服务
|
5. 查看 Samba 用户列表
6. 添加 root 用户到 Samba(可选)
🛡️ 五、防火墙和 SELinux 配置
1. 配置防火墙允许 Samba
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 检查防火墙状态
systemctl status firewalld
# 如果防火墙开启,添加 Samba 服务
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
|
2. 配置 SELinux(如果启用)
1
2
3
4
5
6
7
|
# 检查 SELinux 状态
sestatus
# 如果 SELinux 启用,设置正确的上下文
chcon -t samba_share_t /mnt
setsebool -P samba_enable_home_dirs on
setsebool -P samba_export_all_rw on
|
💡 六、故障排除
1. 检查配置文件语法
2. 查看 Samba 日志
1
2
|
tail -f /var/log/samba/log.smbd
tail -f /var/log/samba/log.nmbd
|
3. 测试网络连通性
1
2
3
4
5
|
# 测试与 Samba 服务器的连接
ping 10.10.10.251
# 查看服务器上的共享
smbclient -L //10.10.10.251 -U root
|
4. 重新启动服务
1
|
systemctl restart smb nmb
|
🔒 七、安全建议
- 使用强密码:为 Samba 用户设置复杂密码
- 定期更新:保持系统和 Samba 软件包最新
- 限制访问:使用防火墙限制对 Samba 端口的访问
- 使用专用用户:为 Samba 共享创建专用用户,避免使用 root
- 定期备份配置:备份
/etc/samba/smb.conf
文件
- 监控日志:定期检查 Samba 日志文件
🚀 通过以上步骤,您已经在 CentOS 上成功部署和配置了 Samba 服务,可以实现与 Windows 系统和其他 Linux 系统的文件共享。无论是作为服务器还是客户端,Samba 都提供了强大的文件共享功能!