在 Linux 中,当我创建一个目录时mkdir newdir
,新创建的目录具有以下权限和所有权:drwxr-xr-x 2 owner group
我的问题
如何为新创建的目录是:drwxrwxrwx 2 owner group
不管谁创建了该目录?
我做的一些研究
我知道在 Samba 共享中您可以强制执行这一点,directory mask
但是如果有人进入终端并以 root 身份创建一个目录,然后普通用户出现,那么他将无法在 root 用户创建的目录中创建文件,该怎么办?
我一直在使用 ACL,我知道如何让所有新创建的文件具有一定的权限。
例如: setfacl -dRm u::rwX,g::rwX,o::0 newdir/
这使得newdir
文件夹中的所有文件都具有权限:-rw-rw----
无论文件创建者是谁。
我还了解了“设置目录组 ID 位”,以便在“newdir”目录中创建的任何文件(或目录)的组所有权等于“newdir”目录的组所有权。
chmod g+s newdir/
我一直无法找到如何为新创建的目录是:drwxrwxrwx 2 owner group
无论谁创建了目录?也许这与 umask 有关?可以使用 ACL 来实现吗?
答案1
是的,您说得对 - 默认权限由创建进程的 umask 决定。不幸的是(与 SAMBA 不同山选项,提供单独的dmask
和fmask
),shell 的 umask 适用于目录和文件:
$ umask 0000
$ mkdir newdir ; touch newfile
$ ls -ld new{dir,file}
drwxrwxrwx 1 steeldriver steeldriver 512 Mar 2 17:22 newdir
-rw-rw-rw- 1 steeldriver steeldriver 0 Mar 2 17:22 newfile
无论如何,您无法控制其他用户进程的 umask(尤其是 root 进程)。
答案2
检查手册(man mkdir
):
-m,--模式=模式 设置文件模式(如 chmod),而不是 a=rwx - umask
因此你只需要:
mkdir -m 777 newdir
答案3
虽然不是最有效的想法,但它可以完成工作。让 root 运行 cronjob,它的唯一任务是执行命令/usr/bin/chmod -R 0777 /path/to/samba/share
。每次运行该作业时,问题都会按照您选择的间隔解决。