萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Samba 檔案共享伺服器架設完整指南:Linux 與 Windows 無縫互存

前言:為何選擇 Samba?

Samba 實現 SMB/CIFS 協議,讓 Linux 成為 Windows 網路鄰居中的一員,提供檔案共享、印表機共享、域控制器功能。對比 Windows 自帶共享,Samba 配置檔案化、權限精細、效能穩定,幾分鐘即可完成部署。


一、架設前提:Linux 權限基礎

Samba 權限 = Linux 檔案系統權限 ∩ Samba 設定權限。兩者同時滿足才能存取。必須掌握:

  • 使用者/群組管理:useradd, groupadd, usermod, /etc/passwd, /etc/group
  • 檔案權限:chmod, chown, chgrp, ls -l
  • ACL 進階權限:setfacl, getfacl

二、Samba 核心服務與管理

2.1 兩大核心守護程序

服務程序名功能端口
SMB 服務smbd檔案/印表機共享、使用者驗證139, 445
NMB 服務nmbdNetBIOS 名稱解析、工作組瀏覽、主瀏覽器選舉137 (UDP)
關鍵:nmbd 未啟動時,Windows 僅能用 IP 存取,無法透過電腦名稱瀏覽。

2.2 服務管理指令

# Systemd 系統 (現代主流)
systemctl start|stop|restart|enable|status smb nmb

# SysVinit 系統 (舊版)
/etc/init.d/smb start|stop|restart
/etc/init.d/nmb start|stop|restart

# 通用手動啟動 (編譯安裝時)
/usr/sbin/smbd -D
/usr/sbin/nmbd -D

# 檢查程序
pgrep -lf smbd
pgrep -lf nmbd

# 強制終止
pkill smbd; pkill nmbd

2.3 防火牆開放端口

# firewalld (CentOS 7+/RHEL 7+/Fedora)
firewall-cmd --permanent --add-service=samba
firewall-cmd --reload

# iptables 直接開放
iptables -I INPUT -p tcp --dport 139 -j ACCEPT
iptables -I INPUT -p tcp --dport 445 -j ACCEPT
iptables -I INPUT -p udp --dport 137 -j ACCEPT
iptables -I INPUT -p udp --dport 138 -j ACCEPT
service iptables save

2.4 核心設定檔:/etc/samba/smb.conf

[global]
    workgroup = WORKGROUP        # 工作組名稱,需與 Windows 一致
    netbios name = LINUX_SERVER  # 網路鄰居顯示名稱
    server string = Samba %v
    security = user              # 使用者級驗證 (推薦)
    map to guest = Bad User      # 驗證失敗映射為 guest
    passdb backend = tdbsam      # 密碼資料庫後端

    # 日誌與效能
    log file = /var/log/samba/log.%m
    max log size = 50
    socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

[homes]
    comment = Home Directories
    browseable = no
    writable = yes
    valid users = %S

[public]
    comment = Public Share
    path = /srv/samba/public
    browseable = yes
    writable = yes
    guest ok = yes
    create mask = 0664
    directory mask = 0775
    force group = users

[private]
    comment = Private Share
    path = /srv/samba/private
    browseable = yes
    writable = yes
    valid users = alice, bob
    create mask = 0660
    directory mask = 0770

三、使用者帳號與密碼管理

Samba 使用獨立密碼資料庫 (tdbsam),系統使用者需另行建立 Samba 密碼。

# 建立系統使用者 (若不存在)
useradd -M -s /sbin/nologin alice

# 設定 Samba 密碼
smbpasswd -a alice   # 新增使用者並設定密碼
smbpasswd -e alice   # 啟用使用者
smbpasswd -x alice   # 刪除使用者
smbpasswd -d alice   # 停用使用者

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

四、共享目錄建立與權限實戰

4.1 公共共享 (所有人可讀寫)

mkdir -p /srv/samba/public
chown nobody:users /srv/samba/public
chmod 2775 /srv/samba/public   # SGID: 新檔案繼承群組
setfacl -m g:users:rwx /srv/samba/public
setfacl -d -m g:users:rwx /srv/samba/public  # 預設 ACL

4.2 私有共享 (特定使用者)

mkdir -p /srv/samba/private
chown alice:alice /srv/samba/private
chmod 2770 /srv/samba/private
setfacl -m u:bob:rwx /srv/samba/private
setfacl -d -m u:bob:rwx /srv/samba/private

4.3 家目錄共享

[homes] 區段自動分享每位使用者家目錄,valid users = %S 限制僅本人存取。


五、客戶端存取驗證

5.1 Linux 客戶端:smbclient

# 列出伺服器共享
smbclient -L //192.168.1.100 -U alice

# 互動式連線 (類 FTP)
smbclient //192.168.1.100/private -U alice
smb: \> ls
smb: \> get remote.txt local.txt
smb: \> put local.txt remote.txt
smb: \> mkdir newdir
smb: \> quit

# 掛載到本地目錄 (需 cifs-utils)
mount -t cifs //192.168.1.100/public /mnt/samba -o username=alice,password=****,uid=1000,gid=1000,iocharset=utf8
# 寫入 /etc/fstab 永久掛載
//192.168.1.100/public /mnt/samba cifs credentials=/etc/samba/cred,uid=1000,gid=1000,iocharset=utf8 0 0

5.2 Windows 客戶端

  • 檔案總管輸入:\\192.168.1.100 或 \\LINUX_SERVER
  • 對應網路磁碟機:右鍵「網路」→「對應網路磁碟機」。

六、常用管理工具

工具用途
testparm語法檢查 smb.conf
smbstatus顯示目前連線、開啟檔案、鎖定狀態
smbtree文字模式瀏覽網路鄰居樹狀圖
smbpasswd管理 Samba 密碼
pdbedit進階使用者資料庫管理
net rpc遠端管理 (關機、使用者管理等)

七、進階主題

  • 域控制器 (AD DC):Samba 4+ 支援 Active Directory 域控制器功能 (samba-tool domain provision)。
  • 印表機共享:[printers] 區段配合 CUPS 實現網路列印。
  • DFS 複寫:分散式檔案系統複寫。
  • 效能調校:socket options、read raw/write raw、max xmit、啟用 aio 非同步 I/O。

八、故障排除清單

  1. testparm 檢查語法錯誤。
  2. systemctl status smb nmb 確認服務運行。
  3. firewall-cmd --list-all / iptables -L 確認端口開放。
  4. smbclient -L //localhost -U% 本機測試匿名列表。
  5. tail -f /var/log/samba/log.* 觀察錯誤日誌。
  6. SELinux:setsebool -P samba_enable_home_dirs on、chcon -t samba_share_t /path。
  7. Windows 認證問題:控制台 → 認證管理器 → 移除舊憑證重試。

總結

Samba 架設核心三步驟:系統權限配置 → smb.conf 共享定義 → smbpasswd 帳號管理。善用 testparm、smbstatus、smbclient 驗證,配合防火牆與 SELinux 設定,即能建立穩定、安全、高效能的跨平台檔案共享服務。

copyright © 萬盛學電腦網 all rights reserved