# 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 # file: # owner: # group: 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 ``` 其中 -R 表示递归。删除规则命令如下: ```bash setfacl -x [default]:[user|group|other] setfacl -k ```