RHCSA 系列:使用 ACL(访问控制列表)和挂载 Samba / NFS 共享 - 第 7 部分
在上一篇文章(RHCSA 系列第 6 部分)中,我们开始解释如何使用parted和ssm设置和配置本地系统存储。
我们还讨论了如何在系统启动期间使用密码创建和挂载加密卷。此外,我们警告您避免在已挂载的文件系统上执行关键的存储管理操作。考虑到这一点,我们现在将回顾Red Hat Enterprise Linux 7中最常用的文件系统格式,然后继续讨论手动和自动挂载、使用和卸载网络文件系统(CIFS和NFS )的主题,以及为您的系统实施访问控制列表。
先决条件
在继续操作之前,请确保您有一个可用的Samba服务器和一个NFS服务器(请注意,RHEL 7不再支持NFSv2)。
在本指南中,我们将使用IP 为 192.168.0.10的机器作为服务器,并在其中运行两个服务,并使用 IP 地址为192.168.0.18的 RHEL 7盒作为客户端。在本文后面,我们将告诉您需要在客户端上安装哪些软件包。
RHEL 7 中的文件系统格式
从RHEL 7开始,XFS因其高性能和可扩展性而被引入为所有架构的默认文件系统。根据 Red Hat 及其合作伙伴针对主流硬件进行的最新测试,它目前支持的最大文件系统大小为500 TB 。
此外,与 ext3 或 ext4(从 RHEL 7 开始 ext2 被视为已弃用)不同,XFS启用user_xattr(扩展用户属性)和acl (POSIX 访问控制列表)作为默认挂载选项,这意味着您不需要在挂载 XFS 文件系统时在命令行或/etc/fstab中明确指定这些选项(如果您想在最后一种情况下禁用这些选项,则必须明确使用no_acl和no_user_xattr)。
请记住,扩展用户属性可以分配给文件和目录,以存储任意附加信息,例如文件的 mime 类型、字符集或编码,而用户属性的访问权限由常规文件权限位定义。
访问控制列表
每位系统管理员(无论是初学者还是专家)都熟悉文件和目录的常规访问权限,这些权限为所有者、组和“所有人”(所有其他人)指定某些权限(读取、写入和执行)。但是,如果您需要稍微复习一下,请随时参考RHCSA 系列的第 3 部分。
但是,由于标准ugo/rwx集不允许为不同的用户配置不同的权限,因此引入了ACL,以便为文件和目录定义比常规权限指定的更详细的访问权限。
事实上,ACL 定义的权限是文件权限位指定的权限的超集。让我们看看这一切在现实世界中是如何转化和应用的。
1. ACL有两种类型:访问 ACL(可应用于特定文件或目录)和默认 ACL(只能应用于目录)。如果目录中包含的文件未设置 ACL,则它们将继承其父目录的默认 ACL。
2.首先,可以按用户、按组或不属于文件所属组的用户配置 ACL。
3.使用 setfacl设置(和删除)ACL,分别带有-m或-x选项。
例如,让我们创建一个名为example的组并向其中添加用户johndoe和davenull :
# groupadd example # useradd johndoe # useradd davenull # usermod -a -G example johndoe # usermod -a -G example davenull
让我们验证两个用户是否属于补充组示例:
# id johndoe # id davenull
现在让我们在/mnt中创建一个名为 playing 的目录,并在其中创建一个名为testfile.txt的文件。我们将组所有者设置为example,并将其默认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(他不是组example的成员)对/mnt/playground/testfile.txt具有写权限怎么办?您可能首先想到的是将该用户帐户添加到组example。但这将使他拥有对该组设置了写入位的所有文件的写权限,而我们不希望这样。我们只希望他能够写入/mnt/playground/testfile.txt。
# touch /mnt/playground/testfile.txt # chown :example /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
这样你就成功添加了允许gacanepa写入测试文件的ACL 。然后切换到用户gacanepa并尝试再次写入文件:
$ echo "My name is Gabriel Canepa" >> /mnt/playground/testfile.txt
要查看特定文件或目录的ACL ,请使用getfacl:
# getfacl /mnt/playground/testfile.txt
要为目录设置默认 ACL (除非被覆盖,否则其内容将继承该 ACL),请在规则前添加d:,并指定目录而不是文件名:
# setfacl -m d:o:r /mnt/playground
上述 ACL 将允许不属于所有者组的用户对/mnt/playground目录的未来内容具有读取权限。请注意更改前后getfacl /mnt/playground输出的差异:
官方 RHEL 7 存储管理指南中的第 20 章提供了更多 ACL 示例,我强烈建议您查看一下并将其作为参考。