我怎样才能build立一个文件系统目录*总是*是可写组?

我有一个Linux文件服务器与一些共享目录。 这些目录有时可以通过SFTP访问,有时也可以通过shell来访问。 无论如何访问这些目录,我想确保:

  1. 共享目录中的所有文件总是可以由“fileserver”组中的所有用户读写(相当于g+rw的道德)
  2. 共享目录中的所有目录总是可以由“文件服务器”组( g+x的道德等价物)中的所有用户遍历,
  3. 共享目录中的所有文件都不能被任何人执行( gx的道德等价物)

我有一个模糊的回忆,我已经用setfacl做过,但我不知道如何。

我来这里最近的是:

 $ chown fileserver:fileserver . -R $ find . -type f -print -exec chmod ax '{}' ';' $ find . -type d -print -exec chmod u+x '{}' ';' $ find . -type d -print -exec chmod g+xs '{}' ';' $ cat facls user::rwx group::rwx other::rx default:user::rwx default:user:fileserver:rwx default:group::rwx default:group:fileserver:rwx default:mask::rwx default:other::rx $ setfacl -M facls -R . 

而且它似乎在写入这个目录的进程上意外的过分严格的umasks上做了正确的事情,但它仍然使用户能够chmod他们创build的文件,从而限制他们的权限。

这个解决scheme的关键问题是文件仍然由创build它们的人所拥有,文件所有者具有不可撤销的权限修改权限。 在BSD派生系统上,似乎你可以通过一个setuid目录来解决这个问题(这会导致在该目录下创build的所有文件都被该目录的所有者拥有)。 然而,Linux只对setgid有这种行为。