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

2.2 KiB
Raw Permalink Blame History

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 命令用于获取文件/文件夹的权限。

$ 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 命令比较复杂,简单而言,为某个文件/文件夹设置默认权限命令如下:

setfacl -R -d -m [user|group|other]:rwx <directory/file>

其中 -R 表示递归。删除规则命令如下:

setfacl -x [default]:[user|group|other] <directory/file>
setfacl -k <directory/file>