RHCSA 系列:使用 ACL(访问控制列表)和挂载 Samba / NFS 共享 – 第 7 部分

在上一篇文章(RHCSA 系列第 6 部分)中,我們開始解釋如何使用 partedssm 設置和配置本地系統存儲。

RHCSA Series:: Configure ACL’s and Mounting NFS / Samba Shares – Part 7

我們還討論了如何在系統啟動時創建和掛載帶有密碼的加密卷。此外,我們警告您避免在已掛載的文件系統上執行關鍵存儲管理操作。考慮到這一點,我們現在將回顧在 Red Hat Enterprise Linux 7 中最常用的文件系統格式,然後繼續涵蓋手動和自動掛載、使用和 卸載 網絡文件系統(CIFSNFS)的主題,以及實施訪問控制列表到您的系統。

先決條件

在繼續之前,請確保您有一個 Samba 伺服器和一個 NFS 伺服器可用(請注意 NFSv2RHEL 7 中不再受支持)。

在本指南中,我們將使用一台機器,其 IP 為 192.168.0.10,並在其中運行兩個服務作為伺服器,以及一個 RHEL 7 機器作為客戶端,其 IP 地址為 192.168.0.18。文章後面我們將告訴您客戶端需要安裝哪些套件。

RHEL 7 中的文件系統格式

從RHEL 7開始,由於其高性能和可擴展性,XFS已被引入為所有架構的默認文件系統。根據Red Hat及其合作夥伴對主流硬件進行的最新測試,它目前支持最大文件系統大小為500 TB

此外,XFS啟用了user_xattr(擴展用戶屬性)和acl(POSIX訪問控制列表)作為默認掛載選項,不像ext3或ext4(從RHEL 7開始,ext2被視為已棄用),這意味著在掛載XFS文件系統時,您無需在命令行或/etc/fstab中明確指定這些選項(如果您想在最後一種情況下禁用這些選項,您必須明確使用no_aclno_user_xattr)。

請注意,擴展用戶屬性可以分配給文件和目錄,用於存儲任意額外信息,例如文件的MIME類型、字符集或編碼,而用戶屬性的訪問權限由常規文件權限位定義。

訪問控制列表

作為每個系統管理員,無論是新手還是專家,都對文件和目錄的通常存取權限非常熟悉,這些權限指定了某些权限(,和執行)給所有者,群組和「全世界」(其他所有人)。然而,如果您需要稍微回憶一下,請自由查阅RHCSA系列第3部分

然而,由於標準ugo/rwx設定不允許為不同用戶配置不同的權限,ACLs從而被引进,以為文件和目錄指定比通常權限位更詳細的存取權限。

實際上,由ACL定義的權限是 Specified by the file permission bits 的超集。讓我們看看這些应在现实世界中的应用。

1. 主要有兩種ACLs訪問ACLs(可以應用於特定的文件或目錄),和預設ACLs(只能應用於目錄)。如果該目錄中的文件沒有ACL設定,它們會繼承它們父目錄的預設ACL。

2. 首先,ACL可以按用戶、群組或文件所有組外的用戶進行配置。

3. ACLs 是使用 setfacl 命令设置(和移除)的,分别使用 -m-x 选项。

例如,让我们创建一个名为 tecmint 的组,并将用户 johndoedavenull 添加到该组中:

# groupadd tecmint
# useradd johndoe
# useradd davenull
# usermod -a -G tecmint johndoe
# usermod -a -G tecmint davenull

然后验证两个用户是否属于附属组 tecmint

# id johndoe
# id davenull
Verify Users

现在,在 /mnt 目录下创建一个名为 playground 的目录,并在其中创建一个名为 testfile.txt 的文件。我们将把该文件的组所有者设置为 tecmint,并将其默认的 ugo/rwx 权限更改为 770(文件的所有者和组所有者都具有读取、写入和执行权限):

# mkdir /mnt/playground
# touch /mnt/playground/testfile.txt
# chmod 770 /mnt/playground/testfile.txt

然后按顺序切换用户为 johndoedavenull,并向文件中写入内容:

echo "My name is John Doe" > /mnt/playground/testfile.txt
echo "My name is Dave Null" >> /mnt/playground/testfile.txt

到目前为止一切正常。现在让用户 gacanepa 写入该文件,写操作将会失败,这是可以预料到的。

但是,如果我们确实需要用户 gacanepa(不是 tecmint 组的成员)对 /mnt/playground/testfile.txt 具有写权限怎么办?你可能首先想到的是将该用户添加到 tecmint 组。但是这样将会使他对所有设置了组的写权限的文件都具有写权限,这不是我们想要的。我们只想让他能够写入 /mnt/playground/testfile.txt 文件。

# touch /mnt/playground/testfile.txt
# chown :tecmint /mnt/playground/testfile.txt
# chmod 777 /mnt/playground/testfile.txt
# su johndoe
$ echo "My name is John Doe" > /mnt/playground/testfile.txt
$ su davenull
$ echo "My name is Dave Null" >> /mnt/playground/testfile.txt
$ su gacanepa
$ echo "My name is Gabriel Canepa" >> /mnt/playground/testfile.txt
Manage User Permissions

讓我們給用戶 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
Check ACLs of Files

要為目錄設定 默認 ACL(其內容將繼承,除非明確覆寫),在規則前添加 d:,並指定目錄而非文件名:

# setfacl -m d:o:r /mnt/playground

上面的 ACL 將允許非所有者組用戶讀取 /mnt/playground 目錄未來的內容。注意 getfacl /mnt/playground 命令 output 改變前後的不同:

Set Default ACL in Linux

RHEL 7 官方存儲管理指南的第 20 章 提供了更多 ACL 示例,我強烈建議你查看並將其作為參考手冊备用。

Source:
https://www.tecmint.com/rhcsa-exam-configure-acls-and-mount-nfs-samba-shares/