我有一台 Linux 文件服务器,其中包含一些共享目录。这些目录有时通过 SFTP 访问,有时由具有 shell 的用户访问。无论如何访问这些目录,我都希望确保:
- 共享目录中的所有文件都是总是可供“fileserver”组中的所有用户读取和写入(道德等同于
g+rw
) - 共享目录中的所有目录都是总是可供“fileserver”组中的所有用户遍历(道德等同于
g+x
) - 共享目录中的所有文件都是绝不任何人都可以执行(道德上等同于
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
。