访问控制列表(也称为ACL)是Linux内核的一个功能,允许为文件和目录定义比常规ugo/rwx权限更精细的访问权限。
例如,标准的ugo/rwx权限不允许为不同的个别用户或组设置不同的权限。通过ACL,这在本文中将会看到,相对容易实现。
使用ACL检查文件系统兼容性
为确保您的文件系统当前支持ACL,您应检查它们是否已使用acl选项挂载。为此,我们将使用tune2fs来处理ext2/3/4文件系统,如下所示。将/dev/sda1替换为您要检查的设备或文件系统:
# tune2fs -l /dev/sda1 | grep "Default mount options:"
注意:对于XFS,访问控制列表是开箱即用的。
在以下ext4文件系统中,我们可以看到ACL已启用于/dev/xvda2:
# tune2fs -l /dev/xvda2 | grep "Default mount options:"

如果上述命令未指示文件系统已挂载以支持ACL,很可能是由于noacl选项存在于/etc/fstab中。
在这种情况下,删除它,卸载文件系统,然后重新挂载,或者在保存更改到/etc/fstab后简单地重新启动系统。
在Linux中引入ACL
为了说明ACL是如何工作的,我们将使用一个名为developers的组,并将用户walterwhite和saulgoodman(是的,我是《绝命毒师》的粉丝!)加入其中。
# groupadd developers # useradd walterwhite # useradd saulgoodman # usermod -a -G developers walterwhite # usermod -a -G developers saulgoodman
在我们继续之前,让我们验证这两个用户是否已经被添加到developers组中:
# id walterwhite # id saulgoodman

现在让我们在
然后我们将设置组所有者为developers,并递归地将其默认ugo/rwx权限更改为770(因此赋予文件的所有者和组所有者读取、写入和执行权限):
# mkdir /mnt/test # touch /mnt/test/acl.txt # chgrp -R developers /mnt/test # chmod -R 770 /mnt/test
正如预期的那样,您可以以walterwhite或saulgoodman的身份写入
# su - walterwhite # echo "My name is Walter White" > /mnt/test/acl.txt # exit # su - saulgoodman # echo "My name is Saul Goodman" >> /mnt/test/acl.txt # exit

到目前为止一切顺利。然而,当我们需要为不在developers组中的另一个用户授予对
标准的ugo/rwx权限要求新用户被添加到developers组,但这将使他/她对由该组拥有的所有对象具有相同的权限。这正是ACL派上用场的地方。
在Linux中设置ACL:
有两种类型的ACL: 访问ACL(应用于文件或目录),以及默认(可选)ACL,它只能应用于目录。
如果目录中设置了默认ACL,而目录中的文件没有自己的ACL,则它们会继承其父目录的默认ACL。
让我们给用户gacanepa在/mnt/test/acl.txt上赋予读写权限。在这样做之前,让我们通过以下命令查看该目录中的当前ACL设置:
# getfacl /mnt/test/acl.txt
然后更改文件的ACL,使用u:
后跟用户名和:rw
表示读/写权限:
# setfacl -m u:gacanepa:rw /mnt/test/acl.txt
然后再次对文件运行getfacl以进行比较。以下图片显示了“之前”和“之后”的情况:
# getfacl /mnt/test/acl.txt

接下来,我们需要赋予其他用户对/mnt/test目录的执行权限:
# chmod +x /mnt/test
请记住,为了访问目录的内容,普通用户需要对该目录具有执行权限。
现在用户gacanepa应该能够向文件中写入了。切换到该用户帐户并执行以下命令以确认:
# echo "My name is Gabriel Cánepa" >> /mnt/test/acl.txt
要将默认ACL设置为目录(其内容将继承,除非另行覆盖),请在规则之前添加d:
并指定目录而不是文件名:
# setfacl -m d:o:r /mnt/test # getfacl /mnt/test/
上述ACL将允许不属于所有者组的用户对/mnt/test目录的未来内容进行读取。请注意更改之前和之后getfacl /mnt/test输出的差异:

