NotePublic/Software/System/Linux/Modules/Account/Linux_新建文件和目录的默认权限.md

46 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Linux 新建文件和目录的默认权限
当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是 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 命令用于获取文件/文件夹的权限。
```bash
$ 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 命令比较复杂,简单而言,为某个文件/文件夹设置默认权限命令如下:
```bash
setfacl -R -d -m [user|group|other]:rwx <directory/file>
```
其中 -R 表示递归。删除规则命令如下:
```bash
setfacl -x [default]:[user|group|other] <directory/file>
setfacl -k <directory/file>
```