パーミッションの読み方
このレッスンで分かること
- 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 文字ブロックの意味
| 位置 | 記号 | 数値 | 意味 |
|---|---|---|---|
| 1 | r | 4 | 読み取り |
| 2 | w | 2 | 書き込み |
| 3 | x | 1 | 実行(ディレクトリの場合は中に入る) |
各位置が記号のままなら権限あり、- なら権限なし。後に出てくる 8 進数表記 (755, 644 など) はこの数値を足し合わせたものです。
| 記号 | 8 進数 | 意味 |
|---|---|---|
rwx | 7 | 全部 OK |
rw- | 6 | 読み書き |
r-x | 5 | 読み + 実行 |
r-- | 4 | 読み取りのみ |
--- | 0 | 何もできない |
パーミッションの読み解きフロー
実例で読む
ターミナル
$ 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 を作り、stat と ls -l で権限を確認します。
特殊ビット (SUID / SGID / Sticky)
10 文字に加えて、さらに特殊な権限ビットが 3 種類あります。本番セキュリティ調査で目にすることが多い「変な文字」の正体です。
| ビット | 表示 | 8 進数の頭桁 | 用途 |
|---|---|---|---|
| SUID | s (所有者の x 位置) | 4xxx | 実行時に所有者の権限になる(passwd など) |
| SGID | s (グループの x 位置) | 2xxx | 実行時にグループの権限になる、またはディレクトリの新規ファイルがグループ継承 |
| Sticky | t (その他の x 位置) | 1xxx | /tmp のように「他人のファイルは消せない」を実現 |
ターミナル
$ ls -ld /tmp
drwxrwxrwt 10 root root 4096 May 20 12:00 /tmp末尾の t が Sticky ビットで、これがあるおかげで /tmp は誰でも書き込めるのに、他人のファイルは消せないという便利な状態になっています。
ACL という別レイヤー
基本の 9 ビット権限では足りないとき、getfacl と setfacl で追加のアクセス制御リストを設定できます。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 つができることを確認しましょう。
- パーミッションの読み方 の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. パーミッションの読み方 とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
課題
- touch でファイルを作成する
- ls -l と stat の両方で権限を確認する