2.2 KiB
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>