Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Samba 文件共享服務全攻略:從基礎配置到 AD 域整合、ACL 精細權限、SELinux 共存實戰

編輯:Linux 教學

Samba 是 Linux/Unix 實現與 Windows 互操作文件/打印共享的標準方案。本文系統梳理 Samba 核心架構、smb.conf 關鍵參數、共享類型 (用戶家目錄、公共目錄、打印機)、用戶認證體系 (tdbsam/ldapsam/ads)、ACL 精細權限控制、SELinux 布爾值與上下文配置、客戶端掛載 (smbclient/cifs)、防火牆策略、高可用 (CTDB) 入門,構建生產級跨平台文件服務完整知識體系。

核心架構與進程

進程功能端口備註
smbd文件/打印共享核心服務、用戶認證、授權TCP 139, 445每連接一進程
nmbdNetBIOS 名稱解析、瀏覽服務、主機宣告UDP 137, 138WINS 服務器/客戶端
winbinddAD 域用戶/組映射、NSS/PAM 整合、單點登入TCP 445 (AD)需加入域

主配置文件 /etc/samba/smb.conf 精華參數

[global] 全域關鍵設置


[global]
    workgroup = MYDOMAIN           # 工作組/域名
    realm = MYDOMAIN.COM           # Kerberos Realm (AD 模式)
    security = ads                 # 安全模式: user/ads/domain/server/share
    password server = DC.MYDOMAIN.COM  # AD 模式指定 DC
    dedicated keytab file = /etc/krb5.keytab  # AD Kerberos keytab

    server string = Samba File Server %v
    netbios name = FILESRV01

    interfaces = lo eth0 192.168.10.0/24  # 監聽介面
    bind interfaces only = yes

    hosts allow = 127. 192.168.10. 10.0.0.  # 白名單
    hosts deny = 0.0.0.0/0

    log file = /var/log/samba/%m.log
    max log size = 50000
    logging = file syslog@0

    # 字符集
    unix charset = UTF-8
    dos charset = CP936

    # 性能調優
    socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
    use sendfile = yes
    aio read size = 16384
    aio write size = 16384

    # 文件系統特性支援
    vfs objects = acl_xattr full_audit recycle
    recycle:repository = .recycle/%U
    recycle:keeptree = yes
    recycle:versions = yes
    full_audit:prefix = %u|%I|%m|%S
    full_audit:success = mkdir rename unlink pwrite
    full_audit:failure = none
    full_audit:facility = local7
    full_audit:priority = NOTICE

安全模式選擇指南

模式適用場景認證方式優/缺點
user (默認)獨立文件服務器本地 tdbsam 數據庫簡單、無域依賴、用戶管理分散
ads加入 AD 域企業環境Kerberos + AD LDAP單點登入、集中管理、需 winbindd、配置複雜
domainNT4 域 (舊)域控制器驗證已棄用
server委託其他 Samba 服務器驗證遠程 SMB 會話單點故障、不推薦
share匿名只讀共享 (極不安全)無認證已棄用、極高風險

共享定義實戰範例

1. 用戶家目錄自動共享 [homes]


[homes]
    comment = Home Directory of %U
    browseable = no
    read only = no
    create mask = 0600
    directory mask = 0700
    valid users = %S
    vfs objects = acl_xattr

2. 部門公共目錄 (ACL 精細控制)


[dept_share]
    comment = Department Shared Storage
    path = /srv/samba/dept
    browseable = yes
    read only = no
    # 基於 POSIX ACL + Windows ACL 映射
    vfs objects = acl_xattr
    # 強制創建文件屬組
    force group = @deptgroup
    # 只有 @deptgroup 成員可寫,其他人只讀
    write list = @deptgroup
    # 訪問控制 (配合 hosts allow)
    valid users = @deptgroup, @management

3. 隻讀軟體分發目錄


[software]
    comment = Software Repository (Read-Only)
    path = /srv/samba/software
    browseable = yes
    read only = yes
    guest ok = yes
    force user = nobody

4. 打印機共享 [printers]


[printers]
    comment = All Printers
    path = /var/spool/samba
    printable = yes
    browseable = no
    guest ok = no
    read only = yes
    create mask = 0700

用戶認證體系

tdbsam (獨立服務器默認)


# 添加系統用戶 (必須先有系統賬號)
useradd -s /sbin/nologin -M smbuser1
# 設置 Samba 密碼 (獨立於系統密碼)
smbpasswd -a smbuser1
# 啟用/禁用/刪除
smbpasswd -e smbuser1
smbpasswd -d smbuser1
smbpasswd -x smbuser1

# 列出用戶
pdbedit -L -v

ADS (加入 AD 域)


