パーミッションの読み方

このレッスンで分かること

  • 10 文字の最初はファイルタイプ、残り 9 文字を「所有者 / グループ / その他」の 3 ブロックに分割
  • 各ブロックは r (4) + w (2) + x (1)、8 進数表記 (755 等) と等価
  • ディレクトリの x は「中に入る権限」、SUID / SGID / Sticky の特殊ビットもある

パーミッションの読み方 とは

Linuxのファイルやディレクトリに設定されたパーミッションの意味と読み方を解説します。本レッスンでは、パーミッションの読み方 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

なぜ重要か

ls -l でファイルを一覧したときに出てくる -rw-r--r-- のような 10 文字の記号は、Linux のセキュリティ設計の核心です。サーバーで「権限がない」とエラーが出る、デプロイした PHP ファイルが Web から読めない、ログファイルに他人が書き込めてしまう、こういった現実の問題はすべてこの記号を正しく読めるかで解決スピードが変わります。本レッスンではこの 10 文字の構造を分解し、後続の chmod で書き換える土台を作ります。

基本構造

プレーンテキスト

-rwxr-xr-- │└┬┘└┬┘└┬┘ │ │ │ └ その他 (other) の権限 │ │ └─── グループ (group) の権限 │ └────── 所有者 (user) の権限 └──────── ファイルタイプ

左端 1 文字はファイルタイプ、続く 9 文字を 3 文字ずつのブロックに分け、それぞれ 所有者 グループ その他 の権限を表します。

ファイルタイプ

記号意味
-通常ファイル
dディレクトリ
lシンボリックリンク
cキャラクタデバイス
bブロックデバイス

3 文字ブロックの意味

位置記号数値意味
1r4読み取り
2w2書き込み
3x1実行(ディレクトリの場合は中に入る)

各位置が記号のままなら権限あり、- なら権限なし。後に出てくる 8 進数表記 (755, 644 など) はこの数値を足し合わせたものです。

記号8 進数意味
rwx7全部 OK
rw-6読み書き
r-x5読み + 実行
r--4読み取りのみ
---0何もできない

パーミッションの読み解きフロー

diagram (will load when visible)

実例で読む

ターミナル

$ ls -l /etc/passwd /etc/shadow /usr/bin/passwd 2>/dev/null -rw-r--r-- 1 root root 2890 /etc/passwd -rw-r----- 1 root shadow 1567 /etc/shadow -rwsr-xr-x 1 root root 68208 /usr/bin/passwd
  • /etc/passwd は所有者 root が読み書き、グループとその他は読み取りのみ
  • /etc/shadow は所有者 root が読み書き、shadow グループが読み取り、その他は何もできない
  • /usr/bin/passwd の所有者位置にある s は SUID ビットといい、誰が実行しても所有者 (root) の権限で動く特殊なフラグ

stat コマンドで詳しく見る

ターミナル

$ stat /etc/hosts File: /etc/hosts Size: 200 Blocks: 8 IO Block: 4096 regular file Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)

0644 は 8 進表記、-rw-r--r-- は記号表記。両者は同じ情報を別の表現で示しているだけです。

ディレクトリの x は「中に入る権限」を意味します。r だけだと中身を一覧できても、cd で入ったりファイルにアクセスしたりはできません。x がないと ls /path でファイル名は見えても中身は読めない、という奇妙な状態になります。

よくある勘違い

chmod 777 にしておけば安心」は最悪の習慣です。誰でも書き換え可能になるため、ハッキングされたら任意のスクリプトを実行される温床になります。

やってみよう

演習エディタで /tmp/sample.txt を作り、statls -l で権限を確認します。

特殊ビット (SUID / SGID / Sticky)

10 文字に加えて、さらに特殊な権限ビットが 3 種類あります。本番セキュリティ調査で目にすることが多い「変な文字」の正体です。

ビット表示8 進数の頭桁用途
SUIDs (所有者の x 位置)4xxx実行時に所有者の権限になる(passwd など)
SGIDs (グループの x 位置)2xxx実行時にグループの権限になる、またはディレクトリの新規ファイルがグループ継承
Stickyt (その他の x 位置)1xxx/tmp のように「他人のファイルは消せない」を実現

ターミナル

$ ls -ld /tmp drwxrwxrwt 10 root root 4096 May 20 12:00 /tmp

末尾の t が Sticky ビットで、これがあるおかげで /tmp は誰でも書き込めるのに、他人のファイルは消せないという便利な状態になっています。

ACL という別レイヤー

基本の 9 ビット権限では足りないとき、getfaclsetfacl で追加のアクセス制御リストを設定できます。ls -l の権限末尾に + 記号が付いているファイルは ACL が設定されている目印です。

ターミナル

$ ls -l /path/to/file -rw-r--r--+ 1 root root 200 May 20 12:00 file # 末尾の + が ACL の存在を示す

ACL は強力ですがログ調査の難易度を上げます。本番では「まず素の 9 ビットで設計し、それで無理なときだけ ACL を足す」が鉄則です。

この章のポイント

ここまでの要点 10 文字の最初はタイプ、残り 9 文字を 3 ブロックに分割。各ブロックは r (4) + w (2) + x (1) の組み合わせ、8 進数表記と等価。ディレクトリの x は「中に入る権限」、SUID / SGID / Sticky の特殊ビットもある。chmod 777 は最悪。

まとめ

  • 10 文字の最初はタイプ、残り 9 文字を 3 つに分割
  • 各ブロックは r w x の組み合わせ
  • 記号表記と 8 進数表記は同じ情報の別表現
  • ディレクトリの x は「中に入る権限」
  • stat でより詳しく権限を確認できる
  • SUID / SGID / Sticky の特殊ビットもある
  • ACL は素の権限で足りないとき限定で使う

次のレッスン

次は 権限の変更 chmod で、Linuxのファイルやディレクトリに設定されたパーミッションの意味と読み方を解説します を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. パーミッションの読み方 の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. パーミッションの読み方 とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

課題

  1. touch でファイルを作成する
  2. ls -l と stat の両方で権限を確認する

ヒント

script.sh
script.sh
学習モード
script.sh
ターミナル出力