理论教育 Linux系统管理:基于Debian的ACL访问控制列表

Linux系统管理:基于Debian的ACL访问控制列表

时间:2023-11-08 理论教育 版权反馈
【摘要】:ACL的使用需要文件系统的支持,目前绝大部分的Linux文件系统支持ACL的功能。在Linux中,ACL是默认启动的。·如果是以列于用户ACL条目中的用户运行该进程,那么就应用用户ACL。其中,mask称作具有ACL的文件的掩码,用于限制组成员和ACL补充用户和组成员的最大权限。设置ACL权限,如果同时设置多个权限,权限之间使用“,”分隔。但是tar等常见的备份工具是不会保留目录和文件的ACL信息的。

Linux系统管理:基于Debian的ACL访问控制列表

Linux系统通常的权限管理只是针对文件或目录的拥有者、所属组、其他人进行读、写、执行的权限的划分。如果要对某个文件或目录进行除了上述三类用户的单一特定用户或组进行更细致的权限划分,比如,针对某个文件,除了拥有者和组之外,其他人都没有读取的权限,而唯独用户zhangsan需要读取的权限(zhangsan属于其他人的范围),这就需要借助ACL(Access Control List)进行。

ACL的使用需要文件系统的支持,目前绝大部分的Linux文件系统(如EXT2/3/4、JFS、XFS)支持ACL的功能。在Linux中,ACL是默认启动的。如果系统默认没有启动ACL的功能,则需要添加ACL属性并重新挂载文件系统,以获取ACL的支持(后面的章节介绍文件系统挂载的操作)。

在确定某个进程是否能够访问某一文件时,权限的优先级如下:

·如果是以文件的拥有者身份运行该进程,那么就应用该文件的拥有者权限。

·如果是以列于用户ACL条目中的用户运行该进程,那么就应用用户ACL(只要mask允许)。

·如果是以文件的所属组身份或具有明确ACL条目的组身份运行该进程,如果权限是由任意匹配组授予的,则应用组的权限(只要mask许可)。

·否则,应用文件的其他权限。

其中,mask称作具有ACL的文件的掩码,用于限制组成员和ACL补充用户和组成员的最大权限。

(1)ACL的命令

·getfacl命令

描述:查看文件或目录的ACL权限。

用法:getfacl[options]file…

示例:查看文件的ACL。

文件testfile的用户和组都是root,它的权限是644,只有root用户的权限是读写,其他人的权限都是只读。而设置了ACL,ACL用户zhangsan则对该文件拥有读、写、执行的权限。

对于添加了ACL的文件,使用ls-l命令列出时,权限位的最后带有“+”号。如下:

·setfacl命令

描述:设置某个文件或目录的ACL权限。

用法:setfacl[-bkndRLP]{-m|-M|-x|-X…}file…

常用选项:

-m:设置或修改文件的ACL权限。

-x:取消文件的一个ACL权限。

-b:删除文件所有的ACL权限。

-k:删除所有的默认的ACL权限。

--set:设置文件的ACL,替代当前的ACL。

--mask:重新计算有效的mask值。

-R:递归子目录。

-d:设置默认的ACL权限,仅能针对目录使用。

--restore:从文件恢复备份的ACL。

(2)查看和设置ACL

示例:使用setfacl命令设置文件的ACL。(www.daowen.com)

针对用户zhangsan来设置权限为rwx:

针对组sales来设置权限为rw:

设置限制的权限为r:

查看文件当前的ACL:

最终的权限:文件的拥有者root为rw-;ACL用户zhangsan的权限为rwx,但因为设置了限制权限mask为r--,两个权限相与后,最终zhangsan对该文件的权限为r--。同理,文件所属组的权限为r--;ACL组zhangsan的权限受mask的影响,也为r--;其他人的权限为r--。

设置ACL权限,如果同时设置多个权限,权限之间使用“,”分隔。

示例:同时设置多个ACL用户和组的权限。

(3)删除文件的ACL权限

示例:删除ACL权限。

使用setfacl命令删除组(zhangsan)的ACL权限。删除后,可执行getfacl命令查看结果。

示例:一次性删除所有的ACL权限。

(4)设置目录默认的ACL

如果希望在一个目录中新建的文件和子目录都使用同一个预定的ACL,那么可以使用默认(Default)ACL。在对一个目录设置了默认的ACL以后,每个在目录中创建的文件都会自动继承目录的默认ACL作为自己的ACL。

示例:设置目录默认的ACL。

设置目录testdir的ACL指定组sales的权限为rwx:

查看目录testdir当前的ACL权限:

在目录testdir中创建一个文件file.txt:

查看该文件的权限,自动继承了上级目录的ACL(受文件默认的mask影响):

(5)备份和恢复ACL

主要的文件操作命令cp和mv都支持备份时保留文件的ACL,cp命令需要加上-p参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息的。这种情况下,如果备份和恢复带有ACL的文件和目录,那么可以先把文件的ACL权限信息备份到一个文件里,以后用--restore选项来恢复这个文件中保存的ACL信息。

示例:文件的ACL信息备份和恢复。

查看目录及其所有子目录和文件当前的ACL信息:

备份目录及其子目录中文件的ACL:

为测试效果,删除原文件所有的ACL:

查看删除后的权限:

从testdir.acl文件中恢复被删除的ACL信息:

查看恢复后的效果:

Linux系统的基本权限设置了用户、组、其他三种所有者类型,以及读、写、执行三种文件权限。Linux系统具有简单明了的文件权限管理模式,所以Linux文件权限管理是比较简洁而容易配置的。实际应用中,对文件权限的理解非常重要,它是Linux系统中系统资源和进程之间关系的基础。在后续对系统应用、服务的配置过程中,程序无法启动,服务无法正常提供资源,很多情况下可能是由文件的权限配置不正确引起的,甚至需要优先排查,并且粗放的文件权限管理也会给系统的安全埋下隐患。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