RHCSA 系列(七): 使用 ACL(訪問控制列表) 和掛載 Samba/NFS 共享
RHCSA 系列: 配置 ACL 及掛載 NFS/Samba 共享 – Part 7
我們也討論了如何創建和在系統啟動時使用一個密碼來掛載加密的卷。另外,我們告誡過你要避免在掛載的文件系統上執行危險的存儲管理操作。記住了這點後,現在,我們將回顧在 RHEL 7 中最常使用的文件系統格式,然後將涵蓋有關手動或自動掛載、使用和卸載網路文件系統(CIFS 和 NFS)的話題以及在你的操作系統上實現 訪問控制列表 的使用。
前提條件
在進一步深入之前,請確保你可使用 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
# chmod 770 /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 0 0
上面的變數 remote_host, /remote/directory, /local/directory 和 options(可選) 和在命令行中手動掛載一個 NFS 共享時使用的一樣。按照我們前面的例子,對應為:
192.168.0.10:/NFS-SHARE /mnt/nfs nfs defaults 0 0
掛載 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),直至你感覺掌握了。假如你有問題或評論,請隨時隨意地使用下面的評論框來聯繫我們。另外,請隨意通過你的社交網路分享這篇文章。
via: http://www.tecmint.com/rhcsa-exam-configure-acls-and-mount-nfs-samba-shares/
作者:Gabriel Cánepa 譯者:FSSlc 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive