本文是 i 春秋作家「xiehudie」表哥分享的技术文章,旨在为大家提供更多的学习方法与技能技巧,文章仅供学习参考。本套Linux进阶教程共分为14章,欢迎大家前来系统学习。
前期回顾>>
第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信息:
用户:显示用户ACL设置,其与标准的用户文件设置相同;rwx
组:显示当前的ACL掩码设置,而不是组所有者设置;rwx
其他:显示其他ACL设置,其与标准的其他文件设置相同;无访问权限。
要显示文件上的ACL设置,使用getfacl file命令:
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:
如果name留空,则它适用于文件所有者,否则,能name可以是户名或UID值。
ACL文件所有者和标准文件所有者权限同等;因此,使文件所有者权限中的chmod等同于使用文件所有者权限中的setfaclo chmod对指定用户没有影响。
添加或修改组ACL或指定组ACL:
这与添加或修改用户ACL条的模式相同。如果name 留空,则它适用于组所有者。否则,请指定指定组的组名或GID值。
chmod对于具有ACL设置的文件,对任何组权限都没有影响,但会更新ACL掩码。
要添加或修改其他ACL:
其他ACL仅接受权限设。其他ACL的典型权限设置为:不具有任何权限,使用短划线(-)进行设置;只读权限,像往常一样使用r进行设兰。当然,我们也可以设置任何标准权限。
ACL其他权限及标准其他权限同等,因此使用其他权限中的chmod等同于使用其他权限中的 setfacl
如下所示:
该操作会将文件所有者设置为拥有读取、写入和执行权限,将指定组consultants设置为拥有只读和条件“执行权限,并将所有其他用户限制为无权限。
为了确保在目录中创建的文件和录继承特定的ACL,我们需要在目录上使用默认ACL。我们可以设置默认 ACL并进行任何标准ACL设置,包括默认掩码。
目录本身仍然需要具备标准ACL才能进行访问权限控制,因为默认ACL不会对目录实施访问权限控制;它们仅提供ACL权限继承支持。
如下所示:
该命令会添加一个默认的指定用户(d:u:name),该用户拥有对子录的只读权限和执行权限。
用于为各个ACL类型添加默认ACL的setfacl命令与用于标准ACL的命令完全相同,但是以d:开头。或者,在命令行使用-d选项。
删除默认ACL的方式与删除标准ACL一样,也是以d:开头,或使用-d选项。
如下所示: