Linuxパーミッション完全ガイド:基本(rwx)から特殊(SUID/SGID/Sticky)まで徹底解説!

Linux

Linuxシステムを安全かつ効率的に運用する上で、ファイルやディレクトリへのアクセス権、すなわちパーミッションの理解は不可欠です。誰がどのファイルにアクセスでき、何ができるのかを適切に制御することは、セキュリティの基本であり、複数ユーザー環境での共同作業を円滑に進めるための鍵となります。

多くの人が r (読み取り)、 w (書き込み)、 x (実行) という基本的なパーミッションについては知っているかもしれませんが、Linuxにはさらに高度な制御を可能にする「特殊パーミッション」も存在します。

今回は、Linuxの基本的なパーミッションの仕組みから、少し複雑な特殊パーミッション(SUID, SGID, Sticky Bit)まで、その意味と役割、設定方法を網羅的に解説していきます。

Linuxの基本パーミッション (rwx)

Linuxのファイルやディレクトリには、アクセスできるユーザーの種類と、許可される操作の種類に基づいてパーミッションが設定されています。

1. パーミッションの種類

基本的なパーミッションには以下の3種類があります。

  • 読み取り (r – Read):
    • ファイルの場合: ファイルの内容を読むことができます。
    • ディレクトリの場合: ディレクトリに含まれるファイルやサブディレクトリの一覧を表示できます (ls コマンドなど)。
  • 書き込み (w – Write):
    • ファイルの場合: ファイルの内容を変更・上書き・追記できます。
    • ディレクトリの場合: ディレクトリ内に新しいファイルやサブディレクトリを作成したり、既存のものを削除したり、名前を変更したりできます。注意: ファイル自体の書き込み権限がなくても、ディレクトリへの書き込み権限があればファイルを削除できてしまう場合があります(これを防ぐのが後述のSticky Bitです)。
  • 実行 (x – Execute):
    • ファイルの場合: そのファイルをプログラムとして実行できます。スクリプトファイルなどにはこの権限が必要です。
    • ディレクトリの場合: そのディレクトリをカレントディレクトリとして移動 (cd コマンドなど) したり、ディレクトリ内のファイルにアクセスしたりするために必要です。

2. 対象ユーザー

これらのパーミッションは、以下の3つのカテゴリーのユーザーに対して個別に設定されます。

  • オーナー (Owner/User – u): そのファイルやディレクトリの所有者。通常は作成したユーザーです。
  • グループ (Group – g): そのファイルやディレクトリが所属するグループ。オーナーと同じグループであることも、別の特定のグループであることもあります。グループに所属する複数ユーザーでファイルを共有する際に利用されます。
  • その他 (Others – o): 上記のオーナーでもなく、グループのメンバーでもない、それ以外の全てのユーザー。

3. パーミッションの確認方法 (ls -l)

ls -l コマンドを実行すると、ファイルやディレクトリのパーミッションを確認できます。表示は通常、以下のような形式です。

-rwxr-xr-- 1 user group 1024 Apr 12 17:00 test.txt
drwxr-xr-x 2 user group 4096 Apr 12 17:05 directory
  • 最初の文字: ファイルタイプを示します (-: 通常ファイル, d: ディレクトリ, l: シンボリックリンクなど)。
  • 続く9文字: パーミッションを表します。左から3文字ずつ「オーナー」「グループ」「その他」の権限を示し、各3文字は「読み取り(r)」「書き込み(w)」「実行(x)」の順に対応します。権限がない場合は - で表示されます。
    • rwxr-xr-- の例:
      • オーナー: rwx (読み取り、書き込み、実行すべて可能)
      • グループ: r-x (読み取り、実行は可能、書き込みは不可)
      • その他: r-- (読み取りのみ可能、書き込み、実行は不可)

4. 基本パーミッションの設定方法 (chmod)

パーミッションの変更には chmod コマンドを使用します。主な設定方法にはシンボル表記と8進数表記(数値表記)があります。

  • シンボル表記: 誰に (u, g, o, a(all))、どの権限を (r, w, x)、どうするか (+(追加), -(削除), =(指定)) を組み合わせて指定します。
    • 例:
      • chmod u+x script.sh (オーナーに実行権限を追加)
      • chmod g-w data.txt (グループから書き込み権限を削除)
      • chmod o=r config.conf (その他の権限を読み取りのみに設定)
      • chmod a+r public_info (全ユーザーに読み取り権限を追加)
  • 8進数表記 (数値表記):r=4, w=2, x=1 の数値を割り当て、オーナー・グループ・その他の権限をそれぞれの合計値(0〜7)で表現します。
    • 例:
      • rwx = 4 + 2 + 1 = 7
      • r-x = 4 + 0 + 1 = 5
      • rw- = 4 + 2 + 0 = 6
      • r-- = 4 + 0 + 0 = 4
    • これをオーナー、グループ、その他の順に並べます。
    • 例:
      • chmod 755 script.sh (rwxr-xr-x)
      • chmod 644 data.txt (rw-r--r--)
      • chmod 700 private_dir (rwx------)

