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

📅  最后修改于: 2023-12-03 14:43:59.931000             🧑  作者: Mango

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

在Linux中,访问控制列表(ACL)是一种更细粒度的权限控制方式,可以用来在文件或目录上设置细粒度的访问控制。ACL可以让你对特定的用户或组设置不同于所属用户组或其他用户的权限。

为什么需要ACL?

Linux中的文件和目录访问权限只有三种:文件所有者、文件所有组、其他用户。这样的权限控制方式无法满足一些复杂的应用场景。例如,在一个团队开发的项目中,某个目录下的文件需要不同的开发者拥有不同的权限,这时就需要ACL。

如何使用ACL?
安装ACL

setacl 命令用于设置ACL,但这个命令在一些Linux系统上默认没有安装。可以通过以下命令安装:

sudo apt-get install acl  #Ubuntu/Debian系统
sudo yum install acl  #CentOS/RHEL系统
查看/设置ACL权限

可以使用 getfacl 命令来查看一个文件或目录的ACL权限,使用 setfacl 命令来设置ACL权限。

例如:设置 /data 目录下 test.txt 文件对用户 user1 拥有 读写 权限。

setfacl -m u:user1:rw /data/test.txt
user1@ubuntu:~$ getfacl /data/test.txt
# file: /data/test.txt
# owner: root
# group: root
user::rw-
user:user1:rw-
group::r--
mask::rw-
other::r--

如上所示,getfacl 命令可以将权限列表输出为类似于注释的形式。

删除ACL权限

使用 setfacl 命令中 -x 选项来删除文件或目录的ACL权限。

例如:删除 /data 目录下 test.txt 文件对用户 user1 拥有的 读写 权限。

sudo setfacl -x u:user1 /data/test.txt
将ACL权限递归的应用到子目录和文件

假设要为 /data 目录下的文件和子目录递归的设置ACL权限,可以使用 -R 选项。

例如:为 /data 目录下的文件和子目录递归的设置 user1 用户对于 读写 权限。

sudo setfacl -R -m u:user1:rw /data
取消继承ACL权限

假设有一个目录 /data_files ,其中有一个子目录 project1,需要对 project1 目录设置特殊的ACL权限。

首先先将 /data_files 目录的ACL权限继承到 project1

sudo setfacl -R -m d:u:user1:rw /data_files
sudo setfacl -R -m d:u:user2:r /data_files
sudo setfacl -R -m d:u:user3:r /data_files
sudo setfacl -R -m d:g:developers:rw /data_files
sudo setfacl -R -m d:g:readers:r /data_files

接下来,将 project1 目录的ACL权限从 /data_files 目录的ACL权限继承中取消:

sudo setfacl -R -x d:u:user1 /data_files/project1
sudo setfacl -R -x d:u:user2 /data_files/project1
sudo setfacl -R -x d:u:user3 /data_files/project1
sudo setfacl -R -x d:g:developers /data_files/project1
sudo setfacl -R -x d:g:readers /data_files/project1
小结

ACL是Linux中一种更细粒度的权限控制方式,在一些应用场景下非常有用。可以使用 getfacl 命令查看ACL权限,使用 setfacl 命令设置或删除ACL权限。若要将ACL权限递归应用到子目录和文件,可以使用 -R 选项。