Samba 實現 Linux 與 Windows 互訪文件共享。本文基於 RHEL 5.1 / Samba 3.0 實戰,覆蓋安裝、核心配置 smb.conf、匿名與認證共享、Linux/Windows 客戶端訪問、掛載技巧。
nmbd 提供。smbd (文件/打印共享,端口 139/445)、nmbd (名稱解析,端口 137/138 UDP)。
# 檢查安裝
rpm -q samba
# 安裝 (光盤/yum)
yum install samba samba-client samba-common -y
# 服務控制
/etc/init.d/smb start|stop|restart|status
# 或 systemctl (CentOS 7+)
systemctl enable --now smb nmb
# 端口驗證
netstat -tulpn | grep -E '139|445|137|138'
/etc/samba/smb.conf
[global]
workgroup = IXDBA.NET # 工作組/域名
netbios name = ixdba # 網絡鄰居顯示名稱
server string = My Linux Samba # 註釋
log file = /var/log/samba/%m.log # 按客戶端分日志
security = share # 認證模式: share(匿名) / user(用戶級) / domain / ads
# security = user # 生產推薦
passdb backend = tdbsam # 用戶數據庫後端
load printers = no # 禁用打印共享
printing = bsd
# 匿名只讀共享
[public]
path = /samba/public
browseable = yes
read only = yes
guest ok = yes
# 匿名讀寫共享 (需目錄權限 777 或 nobody)
[upload]
path = /samba/upload
browseable = yes
writable = yes
guest ok = yes
create mask = 0664
directory mask = 0775
# 用戶認證共享 (security = user 時)
[private]
path = /samba/private
browseable = yes
writable = yes
valid users = alice, bob
write list = alice
create mask = 0660
directory mask = 0770
mkdir -p /samba/public /samba/upload /samba/private
# 匿名目錄授權 nobody
chown -R nobody:nobody /samba/public /samba/upload
chmod 777 /samba/upload
# 認證目錄授權具體用戶
useradd -s /sbin/nologin alice
useradd -s /sbin/nologin bob
chown -R alice:alice /samba/private
chmod 770 /samba/private
# 設置 Samba 密碼 (與系統用戶分離)
smbpasswd -a alice
smbpasswd -a bob
\\192.168.60.231 或 \\ixdba (NetBIOS 名)。
# 查看共享列表
smbclient -L //192.168.60.231 -U alice
# 交互式訪問 (類 FTP)
smbclient //192.168.60.231/private -U alice
smb: \> ls
smb: \> get file.txt
smb: \> put local.txt
smb: \> quit
# 命令行直接下載
smbclient //192.168.60.231/private -U alice -c "get file.txt"
# 匿名掛載
mount -t cifs //192.168.60.231/public /mnt/samba -o guest
# 用戶掛載
mount -t cifs //192.168.60.231/private /mnt/samba -o username=alice,password=****,uid=1000,gid=1000
# 掛載選項詳解
# uid/gid: 指定本地用戶擁有權
# file_mode/dir_mode: 權限掩碼
# vers=3.0: 指定 SMB 協議版本 (1.0/2.0/3.0/3.1.1)
# sec=ntlmssp: 安全協商
# 寫入 /etc/fstab
//192.168.60.231/private /mnt/samba cifs credentials=/root/.smbcred,uid=1000,gid=1000,vers=3.0 0 0
# /root/.smbcred 內容:
# username=alice
# password=****
mount -t smbfs //192.168.60.231/public /mnt/samba -o username=alice
# RHEL 5+ 棄用 smbfs,統一使用 cifs
| 現象 | 原因 | 解決 |
|---|---|---|
| Windows 看不到共享 | nmbd 未啟動 / 防火牆阻攔 UDP 137/138 | 啟動 nmb、放行端口 |
| 權限被拒 | Linux 文件權限與 Samba 權限不匹配 | 檢查 chown/chmod、create mask、valid users |
| 中文亂碼 | 字符集不一致 | smb.conf 加 unix charset = UTF-8 dos charset = CP936 |
| 連接數耗盡 | max connections 限制 | 調大或優化客戶端連接復用 |
security = user**,禁用 share 模式。interfaces = lo eth0 bind interfaces only = yes。server signing = mandatory smb encrypt = required (需 SMB 3.0+)。/var/log/samba/ 日志。min protocol = SMB2。