如何为用户和组设置访问控制列表(ACL)和磁盘配额

在本文中,我们将解释如何为用户和组设置访问控制列表和磁盘配额,以便更有效地管理权限和磁盘使用

访问控制列表 (也称为访问控制列表)是Linux内核,允许定义文件和目录比定期乌戈/ RWX权限指定的更细粒度的访问权限的功能。

例如,标准的乌戈/ 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:"
检查Linux文件系统上启用的ACL

检查在Linux文件系统上启用ACL

如果上述命令并不表示该文件系统已经安装有用于ACL的支持,这是最有可能是由于noacl选项存在于/ etc / fstab中

在这种情况下,删除,卸载文件系统,然后重新安装它,或保存修改/ etc / fstab文件后,只需重新启动系统。

在Linux中引入ACL

为了说明的ACL是如何工作的,我们将使用一个命名组开发人员和用户添加沃特,老白saulgoodman(是的,我是一个绝命毒球迷!)把它:

# groupadd developers
# useradd walterwhite
# useradd saulgoodman
# usermod -a -G developers walterwhite
# usermod -a -G developers saulgoodman

在我们继续之前,让我们验证这两个用户都已添加到开发人员组:

# id walterwhite
# id saulgoodman
在Linux中查找用户ID

在Linux中查找用户ID

现在,让我们创建一个名为test的在/ mnt目录,和一个叫acl.txt(/mnt/test/acl.txt)文件。

然后,我们将组所有者设置为开发商和递归更改其默认乌戈/ RWX权限770(因此授予读,写和执行授予所有者和文件的组所有者的权限都):

# mkdir /mnt/test
# touch /mnt/test/acl.txt
# chgrp -R developers /mnt/test
# chmod -R 770 /mnt/test

正如预期的那样,你可以写信给/mnt/test/acl.txt作为沃特,老白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
验证用户的ACL规则

验证用户的ACL规则

到现在为止还挺好。 但是,我们很快就会看到一个问题的时候,我们需要授予写访问/mnt/test/acl.txt因为这是不是开发商组中的其他用户。

标准乌戈/ RWX权限将需要新的用户加入到开发组,但会为他/她在该集团所拥有的所有对象相同的权限。 这正是ACLs派上用场。

在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
在Linux用户上设置ACL

在Linux用户上设置ACL

接下来,我们需要给别人上的/ 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 /测试前和变化后输出的区别:

将默认ACL设置为Linux目录

将默认ACL设置为Linux目录

要删除特定ACL,更换-m在上面的命令-x 例如,

# setfacl -x d:o /mnt/test

另外,您还可以使用-b选项删除一步到位所有的ACL:

# setfacl -b /mnt/test

有关使用访问控制列表的详细信息和示例,请参见第10章第2节openSUSE的安全指南 (也可以下载PDF格式的任何费用)。

在用户和文件系统上设置Linux磁盘配额

存储空间是另一种必须仔细使用和监控的资源。 为此,可以基于文件系统为单个用户或组设置配额。

因此,对给定用户或特定组允许的磁盘使用量施加了限制,并且您可以放心,不小心(或未经注意的)用户不会填充磁盘容量。

你必须为了使文件系统上的配额做的第一件事是(分别用户和组配额,)与usrquota已经或grpquota安装在/ etc / fstab中的选项。

例如,让我们能在/ 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 

然后检查mount的输出中是否存在usrquota和grpquota选项(见下面的突出显示):

# mount | grep vg00
检查Linux用户配额和组配额

检查Linux用户配额和组配额

最后,运行以下命令来初始化和启用配额:

# quotacheck -avugc
# quotaon -vu /home/backups
# quotaon -vg /home/projects

也就是说,现在让我们给前面提到的用户名和组分配配额。 您可以在以后使用quotaoff禁用配额。

设置Linux磁盘配额

首先,让我们对用户gacanepa /家庭/备份 ,这将给他的读,写,并在该目录执行权限设置的ACL:

# setfacl -m u:gacanepa:rwx /home/backups/

然后,

# edquota -u gacanepa

我们将软限位= 900和硬限制=磁盘空间使用情况的1000(1024字节/块* 1000块= 1024000字节= 1 MB)。

我们还可以将2025,为软或硬limites限制该用户可以创建文件的数量。

上述命令将启动文本编辑器($ EDITOR)使用临时文件,我们可以设置前面提到的限制:

用户的Linux磁盘配额

用户的Linux磁盘配额

这些设置将导致显示给用户gacanepa警告时,他已任达到7天的默认宽限期900块 或20的inode限制。

如果超过配额的情况并没有被淘汰,届时(例如,通过删除文件),软限制将成为硬限制和此用户将使用更多的存储空间或创建多个文件被阻止。

要进行测试,让我们的用户gacanepa尝试创建名为test1里面的/ home /备份2 MB的文件:

# dd if=/dev/zero of=/home/backups/test1 bs=2M count=1
# ls -lh /home/backups/test1
验证磁盘上的Linux用户配额

验证磁盘上的Linux用户配额

如您所见,由于超过了磁盘配额,写入操作文件失败。 由于只有前1000 KB写入磁盘,结果在这种情况下,最有可能是一个损坏的文件。

同样,您可以为了给该组的rwx访问到/ home /项目成员创建为开发商群体的ACL:

# setfacl -m g:developers:rwx /home/projects/

并通过以下方式设置配额限制:

# edquota -g developers

就像我们做了与用户gacanepa早。

宽限期可以通过执行指定任意数量的秒,分钟,小时,天,周或月。

# edquota -t

和更新根据集体的宽限期和inode宽限期的值。

与block或inode使用(以用户或组为基础设置)相反,宽限期在系统范围内设置。

要报告配额,您可以使用配额-u [user]quota -g [group]一个快速列表或repquota -v [/path/to/filesystem]获得更详细的(详细),并很好地格式化的报告。

当然,你会想取代[user][group][/path/to/filesystem]与您要检查特定的用户/组名和文件系统。

概要

在本文中,我们阐述了如何设置访问控制列表和磁盘配额为用户和组。 使用这两者,您将能够更有效地管理权限和磁盘使用。

如果您想了解更多有关配额,您可以参照配额的mini HOWTO的Linux文档项目。

不用说,你也可以指望我们回答问题。 只要提交他们使用下面的评论表,我们将更高兴地看看。