# 1. 確保 DNS、時間同步 (ntpdate DC_IP)
# 2. 配置 Kerberos /etc/krb5.conf
# 3. 加入域
net ads join -U administrator%Password
# 4. 啟動 winbindd
service winbindd start; chkconfig winbindd on
# 5. 配置 NSS/PAM 解析域用戶
authconfig --enablewinbind --enablewinbindauth --update
# 6. 測試
wbinfo -u  # 列出域用戶
getent passwd domain\\user

ACL 精細權限實戰:POSIX ACL + Samba VFS 映射

1. 文件系統啟用 ACL


# /etc/fstab 掛載選項加 user_xattr,acl
/dev/sdb1 /srv/samba ext4 defaults,user_xattr,acl 0 0
mount -o remount /srv/samba

2. 設置 POSIX ACL (Linux 層面)


# 目錄默認 ACL (繼承)
setfacl -R -m d:u::rwx,d:g::rwx,d:o:--- /srv/samba/dept
# 用戶/組具體權限
setfacl -R -m u:alice:rwx,g:deptgroup:rwx,o:--- /srv/samba/dept
# 查看
getfacl /srv/samba/dept

3. Samba VFS acl_xattr 自動映射 Windows ACL

在共享定義中添加 vfs objects = acl_xattr,Samba 會自動將 Windows 客戶端通過「屬性→安全」設置的 ACL 寫入文件擴展屬性 (system.posix_acl_access/default),並反向映射給 Windows 顯示,實現雙向同步。

SELinux 共存配置 (CentOS/RHEL 必讀)


# 1. 共享目錄打標
semanage fcontext -a -t samba_share_t "/srv/samba(/.*)?"
restorecon -Rv /srv/samba

# 2. 開放家目錄訪問 (如需共享 ~)
setsebool -P samba_enable_home_dirs on
setsebool -P use_samba_home_dirs on

# 3. 允許匿名寫入 (如 [software] guest ok=yes 需寫入)
setsebool -P allow_smbd_anon_write on

# 4. 允許 Samba 域控制器功能 (ADS 模式)
setsebool -P samba_domain_controller on

# 5. 查看所有 Samba 相關布爾值
getsebool -a | grep samba

客戶端訪問與掛載

Linux 客戶端 (CIFS/SMB3)


# 手動掛載
mount -t cifs //192.168.10.50/dept_share /mnt/share \
  -o username=alice,domain=MYDOMAIN,vers=3.0,sec=ntlmssp,uid=1000,gid=1000

# /etc/fstab 自動掛載 (憑證文件避免明文密碼)
//192.168.10.50/dept_share /mnt/share cifs credentials=/etc/samba/cred,vers=3.0,sec=ntlmssp,uid=1000,gid=1000 0 0

# /etc/samba/cred (chmod 600)
username=alice
password=SecretPass
domain=MYDOMAIN

Windows 客戶端

  • 檔案總管輸入 \\192.168.10.50 訪問
  • 映射網絡磁碟機:右鍵「這台電腦」→「映射網絡磁碟機」→ 輸入路徑、勾選「使用其他憑證登入」
  • 命令行:net use Z: \\192.168.10.50\dept_share /user:MYDOMAIN\alice *

防火牆策略 (firewalld/iptables)


# firewalld
firewall-cmd --permanent --add-service=samba
firewall-cmd --permanent --add-service=samba-client
firewall-cmd --reload

# iptables 精細控制 (僅允許特定網段)
iptables -A INPUT -s 192.168.10.0/24 -p tcp -m multiport --dports 139,445 -j ACCEPT
iptables -A INPUT -s 192.168.10.0/24 -p udp -m multiport --dports 137,138 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 139,445 -j REJECT
iptables -A INPUT -p udp -m multiport --dports 137,138 -j REJECT
service iptables save

高可用方案:CTDB (Clustered TDB)

多節點 Samba 共享同一存儲 (GFS2/OCFS2/NFS),CTDB 管理 IP 漂移、TDB 數據庫同步、節點健康檢查,實現 Active-Active 文件服務高可用。核心配置:/etc/ctdb/nodes (節點私網 IP)、/etc/ctdb/public_addresses (浮動公網 IP)、共享掛載點 /etc/sysconfig/ctdb 指定。生產部署建議參考 Red Hat GFS2 + CTDB 官方文檔。

總結

Samba 部署的核心難點在於 安全模式選型 (user vs ads)、ACL 雙向映射 (vfs acl_xattr)、SELinux 上下文與布爾值、跨平台字符集 (UTF-8/CP936)、AD 域整合 (winbindd/Kerberos)。掌握 smb.conf 結構化配置、smbpasswd/pdbedit/wbinfo 用戶管理、setfacl/getfacl 權限調試、semanage/restorecon SELinux 共存、mount.cifs 客戶端掛載參數,即可構建安全、高性能、易維護的企業級跨平台文件共享服務。

Copyright © Windows教程網 All Rights Reserved