文件和目录权限管理:setfacl
Linux 系统中,包含一个叫做Access Control Lists(ACLs)的功能,这是一种更灵活的权限控制机制,它允许你详细地控制单个用户和用户组对文件和目录的访问。(Access Control List,简称 ACL)。
1. 修改权限
例如,如果我们需要修改某个用户对某个文件或目录的权限,我们可以使用 -m 选项来“修改权限”。
全程使用root权限操作。
我们可以先看看系统中有没有这个功能。
setfacl --version
假设我们有一个 /var/log 目录,我们需要修改 ec2-user 这个用户对其的访问权限,我们可以使用以下命令:
setfacl -m u:ec2-user:--- /var/log
在这里,-m 选项代表“修改权限”,u:ec2-user:— 表示我们将 ec2-user 用户对该文件或目录的权限设为了 — ,也就是无任何权限。
2. 删除 ACL
如果我们看到文件或目录的权限里有 "+" 符号,例如 drwxr-xr-x+ ,那代表这个文件或目录在其原本的权限之外,还拥有额外的 ACL。
我们可以使用 -b 选项来删除所有的 ACL。例如,对于上述的 /var/log 目录,我们可以使用下列命令来删除其所有的 ACL:
setfacl -b /var/log
这样一来,/var/log 目录的 ACL 就被全部删除,相应的 "+" 符号也不再出现。
请注意:因为删除 ACL 可能会影响到依赖特定 ACL 设置的用户或程序的正常运行,所以在使用 -b 选项前,请先确认该操作不会造成不良影响。
如果只是删除刚刚对于ec2-user的限制我们可以用下面的命令:
setfacl -x u:ec2-user /var/log
3. 查看 ACL
查看文件或目录当前 ACL 的命令是 getfacl。
例如,我们想要查看 /var/log 目录的 ACL,我们只需要执行以下命令:
getfacl /var/log
# file: var/log
# owner: root
# group: root
user::rw-
user:ubuntu:rwx #effective:rw-
group::r-- #effective:r--
mask::rw-
other::r--
从上述输出内容中,我们可以看出,root 用户拥有 rw- 的权限,ubuntu 用户拥有 rwx 的权限,但有效权限为 rw-,由于 mask 的存在。
4. 复制 ACL
如果我们需要将一个文件或目录的 ACL 复制到另一个文件或目录,我们可以结合使用 getfacl 和 setfacl 命令。
例如,我们想将 /var/log 目录的 ACL 复制给 /home/ubuntu 目录,我们可以使用以下命令:
getfacl /var/log | setfacl --set-file=- /home/ubuntu
在这里,getfacl 命令负责获取 /var/log 的 ACL,通过管道 | 将这个 ACL 传递给 setfacl 命令,setfacl 命令将这个 ACL 重新设置给 /home/ubuntu 目录。
以上就是关于 setfacl 命令的基本用法,希望对你有所帮助。