smb-server
Samba/CIFS 文件共享服务端配置工具
补充说明
samba命令 是 Linux 系统上实现 SMB/CIFS 协议的软件套件,用于与 Windows 系统之间共享文件和打印机。Samba 服务端通过 smb.conf 配置文件定义共享目录、权限控制、用户认证等,提供跨平台文件共享能力。
安装
安装 Samba
# Debian / Ubuntu
sudo apt-get update && sudo apt-get install samba
# RHEL / CentOS / Rocky / AlmaLinux
sudo yum install samba samba-client
# Fedora
sudo dnf install samba samba-client
# openSUSE
sudo zypper install samba samba-client
# Arch Linux
sudo pacman -S samba
启动并设置自启动
sudo systemctl enable smbd # 设置开机自启
sudo systemctl start smbd # 启动服务
sudo systemctl status smbd # 查看服务状态
创建 Samba 用户
Samba 使用独立的用户数据库(与系统用户分离),但 Samba 用户必须已存在于系统用户中。
# 创建系统用户(如已存在可跳过)
sudo useradd -M -s /sbin/nologin <用户名>
# 添加 Samba 密码
sudo smbpasswd -a <用户名>
smbpasswd -a会交互式提示输入两次密码。也可使用sudo smbpasswd -a <用户名> <密码>非交互式设置。
配置共享目录
创建共享目录并设置权限:
sudo mkdir -pm 755 /mnt
sudo chown <用户名>:<用户名> /mnt
编辑配置文件
编辑 /etc/samba/smb.conf,在文件末尾追加共享定义:
sudo tee -a /etc/samba/smb.conf <<'EOF'
###################################
######## 共享配置示例 ########
[共享名称]
comment = 共享说明
path = /mnt
browseable = yes
writeable = yes
read only = no
create mask = 0777
directory mask = 0777
guest ok = no
force user = root
force group = root
admin users = <用户名>
valid users = <用户名>,root
password required = yes
available = yes
EOF
重启服务
sudo systemctl restart smbd
配置防火墙
如果系统启用了防火墙,需放行 Samba 端口:
# firewalld(RHEL/CentOS/Fedora)
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload
# ufw(Debian/Ubuntu)
sudo ufw allow samba
验证
查看 Samba 用户
sudo pdbedit -L
查看共享配置
cat /etc/samba/smb.conf | grep -A 5 "\[共享名称"
本地验证共享
# 安装 smbclient(如未安装)
sudo apt-get install smbclient # Debian/Ubuntu
sudo yum install samba-client # RHEL/CentOS
# 查看服务器共享列表
smbclient -L 127.0.0.1 -U <用户名>
# 连接共享
smbclient //127.0.0.1/共享名称 -U <用户名>
查看本机 IP
hostname -I | awk '{print $1}'
其他设备通过 //<本机IP>/共享名称 访问共享。
常见问题
权限拒绝
# 确认共享目录权限
ls -ld /mnt
# 确认 Samba 用户存在
sudo pdbedit -L
# 检查配置文件语法
sudo testparm
防火墙阻挡
# 确认 Samba 端口放行:137/udp、138/udp、139/tcp、445/tcp
sudo firewall-cmd --list-services # firewalld
sudo ufw status # ufw
SELinux 阻挡(RHEL/CentOS)
# 查看 SELinux 状态
getenforce
# 允许 Samba 共享目录
sudo setsebool -P samba_export_all_rw on