RH134(8.0)-使用ACL控制对文件的访问(第四章)

11 篇文章 0 订阅

本章目标:

  • 描述ACL的用例,识别设置了ACL的文件,并解释这些ACL的影响
  • 设置和和删除文件上的ACL,定义新创建文件上由目录自动设置的默认ACL

一、解释文件ACL

1. 访问控制列表概念

  当文件仅由单个所有者和指定的一组人使用时,标准Linux文件权限即可满足要求。但是,有些用例要求多个指定的用户和组以不同的文件权限集来访问文件。访问控制列表(ACL)便提供了这一功能。
  借助ACL,您可以使用与常规文件权限相同的权限标志(读取、写入和执行)向由用户名、组名、UID或GID标识的多个用户和组授予权限。除了文件所有者和文件的组从属关系之外,这些额外的用户和组分别被称为指定用户和指定组,因为它们不是在长列表中指定的,而是在ACL中指定的。
  用户可以对属于自己的文件和目录设置ACL。被分配了CAP_FOWNER Linux功能的特权用户可以对任何文件或目录设置ACL。新文件和子目录会自动从父目录的默认ACL(若已设置)中继承ACL设置。与常规文件的访问规则相似,父目录层次结构至少需要其他搜索(执行)权限集,以便启用指定用户和指定组的访问权限。

1.1. 文件系统ACL支持

  文件系统需要挂载已启用的ACL支持。XFS文件系统内置有ACL支持。其他文件系统(例如在RHEL 8上创建的ext3或ext4)默认情况下会启用acl选项,但在早期版本中,应确认是否启用了ACL支持。要启用文件系统ACL支持,需要对mount命令在 /etc/fstab 配置文件的文件系统条目中使用ACL选项。

2. 查看和解释ACL权限

ls -l 命令仅输出最少的ACL设置详细信息:

[user@host ~]$ ls -l reports.txt
-rwxrw----+ 1 user operators 130 Mar 19 23:56 reports.txt

10字符权限字符串末尾的加号(+)表示该文件存在带有若干条目的扩展ACL结构。
用户
 显示用户ACL设置,其与标准的用户文件设置相同;rwx

 显示当前的ACL掩码设置,而不是组所有者设置;rw
其他
 显示其他ACL设置,其与标准的其他文件设置相同:无访问权限

2.1. 查看文件ACL

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

[user@host ~]$ getfacl reports.txt
# file: reports.txt
# owner: user
# group: operators
user::rwx
user:consultant3:---
user:1005:rwx       #effective:rw-
group::rwx          #effective:rw-
group:consultant1:r--
group:2210:rwx      #effective:rw-
mask::rw-
other::---

查看上面示例中的每个部分
 注释条目:
在这里插入图片描述
前三行是注释,识别文件名、所有者(user)和组所有者(operators)。如果存在任何其他文件标志(如setuidsetgid),则会出现第四行注释来显示所设置的标志。

 用户条目:
在这里插入图片描述
① 文件所有者权限。user的权限为rwx
② 指定用户权限。与此文件相关联的每位指定用户均有一个条目。consultant3没有任何权限
③ 指定用户权限。UID 1005具有rwx,但是掩码将有效权限仅限制为rw

 组条目:
在这里插入图片描述
① 组所有者权限。operators具有rwx,但是掩码将有效权限仅限制为rw
② 指定组权限。与此文件相关联的每个指定组均有一个条目。consultant1仅有r权限
③ 指定组权限。GID 2210具有rwx,但是掩码将有效权限仅限制为rw

 掩码条目:
在这里插入图片描述
掩码设置显示可能为所有指定用户、组所有者和指定组提供的最大权限。UID 1005、operators和GID 2210无法执行此文件,即便每个条目均已设置执行权限。

 其他条目:
在这里插入图片描述
其他或“全局”权限。所有其他的UID和GID均无任何权限。

2.2. 查看目录ACL

要显示目录上的ACL设置,使用getfacl directory命令:

[user@host ~]$ getfacl .
# file: .
# owner: user
# group: operators
# flags: -S-
user::rwx
user:consultant3:---
user:1005:rwx
group::rwx
group:consultant1:r-x
group:2210:rwx
mask::rwx
other::---
default:user::rwx
default:user:consultant3:---
default:group::rwx
default:group:consultant1:r-x
default:mask::rwx
default:other::---

查看上面示例中的每个部分
 打开注释条目:
在这里插入图片描述
前三行是注释,用于识别目录名、所有者(user)和组所有者(operators)。如果存在任何其他目录标志(如setuidsetgidsticky),则会出现第四行注释来显示所设置的标志;本例为setgid

 标准ACL条目:
在这里插入图片描述
上目录上的ACL权限与前述文件示例中的相同,但适用于目录。其关键区别在于,这些条目包含了执行权限(适用时),以允许目录搜索权限。

 默认用户条目:
