天天看點

使用NFSv4 ACL控制Samba檔案系統的通路前提條件背景資訊操作步驟Samba + NAS NFSv4 ACL的特性

本文介紹如何通過Samba服務實作NFS檔案系統以SMB協定進行檔案共享,并通過NFSv4 ACL控制權限。

前提條件

使用NFSv4協定挂載檔案系統,詳情請參見

挂載NFS檔案系統

背景資訊

目前有客戶存在以下使用場景:在伺服器上挂載NFS檔案系統後,使用Samba服務将此檔案系統以SMB協定共享給其他Windows使用者使用。在Samba服務中,可以建立使用者并擁有Windows端的使用者名和密碼,也擁有Linux端的使用者名(與Windows端的使用者名相同)和密碼(可以與Windows端不同)。Samba端可以在檔案系統上設定valid users字段控制哪些使用者/群組可以通路或者讀寫該檔案系統;對于檔案級别的控制,Samba會将NFSv4 ACL轉化為SMB權限,來控制某個使用者/群組的通路權限。

說明 目前,ACL功能隻支援華北 3(張家口)、華北 5(呼和浩特)、亞太東南 2(悉尼)、亞太東南 3(吉隆坡)和美國西部 1(矽谷)地域,并且需要通過

工單

送出申請後才能使用。

操作步驟

本步驟以CentOS作業系統為例,介紹如何設定NFSv4 ACL,并以Samba進行輸出。其他的Linux作業系統的流程類似,指令稍有不同。

1. 安裝Samba服務。

chmod +x bootstrap.sh
sudo ./bootstrap.sh           
  • 解壓Samba 4.11.2壓縮包。

tar -zxvf ~/samba-4.11.2.tar.gz
cd ~/samba-4.11.2           
  • 編譯Samba服務。

sudo ./configure --sbindir=/sbin/ --sysconfdir=/etc/samba/ --mandir=/usr/share/man/ --with-static-modules=vfs_nfs4acl_xattr           

如果編譯成功,将提示如下類似資訊。如果報錯,請參見

Build Samba from Source
'configure' finished successfully (1m2.432s)           
  • 安裝Samba服務。

make
make test
sudo make install           

2. 建立Samba使用者。

本文假設建立普通使用者player,屬于普通使用者群組players;管理者admini,屬于管理者群組adminis;另外再建立一個使用者anonym,屬于群組anonym_group。

  • 建立使用者和使用者組。

sudo useradd player
sudo groupadd players
sudo usermod -g players player
sudo useradd admini
sudo groupadd adminis
sudo usermod -g adminis admini
sudo useradd anonym
sudo groupadd anonym_group
sudo usermod -g anonym_group anonym           
  • 給Samba使用者建立SMB挂載密碼。

sudo ~/samba-4.11.2/bin/smbpasswd -a player
sudo ~/samba-4.11.2/bin/smbpasswd -a admini
sudo ~/samba-4.11.2/bin/smbpasswd -a anonym           

說明 smbpasswd的位置在編譯的目錄中。執行編譯版本的smbpasswd時會有如下提示,非編譯版本smbpasswd是沒有的。

Registered MSG_REQ_POOL_USAGE
Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED           

3. 設定smb.conf配置檔案。

安裝Samba完成後,/etc/samba/smb.conf是預設的配置檔案。打開/etc/samba/smb.conf,進行如下配置,更多smb.conf配置選項請參見

The configuration file for the Samba suite
  • path = /mnt/nfs4:/mnt/nfs4為挂載的目标位址,請根據實際情況替換。
  • valid users:用于控制可以通路檔案系統的使用者或群組,請根據實際情況替換。
[global]   server
   string = Samba Alibaba NAS NFS
   Server   server role = standalone server
   min protocol = SMB2_10
   log file = /var/log/samba/%m
   log level = 2
   valid users = @players, @adminis, @anonym_group
   writable = yes
[nfs4]
   comment = Secure File Server Share
   path =  /mnt/nfs4
   vfs objects = nfs4acl_xattr
   nfs4:mode = simple
   nfs4acl_xattr:encoding = nfs
   nfs4acl_xattr:version = 40
   nfs4acl_xattr:xattr_name = system.nfs4_acl
   nfs4acl_xattr:nfs4_id_numeric = yes           

4. 啟動Samba服務端Smbd。

sudo smbd           

5. 将Smbd包裝成Systemd服務。

  • 建立/etc/systemd/system/smbd.service檔案。

  • 在/etc/systemd/system/smbd.service檔案中添加如下内容。

[Unit]
Description=Samba Smbd Service
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/sbin/smbd
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target           
  • 重新開機systemctl。

sudo systemctl daemon-reload           
  • 啟動smbd.service服務。

sudo systemctl enable smbd.service           
  • 您也可以執行以下指令啟動smbd.service服務。

sudo systemctl restart smbd.service           

6. 在Windows系統中驗證Samba服務。

使用net use指令挂載Samba nfsv4檔案系統。

net use * \\samba-IP\nfs4 <password> /user:<user>           

挂載完成後,player、admini、anonym三個使用者都可以通路該檔案檔案系統,也可以建立讀寫檔案和目錄。

7. 對NAS NFS檔案系統設定NFSv4 ACL權限。

  • 安裝NFSv4 ACL工具。

    如果已安裝NFSv4 ACL工具,請跳過此步驟。
sudo yum -y install nfs4-acl-tools           
  • 對目錄和檔案設定NFSv4 ACL。

    本文假設建立目錄dir0,針對目錄dir0中的所有檔案,授予players隻讀權限,授予admins讀、寫和執行權限,不授予其他使用者權限。
sudo umask 777
sudo mkdir dir0
sudo nfs4_setfacl -a A:fdg:`id -g players`:RX dir0
sudo nfs4_setfacl -a A:fdg:`id -g admins`:RWX dir0
sudo nfs4_setfacl -a A:fdg:OWNER@: dir0
sudo nfs4_setfacl -a A:fdg:GROUP@: dir0
sudo nfs4_setfacl -a A:fdg:EVERYONE@: dir0           

設定完成後,可執行sudo nfs4_getfacl dir0檢視設定結果。

8. 在Windows系統中驗證權限設定結果。

  • 使用admini身份挂載Samba nfsv4檔案系統,在目錄dir0下可以建立檔案和子目錄。
  • 使用player身份挂載Samba nfsv4檔案系統,在目錄dir0下無法建立檔案和子目錄,但可以打開及讀取檔案和子目錄。
  • 使用anonym身份挂載Samba nfsv4檔案系統,無法通路目錄dir0下的檔案和子目錄。

Samba + NAS NFSv4 ACL的特性

  • NFS檔案系統的NFSv4 ACL會被轉化為SMB ACL在Windows系統的安全标簽中顯示。雖然安全标簽中顯示的SMB ACL隻有Allow沒有Deny,但是Samba還是會依照NAS NFSv4 ACL的規則進行判斷。

  • 可以在SMB端設定SMB ACL并轉化為NFSv4 ACL存入NFS檔案系統。

  • 如果SMB ACL無法轉化為NFSv4 ACL,例如在NFSv4 ACL中沒有Deny,修改會失敗。

  • 建議隻在NFS端設定ACL,SMB端隻作為用戶端使用。

  • NAS NFSv4支援鎖,可以支援SMB端和NFS端同時有多個用戶端進行讀寫操作。

繼續閱讀