親ディレクトリと子ディレクトリがあるシナリオを想像してください。親ディレクトリでグループrwxを指定しました。そのディレクトリの下には、グループ権限を持つディレクトリがあります。 ---(したがって権限がありません。)これは安全ですか?その理由は何ですか?
この設定はすぐに安全ではないと思いました。最初は、グループが親ディレクトリに対するフルアクセス権を持っているので、サブディレクトリに対する権限を変更できると思いました。しかし、私たちがこの理論をテストしたとき、それはうまくいきませんでした。 Testディレクトリを作成し、chmod 777 Test
;を使用して権限を変更しました。次に、そのディレクトリ内にChildTestディレクトリを作成し、権限を設定してchmod 700 ChildTest
質問にパラメータを設定しました。その後、私の友人が私のTestディレクトリにCDを挿入し、ChildTestにアクセスするためにいくつかの異なる方法を試しました。 (HP/UX環境ではkshを使用します。)
cp -R ChildTest ~
chmod 777 ChildTest
mkdir New
mv ChildTest New # (also tried this with cp)
彼にはそれがなかったので、すべてが失敗しましたChildTest
。だから私たちは思ったより安全かもしれないと思いました。私たちは教授に尋ね、彼は全く安全ではないという事実に再び言及しましたが、「自分の権限を変更するのはとても簡単なので、2人が必要です」という以外に情報を提供しませんでした。 「(これは私たちを本当に混乱させます。なぜなら…私たちはそうですか?)
とにかく、この設定は本当に安全ではないと確信していますが、これを証明する方法がわかりません。答えを期待していませんが、正しい方向に進むか、私が正しい道を進んでいることを確認するだけで良いと思います。
答え1
実際:権限はいわゆる「inode」の各ファイル/ディレクトリに保存されるため、サブディレクトリの権限を変更することはできません。この点では安全です。
しかし、名前ディレクトリは含まれているファイル(およびサブディレクトリ)の名前を含む特別なファイルであるため、サブディレクトリの名前は親ディレクトリに保存されます。親ディレクトリでは、すべてのユーザー/グループに書き込み権限があります。
したがって、サブディレクトリを所有していないユーザーは名前を変更するそれ、または削除するサブディレクトリ(空の場合)一部のシステムではそうすることができます。動く書き込み権限を持つ別のディレクトリに移動します(同じファイルシステムにある場合)。
答え2
POSIXを通じて、サブディレクトリの権限を変更しても効果はありません。:
有効なユーザーIDがファイルのユーザーIDと一致するプロセス、または適切な権限を持つプロセスのみがファイルのファイルモードビットを変更できます。
ただし、名前の変更は機能する必要があり、含まれているディレクトリへの書き込み権限のみが必要です。
(root) /tmp# mkdir -p one/two; chmod 0777 one; chmod 0700 one/two
(user) /tmp/one$ mv two three && echo ok
ok
ただし、少なくともLinuxでは、固定ビットを設定すると、自分に属していないファイルやディレクトリが削除されるのを防ぐことができるため、これは発生しません。
(root) /tmp# chmod +t one
(user) /tmp/one$ mv three four
mv: cannot move 'three' to 'four': Operation not permitted
私はこの問題に影響を与えるHP-UX固有の機能については知らないことを自由に認めています。
サブディレクトリの名前を変更できる問題のサイズは、そのディレクトリに何をするかによって異なります。最上位ディレクトリにのみアクセスできるユーザーは、サブディレクトリのファイルを読み取れないため安全です。ただし、同じ名前でディレクトリの名前を変更して再作成できるため、そこにある必要があるすべてを模倣できます。
一部の外部サービスがサブディレクトリのファイルを読み取る場合、これは重要です。ファイルが保存されるディレクトリを考えてみてください。他の人の名前でファイルを作成したくcrontab
ありません。crontab