在这里插入图片描述
① 默认文件所有者ACL权限。文件所有者将获得rwx,即可以读取/写入新文件,并在新子目录上执行操作
② 默认指定用户ACL权限。每位指定用户均有一个条目,他们将自动获得应用到新文件或子目录的默认ACL。consultant3始终默认设置为没有任何权限

 默认组条目:
在这里插入图片描述
① 默认组所有者ACL权限。文件组所有者将获得rwx,即可以读取/写入新文件,并在新子目录上执行操作
② 默认指定组ACL权限。每个指定组均有一个条目,他们将自动获得默认ACL。consultant1将获得rw,即只能够读取新文件,并在新子目录上执行操作

 默认ACL掩码条目:
在这里插入图片描述
默认掩码设置显示可能为所有新建文件或目录(其具有指定用户ACL、组所有者ACL或指定组ACL)提供的初始最大权限:读取和写入新文件,对新子目录的执行权限。新文件永远不可获得执行权限。

 默认其他条目:
在这里插入图片描述
默认其他或“全局”权限。所有其他UID和GID对新文件或新子目录均没有任何权限。
  上述示例中的default条目不包括指定用户(UID 1005)和指定组(GID 2210);因此,它们不会自动获得添加至任何新文件或新子目录中的初始ACL条目。这会有效地将它们限制在其已具有ACL的文件和子目录中,或者限制在相关文件所有者后来使用setfacl添加了ACL的文件和子目录中。这些条目仍可创建自己的文件和子目录。

2.3. ACL掩码

  ACL掩码定义可授予指定用户、组所有者和指定组的最大权限。它不限制文件所有者或其他用户的权限。所有实施ACL的文件和目录都将具有ACL掩码。
  可使用getfacl查看掩码,并通过setfacl显示设置掩码。如果未显示设置,系统会自动计算并添加掩码;但也可从父目录默认掩码设置中继承掩码。默认情况下,每当添加、修改或删除任何受影响的ACL时,均会重新计算掩码。

2.4. ACL权限优先级

 在决定一个进程(正在运行的程序)能否访问文件时,将按如下所示应用文件权限和ACL:

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

3. 操作系统使用ACL的示例

RHEL上有展示ACL用于扩展权限需求的典型示例。

3.1. Systemd日志文件上的ACL

  systemd-journald使用ACL条目向adm和wheel组授予对 /run/log/journal/cb44…8ae2/system.journal 文件的读取访问权限。此ACL允许adm和wheel组的成员读取由journalctl管理的日志,而无需赋予对 /var/log 中享有特权的内容(如messages、secure或audit)的特殊权限。
  由于systemd-journald配置的缘故,system.journal文件的父文件夹可以改变,但systemd-journald会自动将ACL应用于新文件夹和文件:

[user@host ~]$ getfacl /run/log/journal/cb44...8ae2/system.journal
getfacl: Removing leading '/' from absolute path names
# file: run/log/journal/cb44...8ae2/system.journal
# owner: root
# group: systemd-journal
user::rw-
group::r--
group:adm:r--
group:wheel:r--
mask::r--
other::---

3.2. 受systemd管理的设备上的ACL

  systemd-udev使用一组udev规则,它们将启用某些设备的uaccess标记,如CD/DVD播放器或刻录机、USB存储设备、声卡等等。上述udev规则可在这些设备上设置ACL,从而允许登录到图形用户界面(例如gdm)的用户完全控制这些设备。
  在用户从GUI注销之前,ACL将保持活动状态。下一个登录GUI的用户会为所需的设备应用新ACL。
  在下例中,我们可以看到user有一个ACL条目,它将rw权限应用于 /dev/sr0 设备(一个CD/DVD驱动器)。

[user@host ~]$ getfacl /dev/sr0
getfacl: Removing leading '/' from absolute path names
# file: dev/sr0
# owner: root
# group: cdrom
user::rw-
user:group:rw-
group::rw-
mask::rw-
other::---

二、使用ACL保护文件安全

1. 更改ACL文件权限

  使用setfacl添加、修改或删除文件和目录的标准ACL。
  ACL采用普通的权限文件表示法:“r” 表示读取权限,“w” 表示写入,“x” 表示执行权限。“-” (短划线)表示缺少相关权限。在(以递归方式)设置ACL时,大写字母 “X” 可用于表示:如果文件还没有相关的执行权限,则只应设置目录(而非常规文件)的执行权限。这一行为与chmod相同。

1.1. 添加或修改ACL

  可以使用 -m 选项通过命令行设置ACL,或使用 -M 选项(使用“-”(短划线),而不使用stdin的文件名)通过文件传递ACL。这两个选项是“修改”选项;它们会为文件或目录添加新的ACL条目,或替换特定的现有ACL条目。文件或目录的任何其他现有ACL条目均保持不变。
  首次定义文件的ACL时,如果添加操作不包含文件所有者、组所有者或其他权限的设置,则系统会基于当前标准文件权限来设置以上权限(这些设置也称为基础ACL条目,且无法删除),系统也会计算并添加新掩码值。
 要添加或修改用户ACL或指定用户ACL,则执行以下操作:

