SMB/CIFS 協定讓 Linux 與 Windows 互通檔案。本文示範 Ubuntu/Debian 環境下 Samba 獨立伺服器部署、共享目錄配置、使用者認證與防火牆規則。
apt update && apt install -y samba smbclient cifs-utils
# samba: 伺服器端 (smbd, nmbd)
# smbclient: 客戶端測試工具
# cifs-utils: 掛載遠端 SMB 共享
mkdir -p /srv/samba/share
chown nobody:nogroup /srv/samba/share
chmod 2770 /srv/samba/share # SGID: 新檔繼承群組
setfacl -m g:smbusers:rwx /srv/samba/share
setfacl -d -m g:smbusers:rwx /srv/samba/share # 預設 ACL
groupadd smbusers
[global]
workgroup = WORKGROUP
server string = %h server (Samba, Ubuntu)
netbios name = UBUNTU-SRV
security = user
map to guest = Bad User
obey pam restrictions = yes
pam password change = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
unix password sync = yes
syslog = 0
log file = /var/log/samba/log.%m
max log size = 1000
logging = file
panic action = /usr/share/samba/panic-action %d
server role = standalone server
usershare allow guests = yes
# 效能調優
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536
aio read size = 16384
aio write size = 16384
[share]
path = /srv/samba/share
comment = Shared Directory
browseable = yes
read only = no
guest ok = no
valid users = @smbusers
force group = smbusers
create mask = 0660
directory mask = 2770
vfs objects = acl_xattr
map acl inherit = yes
# 系統使用者需先存在
useradd -M -s /usr/sbin/nologin -G smbusers alice
# 設定 Samba 密碼 (獨立於系統密碼)
smbpasswd -a alice
# 啟用帳號
smbpasswd -e alice
# 列出 Samba 使用者
pdbedit -L -v
# 語法檢查
testparm
# 啟動服務
systemctl enable --now smbd nmbd
# 本機測試
smbclient -L localhost -U alice
# 輸入密碼後應列出 share
# 掛載測試
mount -t cifs //localhost/share /mnt -o username=alice,vers=3.0
\\UBUNTU-SRV\share 或 \\192.168.1.x\share
# ufw
ufw allow from 192.168.1.0/24 to any port 139,445 proto tcp
ufw allow from 192.168.1.0/24 to any port 137,138 proto udp
# firewalld
firewall-cmd --permanent --add-service=samba
firewall-cmd --permanent --add-service=samba-client
firewall-cmd --reload
vfs objects = recycle + recycle:repository = .recycle/%Uvfs objects = full_audit + full_audit:prefix = %u|%I|%m|%Sfruit:time machine = yes (macOS)| 錯誤 | 原因 | 解決 |
|---|---|---|
| NT_STATUS_LOGON_FAILURE | Samba 密碼未設定/錯誤 | smbpasswd -a user |
| NT_STATUS_ACCESS_DENIED | 檔案系統權限/ACL 不符 | 檢查 chmod/chown/setfacl、valid users |
| 瀏覽不到共享 | nmbd 未啟動/工作群組不符 | systemctl start nmbd、workgroup 一致 |
| 大檔傳輸中斷 | SMB 簽名/加密效能 | client signing = no, server signing = no (非敏感環境) |
規範化部署:系統用戶 + smbusers 群組 + ACL + SGID 目錄 + smbpasswd 獨立認證 + 防火牆限制網段,構建安全易管的跨平台檔案共享服務。