Linux进阶教程丨第13章:使用ACL控制对文件的访问

本文是 i 春秋作家「xiehudie」表哥分享的技术文章,旨在为大家提供更多的学习方法与技能技巧,文章仅供学习参考。本套Linux进阶教程共分为14章,欢迎大家前来系统学习。

前期回顾>>

第1章:访问命令行

第2章:从命令行管理文件

第3章:编辑、查看和编辑文本文件

第4章:管理用户和组

第5章:控制对文件的访问

第6章:监控与管理Linux进程

第7章:控制服务和守护进程

第8章:配置和保护SSH

第9章:分析和储存日志

第10章:管理网络

第11章:归档和传输文件

第12章:安装与更新软件包

Linux进阶教程丨第2章:从命令行管理文件
 

第13章:使用ACL控制对文件的访问

一、文件ACL:访问控制列表概念

当文件仅由单个所有者和指定的一组人使用时,标准Linux文件权限即可满足要求。权限集来访问文件。访问控制列表(ACL)提供了这一功能。

借助ACL,我们可以使用与常规文件权限相同的权限标志(读取、写入和执行)向由用户名、组名、UID或GID标识的多个用户和组授予权限。除了文件所有者和文件的组从属关系之外,这些额外的用户和组分别被称为指定用户和指定组,因为它们不是在长列表中指定的,而是在ACL中指定的。

用户可以对属于自己的文件和目录设置ACL。被分配了CAP_FOWNER Linux功能的特权户可以对任何文件或目录设置ACLO新文件和子录会自动从父录的默认ACL(若已设置)中继承ACL设置。与常规文件的访问规则相似,父目录层次结构至少需要其他搜索(执行)权限集,以便启指定用户和指定组的访问权限。

文件系统需挂载已启用的ACL支持。XFS文件系统内置有ACL支持。其他文件系统默认情况下会启用acl选项,但在早期版本中,应确认是否启用了ACL支持。要启用文件系统ACL支持,请对mount命令或在/etc/fstab配置文件的文件系统条中使用ACL选项。
ls命令仅输出最少的ACL信息:

Linux进阶教程丨第13章:使用ACL控制对文件的访问

 

用户:显示用户ACL设置,其与标准的用户文件设置相同;rwx

组:显示当前的ACL掩码设置,而不是组所有者设置;rwx

其他:显示其他ACL设置,其与标准的其他文件设置相同;无访问权限。

要显示文件上的ACL设置,使用getfacl file命令:

Linux进阶教程丨第13章:使用ACL控制对文件的访问

 

ACL掩码定义可授予指定用户、组所有者和指定组的最大权限。它不限制文件所有者或其他用户的权限。所有实施ACL的文件和录都将具有ACL掩码。

可使用getfacl查看掩码,并通过setfacl显式设置掩码。如果未显式设置,系统会自动计并添加掩码;但也可从父目录默认掩码设置中继承掩码。默认情况下,每当添加、修改和删除任何受影响的ACL时,均会重新计算掩码。

在决定一个进程(正在运行的程序)能否访问文件时,将按如下所示应用文件权限和ACL:
如果正在以文件所有者身份运行进程,则应用文件的用户ACL权限。

如果正在以指定用户ACL条目中列出的用户身份运行进程,则应用指定用户ACL*R限(只要掩码允许)。

如果正在以与文件的组所有者相匹配的组身份运行进程,或者以具有显式指定组ACL条目的组身份运行进程,则应用相匹配的ACL权限(只要掩码允许)否则,将应用文件的其他ACL权限。

Systemd-udev使用一组udev规则,它们将启用某些设置的uaccess标记,如CD/DVD播放器或刻录机、USB设置、声卡等等。上诉udev规则可在这些设备上设置ACL,从而允许登录到图形用户界面的用户控制这些设备。

二、使用ACL保护文件安全

使用setfacl添加、修改或删除文件和录的标准ACL。

ACL采用普通的权限文件系统表示法:“r ”表示读取权限,“w”表示写入权限,“ x ”表示执行权限。(短划线)表示缺少相关权限。在(以递归方式)设首ACL时,大写字母“x“可于表示:如果文件还没有相关的执行权限,则只应设置目录(而非常规文件)的执行权限。这一行为与 chmod相同。

可以使用-m选项通过命令行设置ACL,或使用-M选项而不是使用stdin通过文件传递ACL。这两个选项是“修改”选项;它们会为文件或目录添加新的ACL条目,或替换特定的现有ACL条目。文件或目录的任何其他现有ACL条目均保持不变。

首次定义文件的ACL时,如果添加操作不包含文件所有者、组所有者或其他权限的设置,则系统会基于当前标准文件权限来设置以上权限(这些设首也称为基础ACL条目,且无法删除),系统也会计算并添加新掩码值。

添加或修改用户ACL或指定用户ACL:

Linux进阶教程丨第13章:使用ACL控制对文件的访问

 

如果name留空,则它适用于文件所有者,否则,能name可以是户名或UID值。

ACL文件所有者和标准文件所有者权限同等;因此,使文件所有者权限中的chmod等同于使用文件所有者权限中的setfaclo chmod对指定用户没有影响。

添加或修改组ACL或指定组ACL:

Linux进阶教程丨第13章:使用ACL控制对文件的访问

 

这与添加或修改用户ACL条的模式相同。如果name 留空,则它适用于组所有者。否则,请指定指定组的组名或GID值。

chmod对于具有ACL设置的文件,对任何组权限都没有影响,但会更新ACL掩码。
要添加或修改其他ACL:

Linux进阶教程丨第13章:使用ACL控制对文件的访问

 

其他ACL仅接受权限设。其他ACL的典型权限设置为:不具有任何权限,使用短划线(-)进行设置;只读权限,像往常一样使用r进行设兰。当然,我们也可以设置任何标准权限。

ACL其他权限及标准其他权限同等,因此使用其他权限中的chmod等同于使用其他权限中的 setfacl

如下所示:

Linux进阶教程丨第13章:使用ACL控制对文件的访问

 

该操作会将文件所有者设置为拥有读取、写入和执行权限,将指定组consultants设置为拥有只读和条件“执行权限,并将所有其他用户限制为无权限。

为了确保在目录中创建的文件和录继承特定的ACL,我们需要在目录上使用默认ACL。我们可以设置默认 ACL并进行任何标准ACL设置,包括默认掩码。

目录本身仍然需要具备标准ACL才能进行访问权限控制,因为默认ACL不会对目录实施访问权限控制;它们仅提供ACL权限继承支持。

如下所示:

Linux进阶教程丨第13章:使用ACL控制对文件的访问

 

该命令会添加一个默认的指定用户(d:u:name),该用户拥有对子录的只读权限和执行权限。
用于为各个ACL类型添加默认ACL的setfacl命令与用于标准ACL的命令完全相同,但是以d:开头。或者,在命令行使用-d选项。

删除默认ACL的方式与删除标准ACL一样,也是以d:开头,或使用-d选项。
如下所示:

Linux进阶教程丨第13章:使用ACL控制对文件的访问

 

posted @ 2021-12-23 16:37  i春秋  阅读(214)  评论(0编辑  收藏  举报