补充 ACL 控制命令.

Signed-off-by: rick.chan <chenyang@autoai.com>
This commit is contained in:
rick.chan 2020-05-12 15:49:02 +08:00
parent 8812d597d7
commit 485bc2b9a5
1 changed files with 40 additions and 0 deletions

View File

@ -3,3 +3,43 @@
当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是 umask 干的事情。umask 设置了用户创建文件的默认权限,它与 chmod 的效果刚好相反umask 设置的是权限“补码”,而 chmod 设置的是文件权限码。一般在“/etc/profile”、$[HOME]/.bash_profile 或 $[HOME]/.profile 中设置 umask 值。
umask 值为 022则默认目录权限为 755默认文件权限为 644。
以上 umask 设置只会影响 bash若想修改 nautilus 等 Gnome 或 KDE 下的相关工具,则需要 system wide 的修改。由于 Gnome3 由 systemd 启动,所以建议增加 “session optional pam_umask.so umask=0022” 到 /etc/pam.d/login 或 /etc/pam.d/common-session。但是本人尝试了一下发现并没有对 nautilus 起作用,因此建议使用 default ACL 实现对应功能。
如果一个目录没有被设置 default ACL那么将由 umask 决定新文件的 ACL 权限。如果一个目录被设置了 default ACL那么将会由文件创建函数的 mode 参数和目录的 default ACL 共通决定新文件的 ACL 权限,此时 umask 被忽略。如果文件和文件夹设置了 default ACL 则在 ls -l 时将在权限末尾显示一个“+”。与 ACL 一样,在新建文件/文件夹时,会自动继承父目录的 default ACL 权限。
相关的命令主要有getfacl setfacl。
## getfacl
getfacl 命令用于获取文件/文件夹的权限。
```sh
getfacl <directory/file>
# file: <directory>
# owner: <user name>
# group: <group name>
user::rwx
group::rwx
other::rwx
default:user::rwx
default:group::rwx
default:other::---
```
以上分别列出了用户权限、组权限、其他用户权限以及默认用户权限、默认组权限、默认其他用户权限等信息。
## setfacl
setfacl 命令比较复杂,简单而言,为某个文件/文件夹设置默认权限命令如下:
```sh
setfacl -R -d -m [user|group|other]:rwx <directory/file>
```
其中 -R 表示递归。删除规则命令如下:
```sh
setfacl -x [default]:[user|group|other] <directory/file>
setfacl -k <directory/file>
```