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系列第三部分

然而,标准的ugo/rwx集不允许为不同用户配置不同的权限,因此引入了ACLs,以定义比常规权限指定的更详细的文件和目录访问权限。

实际上,由ACL定义的权限是文件权限位的超集。让我们看看这一切如何在现实世界中应用。

1. 主要有两种类型的ACLs访问ACLs(可以应用于特定文件或目录),和默认ACLs(只能应用于目录)。如果目录中的文件没有ACL设置,它们将继承其父目录的默认ACL。

2. 首先,ACLs可以按用户、按组或按文件所有组之外的用户进行配置。

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

您将成功添加一个允许ACLgacanepa写入测试文件的规则。然后切换到用户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输出的差异:

Set Default ACL in Linux

《官方RHEL 7存储管理指南》第20章提供了更多ACL示例,强烈建议您查看并将其作为参考手册。

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