web-dev-qa-db-ja.com

ファイルシステムディレクトリを*常に*グループ書き込み可能に設定するにはどうすればよいですか?

いくつかの共有ディレクトリを持つLinuxファイルサーバーがあります。これらのディレクトリには、SFTP経由でアクセスすることもあれば、シェルを使用するユーザーがアクセスすることもあります。これらのディレクトリへのアクセス方法に関係なく、次のことを確認したいと思います。

  1. 共有ディレクトリ内のすべてのファイルは常に「fileserver」グループのすべてのユーザーが読み取りおよび書き込み可能です(道徳的にはg+rw
  2. 共有ディレクトリ内のすべてのディレクトリは常に「ファイルサーバー」グループ内のすべてのユーザーがトラバースできます(道徳的にはg+x
  3. 共有ディレクトリ内のすべてのファイルは決して誰でも実行可能です(道徳的にはg-x

以前にsetfaclでこれを行ったことがあるという漠然とした記憶がありますが、その方法がわかりません。

2
Glyph

私がここに来た最も近いものは次のとおりです。

$ 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に対してのみこの動作をします。

1
Glyph