我如何设置文件系统目录以*始终*为组可写?

我如何设置文件系统目录以*始终*为组可写?

我有一台 Linux 文件服务器,其中包含一些共享目录。这些目录有时通过 SFTP 访问,有时由具有 shell 的用户访问。无论如何访问这些目录,我都希望确保:

  1. 共享目录中的所有文件都是总是可供“fileserver”组中的所有用户读取和写入(道德等同于g+rw
  2. 共享目录中的所有目录都是总是可供“fileserver”组中的所有用户遍历(道德等同于g+x
  3. 共享目录中的所有文件都是绝不任何人都可以执行(道德上等同于g-x

我依稀记得我以前做过这个,setfacl但不清楚怎么做。

答案1

我在这里最接近的是:

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

并且它对于意外地对写入此目录的进程设置过于严格的 umask 做了正确的事情,但是它仍然允许用户访问chmod他们创建的文件,从而限制他们的权限。

此解决方案的关键问题是文件仍归其创建者所有,并且文件所有者具有不可撤销的修改权限的权限。在 BSD 派生系统上,似乎可以使用目录来解决这个问题setuid(这会导致在该目录中创建的所有文件都归目录所有者所有);但是,Linux 只对 有这种行为setgid

相关内容