📅  最后修改于: 2023-12-03 14:43:59.931000             🧑  作者: Mango
在Linux中,访问控制列表(ACL)是一种更细粒度的权限控制方式,可以用来在文件或目录上设置细粒度的访问控制。ACL可以让你对特定的用户或组设置不同于所属用户组或其他用户的权限。
Linux中的文件和目录访问权限只有三种:文件所有者、文件所有组、其他用户。这样的权限控制方式无法满足一些复杂的应用场景。例如,在一个团队开发的项目中,某个目录下的文件需要不同的开发者拥有不同的权限,这时就需要ACL。
setacl
命令用于设置ACL,但这个命令在一些Linux系统上默认没有安装。可以通过以下命令安装:
sudo apt-get install acl #Ubuntu/Debian系统
sudo yum install acl #CentOS/RHEL系统
可以使用 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
命令可以将权限列表输出为类似于注释的形式。
使用 setfacl
命令中 -x
选项来删除文件或目录的ACL权限。
例如:删除 /data
目录下 test.txt
文件对用户 user1
拥有的 读写
权限。
sudo setfacl -x u:user1 /data/test.txt
假设要为 /data
目录下的文件和子目录递归的设置ACL权限,可以使用 -R
选项。
例如:为 /data
目录下的文件和子目录递归的设置 user1
用户对于 读写
权限。
sudo setfacl -R -m u:user1:rw /data
假设有一个目录 /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
选项。