网站搜索

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


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

我们还讨论了如何在系统启动期间使用密码创建和安装加密卷。此外,我们警告您避免在已安装的文件系统上执行关键的存储管理操作。考虑到这一点,我们现在将回顾Red Hat Enterprise Linux 7中最常用的文件系统格式,然后继续讨论手动安装、使用和卸载的主题并自动连接网络文件系统(CIFSNFS),以及为您的系统实施访问控制列表。

先决条件

在继续操作之前,请确保您有可用的 Samba 服务器和 NFS 服务器(请注意,NFSv2 不再受支持) RHEL 7)。

在本指南中,我们将使用一台 IP 192.168.0.10 的计算机(其中运行两种服务)作为服务器,并使用 RHEL 7 机器作为 IP 地址 192.168 的客户端.0.18。在本文后面,我们将告诉您需要在客户端上安装哪些软件包。

RHEL 7 中的文件系统格式

RHEL 7开始,XFS因其高性能和可扩展性而被引入作为所有架构的默认文件系统。根据红帽及其合作伙伴针对主流硬件进行的最新测试,它目前支持的最大文件系统大小为500 TB

此外,XFS 启用 user_xattr(扩展用户属性)和 acl(POSIX 访问控制列表)作为默认安装选项,这与 ext3 或 ext4(ext2)不同。从 RHEL 7 开始已被弃用),这意味着在挂载 XFS 文件系统时,您不需要在命令行或 /etc/fstab 中显式指定这些选项(如果您想在最后一种情况下禁用此类选项,您必须显式使用 no_aclno_user_xattr)。

请记住,扩展用户属性可以分配给文件和目录,用于存储任意附加信息,例如文件的 mime 类型、字符集或编码,而用户属性的访问权限由常规文件权限位定义。

访问控制列表

每个系统管理员,无论是初学者还是专家,都非常熟悉文件和目录的常规访问权限,这些权限指定了某些权限(读取写入执行)对于所有者、团体和“世界”(所有其他)。不过,如果您需要稍微回顾一下,请随时参阅 RHCSA 系列的第 3 部分。

然而,由于标准的ugo/rwx集不允许为不同的用户配置不同的权限,因此引入了ACL,以便为文件和目录定义比那些由常规权限指定的。

事实上,ACL 定义的权限是文件权限位指定的权限的超集。让我们看看所有这些翻译如何应用于现实世界。

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

2. 首先,可以为每个用户、每个组或每个不属于文件所属组的用户配置 ACL。

3. ACL 使用 setfacl 设置(和删除),并使用 -m- x 选项。

例如,让我们创建一个名为 howtoing 的组,并向其中添加用户 johndoedavenull

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

让我们验证两个用户都属于补充组 howtoing

id johndoe
id davenull

现在让我们在 /mnt 中创建一个名为 Playground 的目录,并在其中创建一个名为 testfile.txt 的文件。我们将组所有者设置为 howtoing 并将其默认的 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(不是 howtoing 组的成员))对 /mnt/playground/testfile.txt 具有写入权限怎么办?< 您可能想到的第一件事就是将该用户帐户添加到 howtoing 组中。但是,如果为该组设置了写入位,这将赋予他对所有文件的写入权限,而我们不希望这样。我们只希望他能够写入 /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 示例,我强烈建议您看一下并作为参考。