我有一个共享目录。目录的groupid是dev,许多用户是组dev的成员。
现在,我需要在文件夹下创建的所有文件都具有相同的权限,例如rwxrwxr--
。
我该怎么做?我想到的一个解决方案是: 我需要一个可由该组的所有成员执行的2个shell脚本。在检查当前目录的groupID是dev之后,一个脚本应该更改umask。另一个应该将umask更改为先前的默认值。
请告诉我如何在shell脚本中执行此操作。
答案 0 :(得分:1)
通过将默认POSIX ACL(访问控制列表)应用于共享目录,可以避免使用shell脚本。例如在linux上:
setfacl -m d:u::rwx,d:g::rwx,d:o::r,d:g:dev:rwx /shared/dir
在/ shared / dir中随后创建 new 文件时,应用于/ shared / dir的默认ACL会覆盖用户的umask设置。以下内容摘自linux上的acl(5)手册页:
OBJECT CREATION和DEFAULT ACL
当对象是时,初始化文件对象的访问ACL 创建 与任何creat(),mkdir(),mknod(),mkfifo()或open() 功能。 如果默认ACL与目录关联,则为mode参数 至 创建文件对象的函数和默认的ACL 目录 用于确定新对象的ACL:
新对象继承了包含目录的默认ACL 作为其访问ACL。
- 醇>
与文件权限对应的访问ACL条目 修改位以使它们不包含任何非权限 载 在mode参数指定的权限中。
答案 1 :(得分:0)
创建单个shell脚本以将文件复制到共享目录中。在该shell脚本中,复制后设置文件的权限。确保目录中设置了SGID位;在目录中创建的所有文件将自动属于您的方案中拥有目录 - dev的组。请注意,MacOS X实际上总是在目录上设置SGID位;也就是说,创建文件时,其组是拥有该目录的组。
惩罚任何不明显使用shell脚本的人,留下权限不正确的文件。
担心所有文件是否应该可执行;文件不应该。
担心所有文件是否应该可写;所有这些中的版本控制系统在哪里?
(我对文件的444权限感到高兴 - 除了554可能合理的少数程序。)
答案 2 :(得分:0)
标题问题似乎与正文中的问题无关,而是回答标题中的问题:
id=$( stat -f %g directory )