本文介紹如何通過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服務。
-
下載下傳Samba 4.11.2代碼。
您可以在 Samba Github釋出頁面 或 Samba首頁 -
安裝Samba編譯所依賴的軟體包。
找到CentOS7 bootstrap.sh依賴包并下載下傳腳本 bootstrap/generated-dists/centos7/bootstrap.sh ,然後執行以下指令進行安裝。詳情請參見 Package Dependencies Required to Build 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端同時有多個用戶端進行讀寫操作。