在Linux下为目录下的新build文件和子目录设置默认权限?

我有一堆长时间运行的脚本和应用程序将输出结果存储在less数用户共享的目录中。 我想要一种方法来确保在这个共享目录下创build的每个文件和目录自动具有u=rwxg=rwxo=r权限。

我知道我可以在我的各种脚本中使用umask 006 ,但是我不喜欢这种方法,因为许多用户编写自己的脚本,并可能忘记自己设置umask。

我真的只是希望文件系统设置新创build的文件和目录具有一定的权限,如果它在一个特定的文件夹。 这是可能吗?

更新 :我认为这可以通过使用默认ACLfunction的POSIX ACL来完成,但目前这一切都超出了我的想象 。 如果有人可以解释如何使用默认ACL,它可能会很好地回答这个问题。

要获得正确的所有权,您可以使用设置目录上的组setuid位

 chmod g+rwxs dirname 

这将确保在该目录中创build的文件归组所有。 然后你应该确保每个人都使用umask 002或007或者其他类似的东西来运行—这就是为什么Debian和其他许多linux系统默认configuration了每个用户组的原因。

如果用户的umask过于强大,我不知道如何强制所需的权限。

以下是如何使用默认的ACL,至less在Linux下。

首先,您可能需要在文件系统上启用ACL支持。 如果您使用的是ext4,那么它已经启用。 其他文件系统(如ext3)需要使用acl选项来挂载。 在这种情况下,请将选项添加到/etc/fstab 。 例如,如果该目录位于根文件系统上:

 /dev/mapper/qz-root / ext3 errors=remount-ro,acl 0 1 

然后重新安装它:

 mount -oremount / 

现在,使用以下命令设置默认ACL:

 setfacl -dm u::rwx,g::rwx,o::r /shared/directory 

/shared/directory所有新文件现在都应具有所需的权限。 当然,这也取决于创build文件的应用程序。 例如,大多数文件从一开始就不能被任何人执行(取决于open(2)或creat(2)调用的mode参数),就像使用umask时一样。 像cptarrsync这样的实用程序将尝试保留源文件的权限,如果源文件不可写入组文件,这些文件将掩盖默认的ACL。

希望这可以帮助!

这是丑陋的,但你可以使用setfacl命令来实现你想要的。

在Solaris机器上,我有一个包含用户和组的acls的文件。 不幸的是,你必须列出所有的用户(至less我找不到一种方法来使这个工作,否则):

 user::rwx user:user_a:rwx user:user_b:rwx ... group::rwx mask:rwx other:rx default:user:user_a:rwx default:user:user_b:rwx .... default:group::rwx default:user::rwx default:mask:rwx default:other:rx 

将文件命名为acl.lst并填写您的真实用户名,而不是user_X。

您现在可以通过发出以下命令在您的目录中设置这些acls:

 setfacl -f acl.lst /your/dir/here 

在你的shell脚本(或.bashrc )中,你可以使用如下的东西:

umask 022

umask是一个确定控制如何为新创build的文件设置文件权限的掩码设置的命令。