2021-05-12 14:32:11
RHCSA 系列(七): 使用 ACL(存取控制列表) 和掛載 Samba/NFS 共用
在上一篇文章(RHCSA 系列(六))中,我們解釋了如何使用 parted 和 ssm 來設定和設定本地系統儲存。
RHCSA 系列: 設定 ACL 及掛載 NFS/Samba 共用 – Part 7
我們也討論了如何建立和在系統啟動時使用一個密碼來掛載加密的捲。另外,我們告誡過你要避免在掛載的檔案系統上執行危險的儲存管理操作。記住了這點後,現在,我們將回顧在 RHEL 7 中最常使用的檔案系統格式,然後將涵蓋有關手動或自動掛載、使用和解除安裝網路檔案系統(CIFS 和 NFS)的話題以及在你的作業系統上實現存取控制列表(Access Control List)的使用。
前提條件
在進一步深入之前,請確保你可使用 Samba 服務和 NFS 服務(注意在 RHEL 7 中 NFSv2 已不再被支援)。
在本次指導中,我們將使用一個IP 地址為 192.168.0.10 且同時執行著 Samba 服務和 NFS 服務的機器來作為伺服器,使用一個 IP 地址為 192.168.0.18 的 RHEL 7 機器來作為用戶端。在這篇文章的後面部分,我們將告訴你在用戶端上你需要安裝哪些軟體包。
RHEL 7 中的檔案系統格式
從 RHEL 7 開始,由於 XFS 的高效能和可延伸性,它已經被作為所有的架構中的預設檔案系統。根據 Red Hat 及其合作夥伴在主流硬體上執行的最新測試,當前 XFS 已支援最大為 500 TB 大小的檔案系統。
另外,XFS 啟用了 user_xattr
(擴充套件使用者屬性) 和 acl
(POSIX 存取控制列表)來作為預設的掛載選項,而不像 ext3 或 ext4(對於 RHEL 7 來說,ext2 已過時),這意味著當掛載一個 XFS 檔案系統時,你不必顯式地在命令列或 /etc/fstab 中指定這些選項(假如你想在後一種情況下禁用這些選項,你必須顯式地使用 no_acl
和 no_user_xattr
)。
請記住擴充套件使用者屬性可以給檔案和目錄指定,用來儲存任意的額外資訊如 mime 型別,字元集或檔案的編碼,而使用者屬性中的存取許可權由一般的檔案許可權位來定義。
存取控制列表
作為一名系統管理員,無論你是新手還是專家,你一定非常熟悉與檔案和目錄有關的常規存取許可權,這些許可權為所有者,所有組和“世界”(所有的其他人)指定了特定的許可權(可讀,可寫及可執行)。但如若你需要稍微更新下你的記憶,請參考 RHCSA 系列(三).
但是,由於標準的 ugo/rwx
集合並不允許為不同的使用者設定不同的許可權,所以 ACL 便被引入了進來,為的是為檔案和目錄定義更加詳細的存取許可權,而不僅僅是這些特別指定的特定許可權。
事實上, ACL 定義的許可權是由檔案許可權位所特別指定的許可權的一個超集。下面就讓我們看看這個轉換是如何在真實世界中被應用的吧。
-
存在兩種型別的 ACL:存取 ACL,可被應用到一個特定的檔案或目錄上;以及預設 ACL,只可被應用到一個目錄上。假如目錄中的檔案沒有 ACL,則它們將繼承它們的父目錄的預設 ACL 。
-
從一開始, ACL 就可以為每個使用者,每個組或不在檔案所屬組中的使用者設定相應的許可權。
-
ACL 可使用
setfacl
來設定(和移除),可相應地使用 -m 或 -x 選項。
例如,讓我們建立一個名為 tecmint 的組,並將使用者 johndoe 和 davenull 加入該組:
#groupadd tecmint
#useradd johndoe
#useradd davenull
#usermod-a -G tecmint johndoe
#usermod-a -G tecmint davenull
並且讓我們檢驗這兩個使用者都已屬於追加的組 tecmint:
#id johndoe
#id davenull
檢驗使用者
現在,我們在 /mnt 下建立一個名為 playground 的目錄,並在該目錄下建立一個名為 testfile.txt 的檔案。我們將設定該檔案的屬組為 tecmint,並更改它的預設 ugo/rwx
許可權為 770(即賦予該檔案的屬主和屬組可讀、可寫和可執行許可權):
#mkdir/mnt/playground
#touch/mnt/playground/testfile.txt
#chown:tecmint /mnt/playground/testfile.txt
#chmod770/mnt/playground/testfile.txt
接著,依次切換為 johndoe 和 davenull 使用者,並在檔案中寫入一些資訊:
#su johndoe
$ echo"My name is John Doe">/mnt/playground/testfile.txt
$ su davenull
$ echo"My name is Dave Null">>/mnt/playground/testfile.txt
到目前為止,一切正常。現在我們讓使用者 gacanepa 來向該檔案執行寫操作 – 則寫操作將會失敗,這是可以預料的。
$ su gacanepa
$ echo"My name is Gabriel Canepa">>/mnt/playground/testfile.txt
管理使用者的許可權
但實際上我們需要使用者 gacanepa(他不是組 tecmint 的成員)在檔案 /mnt/playground/testfile.txt 上有寫許可權,那又該怎麼辦呢?首先映入你腦海裡的可能是將該使用者新增到組 tecmint 中。但那將使得他在所有該組具有寫許可權位的檔案上均擁有寫許可權,但我們並不想這樣,我們只想他能夠在檔案 /mnt/playground/testfile.txt 上有寫許可權。
現在,讓我們給使用者 gacanepa 在 /mnt/playground/testfile.txt 檔案上有讀和寫許可權。
以 root 的身份執行如下命令:
#setfacl-R -m u:gacanepa:rwx /mnt/playground
則你將成功地新增一條 ACL,允許 gacanepa 對那個測試檔案可寫。然後切換為 gacanepa 使用者,並再次嘗試向該檔案寫入一些資訊:
$ echo"My name is Gabriel Canepa">>/mnt/playground/testfile.txt
要觀察一個特定的檔案或目錄的 ACL,可以使用 getfacl
命令:
# getfacl /mnt/playground/testfile.txt
檢查檔案的 ACL
要為目錄設定預設 ACL(它的內容將被該目錄下的檔案繼承,除非另外被覆寫),在規則前新增 d:
並特別指定一個目??名,而不是檔名:
#setfacl-m d:o:r /mnt/playground
上面的 ACL 將允許不在屬組中的使用者對目錄 /mnt/playground 中的內容有讀許可權。請注意觀察這次更改前後 getfacl /mnt/playground
的輸出結果的不同:
在 Linux 中設定預設 ACL
在官方的 RHEL 7 儲存管理指導手冊的第 20 章 中提供了更多有關 ACL 的例子,我極力推薦你看一看它並將它放在身邊作為參考。
掛載 NFS 網路共用
要顯示你伺服器上可用的 NFS 共用的列表,你可以使用帶有 -e 選項的 showmount
命令,再跟上機器的名稱或它的 IP 地址。這個工具包含在 nfs-utils
軟體包中:
#yum update &&yum install nfs-utils
接著執行:
# showmount -e 192.168.0.10
則你將得到一個在 192.168.0.10 上可用的 NFS 共用的列表:
檢查可用的 NFS 共用
要按照需求在本地用戶端上使用命令列來掛載 NFS 網路共用,可使用下面的語法:
#mount-t nfs -o [options] remote_host:/remote/directory /local/directory
其中,在我們的例子中,對應為:
#mount-t nfs 192.168.0.10:/NFS-SHARE /mnt/nfs
若你得到如下的錯誤資訊:Job for rpc-statd.service failed. See "systemctl status rpc-statd.service" and "journalctl -xn" for details.
,請確保 rpcbind
服務被啟用且已在你的系統中啟動了。
#systemctl enable rpcbind.socket
#systemctl restart rpcbind.service
接著重新啟動。這就應該達到了上面的目的,且你將能夠像先前解釋的那樣掛載你的 NFS 共用了。若你需要在系統啟動時自動掛載 NFS 共用,可以向 /etc/fstab 檔案新增一個有效的條目:
remote_host:/remote/directory /local/directory nfs options 00
上面的變數 remote_host, /remote/directory, /local/directory 和 options(可選) 和在命令列中手動掛載一個 NFS 共用時使用的一樣。按照我們前面的例子,對應為:
192.168.0.10:/NFS-SHARE /mnt/nfs nfs defaults 00
掛載 CIFS (Samba) 網路共用
Samba 代表一個特別的工具,使得在由 *nix 和 Windows 機器組成的網路中進行網路共用成為可能。要顯示可用的 Samba 共用,可使用帶有 -L 選項的 smbclient 命令,再跟上機器的名稱或它的 IP 地址。這個工具包含在 samba_client 軟體包中:
你將被提示在遠端主機上輸入 root 使用者的密碼:
# smbclient -L 192.168.0.10
檢查 Samba 共用
要在本地用戶端上掛載 Samba 網路共用,你需要已安裝好 cifs-utils 軟體包:
#yum update &&yum install cifs-utils
然後在命令列中使用下面的語法:
#mount-t cifs -o credentials=/path/to/credentials/file//remote_host/samba_share /local/directory
其中,在我們的例子中,對應為:
#mount-t cifs -o credentials=~/.smbcredentials //192.168.0.10/gacanepa /mnt/samba
其中 .smbcredentials
的內容是:
username=gacanepa
password=XXXXXX
它是一個位於 root 使用者的家目錄(/root/) 中的隱藏檔案,其許可權被設定為 600,所以除了該檔案的屬主外,其他人對該檔案既不可讀也不可寫。
請注意 samba_share 是 Samba 共用的名稱,由上面展示的 smbclient -L remote_host
所返回。
現在,若你需要在系統啟動時自動地使得 Samba 分享可用,可以向 /etc/fstab 檔案新增一個像下面這樣的有效條目:
//remote_host:/samba_share /local/directory cifs options 0 0
上面的變數 remote_host, /remote/directory, /local/directory 和 options(可選) 和在命令列中手動掛載一個 Samba 共用時使用的一樣。按照我們前面的例子中所給的定義,對應為:
//192.168.0.10/gacanepa /mnt/samba cifs credentials=/root/smbcredentials,defaults 0 0
結論
在這篇文章中,我們已經解釋了如何在 Linux 中設定 ACL,並討論了如何在一個 RHEL 7 用戶端上掛載 CIFS 和 NFS 網路共用。
我建議你去練習這些概念,甚至混合使用它們(試著在一個掛載的網路共用上設定 ACL),直至你感覺掌握了。假如你有問題或評論,請隨時隨意地使用下面的評論框來聯絡我們。另外,請隨意通過你的社群網路分享這篇文章。
------------------------------------分割線------------------------------------
如何在Ubuntu 14.04中使用Samba共用檔案 http://www.linuxidc.com/Linux/2014-07/104894.htm
VMWare 虛擬機器 Ubuntu 雙網絡卡 存取 samba 速度 翻倍 http://www.linuxidc.com/Linux/2013-06/85445.htm
Samba檔案共用伺服器加入Windows Server 2003域 http://www.linuxidc.com/Linux/2013-06/86391.htm
Samba安裝設定 http://www.linuxidc.com/Linux/2013-06/86101.htm
CentOS 6.2 下Samba 服務的設定 http://www.linuxidc.com/Linux/2013-01/78390.htm
Samba伺服器安裝和設定 http://www.linuxidc.com/Linux/2014-12/110459.htm
Win7+VMware+Fedora18 Samba伺服器的搭建圖解 http://www.linuxidc.com/Linux/2013-01/78234.htm
------------------------------------分割線------------------------------------
相關文章