在上一篇文章(RHCSA 系列第 6 部分)中,我们开始解释如何使用 parted 和 ssm 设置和配置本地系统存储。

我们还讨论了如何在系统启动时创建和挂载带密码的加密卷。此外,我们警告您避免在已挂载的文件系统上执行关键存储管理操作。考虑到这一点,我们将回顾在 Red Hat Enterprise Linux 7 中最常用的文件系统格式,然后继续涵盖手动和自动挂载、使用和 卸载 网络文件系统(CIFS 和 NFS),以及为您的系统实施访问控制列表的主题。
先决条件
在继续之前,请确保您有一个 Samba 服务器和一个 NFS 服务器可用(请注意,NFSv2 在 RHEL 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_acl 和 no_user_xattr)。
请注意,扩展用户属性可分配给文件和目录,用于存储诸如文件的 MIME 类型、字符集或编码等任意附加信息,而用户属性的访问权限由常规文件权限位定义。
访问控制列表
每个系统管理员,无论新手还是专家,都熟悉文件和目录的常规访问权限,这些权限指定了所有者、组和“世界”(其他所有人)的某些特权(读、写和执行)。然而,如果你需要稍微回顾一下,可以参考RHCSA系列第三部分。
然而,标准的ugo/rwx集不允许为不同用户配置不同的权限,因此引入了ACLs,以定义比常规权限指定的更详细的文件和目录访问权限。
实际上,由ACL定义的权限是文件权限位的超集。让我们看看这一切如何在现实世界中应用。
1. 主要有两种类型的ACLs:访问ACLs(可以应用于特定文件或目录),和默认ACLs(只能应用于目录)。如果目录中的文件没有ACL设置,它们将继承其父目录的默认ACL。
2. 首先,ACLs可以按用户、按组或按文件所有组之外的用户进行配置。
3. ACLs 可以通过使用 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 # chmod 770 /mnt/playground/testfile.txt
然后切换到 johndoe 和 davenull 用户,依次进行,并尝试向文件写入内容:
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

让用户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(其内容将继承,除非另有规定),在规则前添加d:,并指定目录而不是文件名:
# setfacl -m d:o:r /mnt/playground
以上ACL将允许不属于所有者组的用户读取/mnt/playground目录的未来内容。请注意更改前后getfacl /mnt/playground输出的差异:

《官方RHEL 7存储管理指南》第20章提供了更多ACL示例,强烈建议您查看并将其作为参考手册。
Source:
https://www.tecmint.com/rhcsa-exam-configure-acls-and-mount-nfs-samba-shares/