2020-05-12 11:01:20 +08:00
|
|
|
|
# Linux 新建文件和目录的默认权限
|
|
|
|
|
|
|
|
|
|
当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是 umask 干的事情。umask 设置了用户创建文件的默认权限,它与 chmod 的效果刚好相反,umask 设置的是权限“补码”,而 chmod 设置的是文件权限码。一般在“/etc/profile”、$[HOME]/.bash_profile 或 $[HOME]/.profile 中设置 umask 值。
|
|
|
|
|
|
|
|
|
|
如:umask 值为 022,则默认目录权限为 755,默认文件权限为 644。
|
2020-05-12 15:49:02 +08:00
|
|
|
|
|
|
|
|
|
以上 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 命令用于获取文件/文件夹的权限。
|
|
|
|
|
|
2020-05-20 16:18:39 +08:00
|
|
|
|
```bash
|
|
|
|
|
$ getfacl <directory/file>
|
2020-05-12 15:49:02 +08:00
|
|
|
|
# file: <directory>
|
|
|
|
|
# owner: <user name>
|
|
|
|
|
# group: <group name>
|
|
|
|
|
user::rwx
|
|
|
|
|
group::rwx
|
|
|
|
|
other::rwx
|
|
|
|
|
default:user::rwx
|
|
|
|
|
default:group::rwx
|
|
|
|
|
default:other::---
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
以上分别列出了用户权限、组权限、其他用户权限以及默认用户权限、默认组权限、默认其他用户权限等信息。
|
|
|
|
|
|
|
|
|
|
## setfacl
|
|
|
|
|
|
|
|
|
|
setfacl 命令比较复杂,简单而言,为某个文件/文件夹设置默认权限命令如下:
|
|
|
|
|
|
2020-05-20 16:18:39 +08:00
|
|
|
|
```bash
|
2020-05-12 15:49:02 +08:00
|
|
|
|
setfacl -R -d -m [user|group|other]:rwx <directory/file>
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
其中 -R 表示递归。删除规则命令如下:
|
|
|
|
|
|
2020-05-20 16:18:39 +08:00
|
|
|
|
```bash
|
2020-05-12 15:49:02 +08:00
|
|
|
|
setfacl -x [default]:[user|group|other] <directory/file>
|
|
|
|
|
setfacl -k <directory/file>
|
|
|
|
|
```
|