要删除特定的ACL,请将上述命令中的-m
替换为-x
。例如,
# setfacl -x d:o /mnt/test
或者,您也可以使用-b
选项一次性删除所有ACL:
# setfacl -b /mnt/test
有关ACL的更多信息和示例,请参考第10章,第2节,openSUSE安全指南(也可免费下载PDF格式)。
在用户和文件系统上设置Linux磁盘配额
存储空间是另一个必须谨慎使用和监控的资源。为此,可以根据文件系统设置配额,无论是针对个人用户还是群组。
因此,对于给定用户或特定群组允许的磁盘使用量设置了限制,您可以放心,您的磁盘不会被一个粗心(或恶意)的用户填满。
要在文件系统上启用配额的第一件事是在/etc/fstab中使用usrquota或grpquota(分别用于用户和群组配额)选项挂载它。
例如,让我们在/dev/vg00/vol_backups上启用基于用户的配额,并在/dev/vg00/vol_projects上启用基于群组的配额。
请注意,UUID用于标识每个文件系统。
UUID=f6d1eba2-9aed-40ea-99ac-75f4be05c05a /home/projects ext4 defaults,grpquota 0 0 UUID=e1929239-5087-44b1-9396-53e09db6eb9e /home/backups ext4 defaults,usrquota 0 0
卸载并重新挂载这两个文件系统:
# umount /home/projects # umount /home/backups # mount -o remount /home/projects # mount -o remount /home/backups
然后检查输出中是否存在usrquota和grpquota选项(请参见下面的突出显示):
# mount | grep vg00

最后,运行以下命令初始化和启用配额:
# quotacheck -avugc # quotaon -vu /home/backups # quotaon -vg /home/projects
那么,现在让我们为之前提到的用户名和组分配配额。您可以稍后使用quotaoff来禁用配额。
设置Linux磁盘配额
让我们从为用户gacanepa在/home/backups上设置ACL开始,这将为他提供该目录的读取、写入和执行权限:
# setfacl -m u:gacanepa:rwx /home/backups/
然后使用
# edquota -u gacanepa
我们将设置软限制=900和硬限制=1000块(每块1024字节*1000块=1024000字节=1 MB)的磁盘空间使用。
我们还可以将这个用户可以创建的文件数量的软限制=20和硬限制=25设置为20和25。
上述命令将启动文本编辑器($EDITOR),在那里我们可以设置先前提到的限制:

这些设置将在用户gacanepa达到900块或20 inode限制时显示警告,为默认的7天宽限期。
如果在那时超配额的情况没有被消除(例如,通过删除文件),软限制将变为硬限制,这个用户将被阻止使用更多的存储空间或创建更多文件。
为了测试,让我们让用户gacanepa尝试在/home/backups内创建一个名为test1的空2 MB文件:
# dd if=/dev/zero of=/home/backups/test1 bs=2M count=1 # ls -lh /home/backups/test1

如您所见,由于磁盘配额已超出限制,写操作文件失败。由于只有前1000 KB被写入磁盘,因此在这种情况下,最有可能会导致文件损坏。
类似地,您可以为开发人员组创建 ACL,以便该组成员对/home/projects具有 rwx 访问权限:
# setfacl -m g:developers:rwx /home/projects/
并使用以下命令设置配额限制:
# edquota -g developers
就像我们之前对用户gacanepa所做的那样。
优雅期限可以通过执行
# edquota -t
并更新块优雅期和 Inode 优雅期下的值来指定任意秒、分钟、小时、天、周或月的时长。
与基于用户或组的块或 Inode 使用情况不同,优雅期是系统范围内设置的。
要报告配额情况,您可以使用quota -u [user]
或quota -g [group]
进行快速列表,或者使用repquota -v [/path/to/filesystem]
以获取更详细(冗长)和格式良好的报告。
当然,您需要将[user]
、[group]
和[/path/to/filesystem]
替换为要检查的特定用户/组名称和文件系统。
总结
在本文中,我们已经解释了如何为用户和组设置访问控制列表和磁盘配额。使用这两者,您将能够更有效地管理权限和磁盘使用情况。
《配额简明指南》。
毋庸置疑,您也可以依靠我们来解答问题。只需使用下面的评论表单提交问题,我们将非常乐意帮助您。
Source:
https://www.tecmint.com/set-access-control-lists-acls-and-disk-quotas-for-users-groups/