RHCSA 系列:使用 ACL(访问控制列表)和挂载 Samba/NFS 共享 - 第 7 部分
在上一篇文章(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因其高性能和可扩展性而被引入作为所有架构的默认文件系统。根据红帽及其合作伙伴针对主流硬件进行的最新测试,它目前支持的最大文件系统大小为500 TB。
此外,XFS 启用 user_xattr(扩展用户属性)和 acl(POSIX 访问控制列表)作为默认安装选项,这与 ext3 或 ext4(ext2)不同。从 RHEL 7 开始已被弃用),这意味着在挂载 XFS 文件系统时,您不需要在命令行或 /etc/fstab 中显式指定这些选项(如果您想在最后一种情况下禁用此类选项,您必须显式使用 no_acl 和 no_user_xattr)。
请记住,扩展用户属性可以分配给文件和目录,用于存储任意附加信息,例如文件的 mime 类型、字符集或编码,而用户属性的访问权限由常规文件权限位定义。
访问控制列表
每个系统管理员,无论是初学者还是专家,都非常熟悉文件和目录的常规访问权限,这些权限指定了某些权限(读取、写入和执行)对于所有者、团体和“世界”(所有其他)。不过,如果您需要稍微回顾一下,请随时参阅 RHCSA 系列的第 3 部分。
然而,由于标准的ugo/rwx集不允许为不同的用户配置不同的权限,因此引入了ACL,以便为文件和目录定义比那些由常规权限指定的。
事实上,ACL 定义的权限是文件权限位指定的权限的超集。让我们看看所有这些翻译如何应用于现实世界。
1.ACL有两种类型:访问 ACL(可应用于特定文件或目录)和 >默认ACL,只能应用于目录。如果其中包含的文件没有设置 ACL,它们将继承其父目录的默认 ACL。
2. 首先,可以为每个用户、每个组或每个不属于文件所属组的用户配置 ACL。
3. ACL 使用 setfacl 设置(和删除),并使用 -m 或 - x 选项。
例如,让我们创建一个名为 howtoing 的组,并向其中添加用户 johndoe 和 davenull:
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
然后按顺序将用户切换为 johndoe 和 davenull,并写入文件:
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 示例,我强烈建议您看一下并作为参考。