[user@host ~]$ setfacl -m u:name:rX file

  如果name留空,则它适用于文件所有者,否则,name可以是用户名或UID值。在本例中,授予的权限为只读和执行(如果已设置)(除非file为目录,此时目录会设置执行权限,以允许进行目录搜索)。
  ACL文件所有者和标准文件所有者权限同等;因此,使用文件所有者权限中的chmod等同于使用文件所有者权限中的setfacl。chmod对指定用户没有影响。
 要添加或修改组ACL或指定组ACL,则执行以下操作:

[user@host ~]$ setfacl -m g:name:rw file

  这与添加或修改用户ACL条目的模式相同。如果name留空,则它适用于组所有者。否则,需要指定指定组的组名或GID值。本例中的权限为读取和写入权限。
  chmod对于具有ACL设置的文件,对任何组权限都没有影响,但会更新ACL掩码。
 要添加或修改其他ACL,则执行以下操作:

[user@host ~]$ setfacl -m o::- file

  其他ACL仅接受权限设置。其他ACL的典型权限设置为:不具有任何权限,使用短划线(-)进行设置;只读权限,像往常一样使用r进行设置。当然,我们可以设置任何标准权限。
  ACL其他权限及标准其他权限同等,因此使用其他权限中的chmod等同于使用其他权限中的setfacl
 我们可以使用同一命令添加多个条目,则使用以逗号分隔的条目列表:

[user@host ~]$ setfacl -m u:rwx,g:consultants:rX,o::- file

  该操作会将文件所有者设置为拥有读取、写入和执行权限,将指定组consultants设置为拥有只读和条件执行权限,并将所有其他用户限制为无权限。组所有者将维持其现有文件或ACL权限,并且其他“指定”条目保持不变。

1.2. 使用getfacl作为输入

我们可以将getfacl的输出用作setfacl的输入:

[user@host ~]$ getfacl file-A | setfacl --set-file=- file-B

–set-file选项可接受来自文件或stdin的输入。短划线字符(-)指定使用stdin。在此例中,file-B与file-A的ACL设置相同。

1.3. 设置明确的ACL掩码

我们可以明确设置文件或目录的ACL掩码,以限制指定用户、组所有者和指定组的最大有效权限。这限制了任何超出掩码的现有权限,但不会影响比掩码的许可更少的权限。

[user@host ~]$ setfacl -m m::r file

 该操作会添加掩码值,该掩码值会将任何指定用户、组所有者及任何指定组限制为拥有只读权限,而不考虑它们的现有设置。文件所有者和其他用户不受掩码设置的影响。
getfacl会在受掩码设置限制的条目旁边显示有效注释。

1.4. 递归ACL修改

在目录上设置ACL时,使用 -R 选项以递归方式应用ACL。记住,我们可能以递归方式使用“X”权限,这样,设置了执行权限的文件会保留该设置,而目录会设置执行权限,以允许进行目录搜索。以非递归方式设置ACL时,最好也使用大写“x”,因为这可防止管理员意外地向普通文件添加执行权限。

[user@host ~]$ setfacl -R -m u:name:rX directory

该操作会将用户name添加到directory目录及所有现有文件和子目录中,从而设置只读和条件执行权限。

1.5. 删除ACL

除了不指定“:perms”外,删除特定ACL条目与修改操作的基本形式相同。

[user@host ~]$ setfacl -x u:name,g:name file

该操作只会从文件或目录ACL中删除指定用户和指定组。任何其他现有ACL条目均保持活动。
可以在同一setfacl操作中包含删除(-x)和修改(-m)操作。
掩码只能在未设置其他ACL(无法删除的基础ACL除外)的情况下删除,因此必须最后删除。文件不再有任何ACL,并且ls -l不会在权限字符串旁边显示加号(+)。或者,要删除文件或目录的所有ACL条目(包括目录的默认ACL),则使用以下命令:

[user@host ~]$ setfacl -b file

2. 控制默认ACL文件权限

  为了确保在目录中创建的文件和目录继承特定的ACL,需要在目录上使用默认ACL。我们可以设置默认ACL并进行任何标准ACL设置,包括默认掩码。
  目录本身仍然需要具备标准ACL才能进行访问权限控制,因为默认ACL不会对目录实施访问权限控制;它们仅提供ACL权限继承支持。例如:

[user@host ~]$ setfacl -m d:u:name:rw directory

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

2.1. 删除默认ACL条目

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

[user@host ~]$ setfacl -x d:u:name directory

 该命令会删除上一个示例中的默认ACL条目。
要删除目录的所有默认ACL条目,则使用setfacl -k directory

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值