📜  Linux中的访问控制列表(ACL)

📅  最后修改于: 2021-05-20 07:32:25             🧑  作者: Mango

什么是ACL?
访问控制列表(ACL)为文件系统提供了另一种更灵活的权限机制。它旨在帮助UNIX文件权限。 ACL允许您将任何用户或组的权限授予任何磁盘资源。

使用ACL:
考虑一个特定的用户不是您创建的组成员,但您仍要授予某些读或写访问权限的情况,如何在不使用户成为组成员的情况下进行操作,请参见图片访问控制列表,ACL可以帮助我们做到这一点。

基本上,ACL用于在Linux中建立灵活的权限机制。

在Linux手册页中,ACL用于为文件和目录定义更细粒度的自由访问权限。

setfaclgetfacl用于分别设置ACL和显示ACL。

例如 :

getfacl test/declarations.h

输出:

# file: test/declarations.h
# owner: mandeep
# group: mandeep
user::rw-
group::rw-
other::r--

设置ACL的命令列表:

1) To add permission for user
setfacl -m "u:user:permissions" /path/to/file

2) To add permissions for a group
setfacl -m "g:group:permissions" /path/to/file 

3) To allow all files or directories to inherit ACL entries from the directory it is within
setfacl -dm "entry" /path/to/dir

4) To remove a specific entry
setfacl -x "entry" /path/to/file

5) To remove all entries
setfacl -b path/to/file

例如 :

setfacl -m u:mandeep:rwx test/declarations.h

使用setfacl修改ACL:
要为用户添加权限(用户可以是用户名或ID):

# setfacl -m "u:user:permissions" 

要为组添加权限(组是组名或ID):

# setfacl -m "g:group:permissions" 

要允许所有文件或目录从该目录中的目录中继承ACL条目,请执行以下操作:

# setfacl -dm "entry" 

例子 :

setfacl -m u:mandeep:r-x test/declarations.h

见下图输出:

setfacl和getfacl

查看ACL:
显示权限:

# getfacl filename

在使用setfacl命令设置ACL权限之前和之后,请观察getfacl命令的输出之间的差异。
为用户mandeep添加了一条额外的行,该行在上图中突出显示。

输出:

变更权限

上面的命令将权限从rwx更改为rx

删除ACL:
如果要删除设置的ACL权限,请使用带有-b选项的setfacl命令。
例如 :

删除设置的权限

如果在使用带有-b选项的setfacl命令之前和之后比较getfacl命令的输出,则可以观察到在以后的输出中没有供用户mandeep使用的特定条目。

您还可以使用ls命令检查是否通过ACL设置了任何其他权限。

用ls检查设置acl

观察图像中的第一个命令输出,在-rw-rwxr– +之类的权限之后,还有额外的“ +”号,这表示您可以通过getfacl命令检查到额外的ACL权限集。

使用默认ACL:
默认ACL是分配给目录的特定权限类型,它不会更改目录本身的权限,但是会进行设置,以便默认在其中创建的所有文件上设置指定的ACL。让我们演示一下:首先,我们将创建一个目录,并使用-d选项为其分配默认ACL:

$ mkdir test && setfacl -d -m u:dummy:rw test