2025年5月10日
同グループの別ユーザーから特定のシンボリックリンクだけ削除・リネームされないよう保護する方法

親ディレクトリA(dirA)のオーナー(userA)だけが、ディレクトリ内の特定のシンボリックリンク(symbol)を削除・リネームできるようアクセス制御する方法のメモ。
なお、親ディレクトリA(dirA)内ではユーザーB(userB)が恒常的にファイル・ディレクトリ作成・削除などの操作を行っており、userA と userB は同グループに属している。
つまりは、ユーザーB(userB)が親ディレクトリA(dirA)内で自由に作業しつつも、特定のシンボリックリンク(symbol)だけは削除・リネームできないよう制御したいのだ。(userB はシンボリックリンクを辿ることはできる)
このようなアクセス制御は、以下2つの設定を組み合わせれば可能。
- dirA のオーナーを userA にし、スティッキービットを立てる
- シンボリックリンク自体のオーナーを userA に変更
具体的なコマンド例は以下。(全てのファイル・ディレクトリ・シンボリックリンクは既に存在する前提)
su - userA
cd /var/www/test
chmod 3775 ./dirA
chown userA ./dirA
chown -h userA ./dirA/symbol
Code language: JavaScript (javascript)
これにより、userB
は引き続き dirA
内でファイル操作が出来つつも、./dirA/symbol
の削除・リネームはできない。
dirA
に setgid
が不要なら 3775
→ 1775
でよい。
スティッキービットは /tmp で使われているアレ。シンボリックリンクのターゲットでなくリンク元の権限を操作 ✕ 親ディレクトリのスティッキービット設定、というパターンは初めて使った気がする。
応用問題ってやつだ。
コメントを記入