如何为共享文件夹下的所有文件设置相同的权限

时间:2011-03-17 15:52:02

标签: shell unix

我有一个共享目录。目录的groupid是dev,许多用户是组dev的成员。 现在,我需要在文件夹下创建的所有文件都具有相同的权限,例如rwxrwxr--

我该怎么做?我想到的一个解决方案是: 我需要一个可由该组的所有成员执行的2个shell脚本。在检查当前目录的groupID是dev之后,一个脚本应该更改umask。另一个应该将umask更改为先前的默认值。

请告诉我如何在shell脚本中执行此操作。

3 个答案:

答案 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:

     
      
  1. 新对象继承了包含目录的默认ACL         作为其访问ACL。

  2.   
  3. 与文件权限对应的访问ACL条目   修改位以使它们不包含任何非权限   载         在mode参数指定的权限中。

  4.   

答案 1 :(得分:0)

创建单个shell脚本以将文件复制到共享目录中。在该shell脚本中,复制后设置文件的权限。确保目录中设置了SGID位;在目录中创建的所有文件将自动属于您的方案中拥有目录 - dev的组。请注意,MacOS X实际上总是在目录上设置SGID位;也就是说,创建文件时,其组是拥有该目录的组。

惩罚任何不明显使用shell脚本的人,留下权限不正确的文件。

担心所有文件是否应该可执行;文件不应该。

担心所有文件是否应该可写;所有这些中的版本控制系统在哪里?

(我对文件的444权限感到高兴 - 除了554可能合理的少数程序。)

答案 2 :(得分:0)

标题问题似乎与正文中的问题无关,而是回答标题中的问题:

id=$( stat -f %g directory )