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/symbolCode language: JavaScript (javascript)

これにより、userB は引き続き dirA 内でファイル操作が出来つつも、./dirA/symbol の削除・リネームはできない。

dirAsetgid が不要なら 37751775 でよい。

スティッキービットは /tmp で使われているアレ。シンボリックリンクのターゲットでなくリンク元の権限を操作 ✕ 親ディレクトリのスティッキービット設定、というパターンは初めて使った気がする。

応用問題ってやつだ。

\ 記事をシェアしよう! /
Hatena Pocket Line

コメントを記入