特殊パーミッション (SUID, SGID, Sticky Bit)

これらの基本的なrwxパーミッションに加えて、Linuxには特定の状況下で特別な動作を可能にする「特殊パーミッション」が存在します。これらはシステムのセキュリティや利便性を向上させるために利用されます。

SUID (Set User ID) : 一時的な権限昇格

  • 意味・役割: SUIDビットは、主に実行可能ファイルに対して設定されます。このビットが設定された実行ファイルを実行すると、そのプロセスは実行したユーザーの権限ではなく、そのファイルの所有者の権限で動作します。
  • 主な目的: 一般ユーザーが、通常は特権ユーザー(例: root)しか実行できないような特定の操作を、一時的にそのプログラムを通じて安全に行えるようにすることです。(例: passwd コマンド)
  • 表示: ls -l で所有者の実行権限が x の代わりに s で表示されます (rwsr-xr-x など)。元々実行権限がない場合は S
  • セキュリティ上の注意: SUIDプログラム(特にroot所有)の脆弱性は重大なセキュリティリスクに繋がるため、設定は慎重に行い、必要最小限に留めるべきです。
  • 設定方法: chmod u+s <ファイル名> または chmod 4xxx <ファイル名> (例: chmod 4755 file)。

SGID (Set Group ID) : グループ権限の継承と実行

  • 意味・役割 (実行可能ファイル): プロセスがファイルのグループ所有者の権限で動作するようになります。
  • 意味・役割 (ディレクトリ): こちらがより重要かつ一般的です。 ディレクトリにSGIDビットが設定されていると、そのディレクトリ内に新しく作成されたファイルやサブディレクトリは、親ディレクトリのグループ所有権を自動的に継承します。
  • 主な目的 (ディレクトリ): 共有ディレクトリ内で作成されるファイルのグループを統一し、グループメンバー間の共同作業を容易にします。
  • 表示: ls -l でグループの実行権限が x の代わりに s で表示されます (rwxrwsr-x など)。元々実行権限がない場合は S
  • 設定方法: chmod g+s <ファイル名またはディレクトリ名> または chmod 2xxx <ファイル名またはディレクトリ名> (例: chmod 2775 directory)。

Sticky Bit : ディレクトリ内ファイルの保護

  • 意味・役割: Sticky Bitは、主にディレクトリに対して設定されます。設定されたディレクトリ内では、ファイルやサブディレクトリを削除・名前変更できるのは、その対象の所有者、親ディレクトリの所有者、またはrootユーザーのみに制限されます。
  • 主な目的: /tmp のような、複数のユーザーが書き込み可能な共有ディレクトリで、他人が作成したファイルを勝手に削除できないように保護することです。
  • 表示: ls -l でその他のユーザーの実行権限が x の代わりに t で表示されます (rwxrwxrwt など)。元々実行権限がない場合は T
  • 設定方法: chmod +t <ディレクトリ名> または chmod 1xxx <ディレクトリ名> (例: chmod 1777 directory)。

特殊パーミッションの設定方法 (chmod コマンド まとめ)

特殊パーミッションも chmod コマンドで設定します。8進数表記がよく使われます。

  • 8進数表記 (数値表記): 通常の3桁の数字の前に、特殊パーミッションを表す数字(SUID=4, SGID=2, Sticky Bit=1、またはその合計)を追加した4桁で指定します。
    • 例:
      • chmod 4755 file: SUID + rwxr-xr-x
      • chmod 2775 directory: SGID + rwxrwxr-x
      • chmod 1777 directory: Sticky Bit + rwxrwxrwx ( /tmp など)
      • chmod 6755 file: SUID + SGID + rwxr-xr-x (4+2=6)
      • chmod 7777 directory: SUID + SGID + Sticky Bit + rwxrwxrwx (特殊なケース)

まとめ

今回は、Linuxの基本的なパーミッション(rwx)と、特殊なパーミッション(SUID, SGID, Sticky Bit)について解説しました。

  • 基本パーミッション (rwx): ファイル/ディレクトリへの読み取り、書き込み、実行権限を、オーナー、グループ、その他のユーザー別に制御する基本。
  • SUID: プログラムをファイル所有者の権限で実行させる(一時的な権限昇格)。
  • SGID: (ディレクトリで)内部に作成されたファイルのグループ所有権を親ディレクトリから継承させる。
  • Sticky Bit: (ディレクトリで)他人によるファイル削除・名前変更を制限する。

これらのパーミッションを正しく理解し、適切に設定・管理することが、安全で効率的なLinuxシステムの運用には不可欠です。特に特殊パーミッションは強力な機能ですが、セキュリティリスクも伴うため、その影響を理解した上で慎重に利用しましょう。

最後までお読みいただき、ありがとうございました。

コメント

タイトルとURLをコピーしました