書き込み可能なディレクトリでは通常、権限を持つユーザーが、自身では所有していないファイルであっても内部のエントリーを削除・改名できます。sticky bit は所有権による制限を追加し、共有書き込み可能ディレクトリをより安全にします。
パーミッション · レッスン 8
粘着ビット
sticky bit が `/tmp` のような共有書き込み可能ディレクトリのエントリーを保護する仕組みを学びます。
Sticky Bit が削除を制限する仕組み
ディレクトリに sticky bit が設定されている場合、Linux は通常、適切な特権を持つプロセス、ディレクトリ所有者、またはエントリー所有者だけに、そのエントリーの削除・改名を許可します。通常のディレクトリ書き込み権限と検索権限も引き続き必要です。
この制限が関係するのはディレクトリエントリーです。ファイルの権限が許可している場合に、ファイル所有者が内容を編集することまでは防がず、ディレクトリを非公開にするものでもありません。
Sticky bit のある共有ディレクトリで、通常、特定のエントリーを削除できる一般ユーザーは誰ですか?
`/tmp` でビットを見分ける
システムの一時ディレクトリが一般的な例です。
$ ls -ld /tmp
drwxrwxrwt 17 root root 4096 Dec 15 11:45 /tmp
末尾の小文字 t は、その他クラスの実行位置にあります。Sticky bit とその他の実行権限の両方があることを示します。大文字 T は sticky bit が設定され、その他の実行権限がないことを示します。
/tmp は一般に全ユーザーが書き込み・検索できるため、複数ユーザーがエントリーを作成できます。Sticky bit により、ディレクトリが全ユーザー書き込み可能であるという理由だけで、通常ユーザーが別ユーザーのエントリーを削除することを防ぎます。それでもアプリケーションは一時オブジェクトを安全に作成しなければなりません。予測可能な名前、安全でないリンク、弱いファイルモードには別の危険があるためです。
ディレクトリモードの末尾にある小文字 t は何を示しますか?
Sticky Bit を設定・削除する
シンボリック形式でビットを設定します。
$ chmod +t shared-directory
先頭の特殊ビット8進桁では、sticky bit は 1 を加えます。
$ chmod 1777 shared-directory
先頭の 1 が sticky bit を設定し、777 が通常モードを指定します。このモードが適切なのは、そのディレクトリを意図的にすべてのローカルユーザーで共有する場合だけです。チーム用ディレクトリでは、より狭いグループ権限の方が適切な場合があります。Sticky bit だけを削除するには chmod -t shared-directory を使います。
Sticky bit を表す先頭の8進値はどれですか?
ディレクトリポリシー全体を検証する
Sticky bit は書き込み権限や検索権限を与えません。通常権限がディレクトリの変更を許可した後で、特定の削除・改名操作を制限するだけです。ディレクトリの所有者、グループ、通常モード、ACL、マウントのコンテキストをまとめて確認してください。稼働中システムの /tmp を変更せず、隔離環境で非特権アカウントを使ってテストします。
Sticky bit を追加すると、書き込み不可のディレクトリが他のユーザーから書き込み可能になりますか?
練習では、破棄可能な共有ディレクトリを作り、適切な通常モードと sticky bit を設定してから、二つの非特権ユーザーとしてエントリー削除をテストしてください。ファイルを削除・移動するラボで、基礎となる改名と削除操作を復習できます。
レッスン完了
粘着ビット を完了しました
共有ディレクトリの sticky bit を説明・検証できるようになりました。
Sticky bit を、削除と改名に対する所有権制限へ関連付ける。
長形式一覧の小文字
tと大文字Tを認識する。シンボリック形式または先頭の8進値
1でビットを設定する。Sticky bit を通常のディレクトリ権限と合わせて評価する。