💾 Samba

Linux 與 Windows 網路檔案共享

Samba 實作 SMB/CIFS 協定,讓 Linux 伺服器能提供 Windows 可讀寫的網路共享資料夾,也可作 Active Directory 域成員,適合混合作業系統環境。

安裝

$ sudo apt update && sudo apt install -y samba samba-common-bin
sudo systemctl enable --now smbd nmbd
$ # 備份預設設定
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

設定共享(/etc/samba/smb.conf)

[global]
workgroup    = WORKGROUP
server string = Linux File Server
security = user
map to guest = bad user       # 未知使用者當作訪客
smb encrypt = required        # 強制加密(Windows 10+ 支援)

# 效能調整
socket options = TCP_NODELAY SO_RCVBUF=131072 SO_SNDBUF=131072

# ─── 公開共享(不需密碼) ───────────────
[public]
comment   = 公開資料夾
path      = /srv/samba/public
browseable = yes
read only  = yes
guest ok   = yes

# ─── 需要密碼的私有共享 ─────────────────
[files]
comment    = 私有共享
path       = /srv/samba/files
browseable = yes
read only  = no
valid users = alice bob       # 只允許這些 Samba 使用者存取
create mask    = 0664
directory mask = 0775
$ # 建立共享目錄
sudo mkdir -p /srv/samba/{public,files}
sudo chmod 0775 /srv/samba/public /srv/samba/files
sudo chown -R nobody:nogroup /srv/samba/public

# 測試設定語法
testparm

sudo systemctl restart smbd nmbd

使用者管理

$ # Samba 使用者需先存在於系統使用者中
sudo useradd -M -s /usr/sbin/nologin alice

# 新增 Samba 密碼(獨立於系統密碼)
sudo smbpasswd -a alice

# 啟用/停用 Samba 使用者
sudo smbpasswd -e alice   # 啟用
sudo smbpasswd -d alice   # 停用

# 列出所有 Samba 使用者
sudo pdbedit -L

從 Windows 連線

在 Windows 檔案總管網址列輸入:

\\192.168.1.100\files
# 或使用主機名稱
\\linux-server\files

也可以設定為網路磁碟機(右鍵「本電腦」→「連線網路磁碟機」)。

$ # Linux 客戶端掛載 Samba 共享
sudo apt install -y cifs-utils
sudo mount -t cifs //server-ip/files /mnt/samba \
  -o username=alice,password=密碼,uid=$(id -u),gid=$(id -g)

常用操作

操作指令
測試設定語法testparm
查看連線中的使用者sudo smbstatus
列出共享清單smbclient -L //localhost -U alice
查看日誌sudo tail -f /var/log/samba/log.smbd
防火牆開放sudo ufw allow samba