粘着ビット
100%

パーミッション · レッスン 8

粘着ビット

sticky bit が `/tmp` のような共有書き込み可能ディレクトリのエントリーを保護する仕組みを学びます。

書き込み可能なディレクトリでは通常、権限を持つユーザーが、自身では所有していないファイルであっても内部のエントリーを削除・改名できます。sticky bit は所有権による制限を追加し、共有書き込み可能ディレクトリをより安全にします。

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 を通常のディレクトリ権限と合わせて評価する。

学習進捗を保存

無料アカウントを作成してこのレッスンを保存し、どのデバイスからでも学習を続けられます。

無料アカウントを作成
パーミッション に戻る