私は自分が所有しているディレクトリ(たとえば/sync
)とそのディレクトリへの完全な読み取りおよび書き込みアクセス権を持ちたいプロセスを実行しています(私の場合、プロセスは以前BitTorrent Syncとして知られていたResilio Syncです)。このディレクトリ内のすべてのファイルはプライベートプロジェクトとドキュメントです。そのうち99%は私が所有していますが、時々やむを得ない理由でいくつかのディレクトリとファイルがルートとして生成されることがあります。そのようなディレクトリとファイルを変更、移動、および/または削除するプロセスをどのように取得できますか?
g+s
/sync
固定ビット(すべてのファイルがグループを継承するようにオンに設定)とカスタムACLルール(固定ビットを新しく作成されたディレクトリに自動的に伝播しようとしました)の組み合わせを試しましたが、この回答とその意見、inotifyなしでは実行できません(単純化のためにinotifyの使用を避けたい)。
ところで、この問題を解決するための別の方法があるかどうか疑問に思います。すべてのファイル権限を無視し、特定のディレクトリとその中のすべてのエントリで1つの特定のプロセスにさらに権限を付与するように見えますか?可能であれば、私が知っておくべき安全上のリスクはありますか?
答え1
このターゲットには粘着性のビットが必要ないと思います。プロセスがユーザーとして実行されており、resilio
ユーザーアカウントがあるとしますolegs
。 (プロセスを実行するのはあなたのアカウントです。デモンストレーションのためにこれを追加しています。)
# Change all ownership to root:root
chown -R root:root /sync
# Make sure only root (and group members of root) can get a directory listing.
chmod 0750 /sync
# Now, let's augment standard permissions with ACLs.
# Set default masks for all new file system objects in /sync.
# (The root user already has permission.)
setfacl -d -m u:resilio:7 /sync
setfacl -d -m u:olegs:7 /sync
# Apply a mask to all existing files (and dirs) to give full control
# to the directory contents to olegs and resilio.
setfacl -m -R u:resilio:7 /sync
setfacl -m -R u:olegs:7 /sync
root
これで、これらのユーザーにはディレクトリとそのolegs
すべての権限がありますresilio
。そうしないと、他のユーザーはディレクトリの内容を見ることができません/sync
。マスクが7
(読み取り/書き込み/実行)を指定しても、ディレクトリはrwxになり、ファイルは実際には6
(読み取り/書き込み)になります。