ユーザとパーミッション
chmod の数字、rwx の 9 文字、グループ追加 ── Linux のすべてのファイルに刻まれた「誰が何をできるか」を読み解き、自分の手で書き換えられるようになります。
| 所要時間 | 約 30 分 |
|---|---|
| 章タイプ | standard |
| 前提知識 | Chapter 1-6(SSH / ファイル操作 / vim / 環境変数) |
| 使用機材 | 踏み台 workstation01 + 演習用サーバ learner01 |
| 関連章 | 前: Chapter 6「環境変数とシェルの仕組み」/ 後: Chapter 8「Part 1 修了演習」 |
「chmod +x の正体」を解剖する
Chapter 6 の演習で、あなたはこんなコマンドを打ちました。
chmod +x ~/bin/hello
何気なく打ったこの 1 行が、Linux の パーミッション(permission = 許可 / 日本語では「権限」)の入口です。chmod は change mode の略で、「mode = パーミッション」を変えるコマンドです。+x は「実行する許可を付ける」という意味で、これを忘れると hello が実行ファイルとして認識されません。
file mode / permission / 権限 が混在しているので、両方の呼び方に慣れておくと、後の章や英語ドキュメントで困りません。では、このパーミッションはどこに保存されていて、誰がどう読んでいるのでしょうか?
ls -l ~/bin/hello # → -rwxrwxr-x 1 student student 70 5月 16 09:35 /home/student/bin/hello
左端の -rwxrwxr-x という呪文。これが「ファイルに付いたパーミッション(権限)の表記」です。9 文字の中に 「誰が」「何を」「できるか」 がすべて詰まっています。
・
-rwxr-xr-- をひと目で読めるようになる・
chmod 755 と chmod u+x の 2 つの書き方 が両方使える・「権限のないファイル」が出てきたとき、自分でグループを変えて解決できる
・Part 3 以降の SSH 鍵 / nginx / PostgreSQL で出てくる「権限エラー」を恐れなくなる
この章を終えるとできること
パーミッションを扱う 4 動作 を手に覚えます。
自分の所属確認
9 文字を分解
付け外し
他人をブロック
この 4 動作が体になじむと、「Permission denied」がもう怖くなくなります。原因が即座に切り分けられて、自分で直せるからです。
概念説明
1. 「誰が」── ユーザとグループ
Linux では、すべてのプロセス・ファイルに 「誰のものか」 が紐づいています。これを管理する単位が ユーザ と グループ です。
id # → uid=1003(student) gid=1003(student) groups=1003(student) # └──┬──┘ └──┬──┘ └──┬──┘ # ユーザID(名) 主グループID(名) 所属グループ全部 # 新規ファイルに (主 + 副すべて) # 自動で付くやつ
3 つの数字は別物です:
| フィールド | 意味 | 役割 |
|---|---|---|
uid=1003(student) | ユーザ ID(数字)と ユーザ名 | あなたが誰か |
gid=1003(student) | 主グループ ID と 主グループ名 | 新規ファイルに自動で付くグループ(必ず 1 つ) |
groups=1003(student) | 所属する すべてのグループ(主 + 副) | アクセスできるリソースの範囲 |
student」「副グループなし」という Linux 初期状態。Linux は通常、ユーザ作成時に 同名の主グループ を作るので、自分専用ユーザでは uid と gid のラベルが同じ名前になります。「番号は別だが、たまたま同じ student という名前」と読んでください。副グループに入っているユーザの例
たとえば、alice という別ユーザが sudo と adm の 2 つの副グループに入っている場合、id の出力は以下のようになります:
id alice # → uid=1000(alice) gid=1000(alice) groups=1000(alice),27(sudo),4(adm) # └──┬──┘ └──┬──┘ └─┬─┘ # 主グループ 副グループ 副グループ # (自分専用) (sudo 可) (ログ閲覧可)
副グループに入っているほど「できることが増える」 わけです。実はあなたの student も既に adm という副グループに入っていて、上のような複数グループ持ちの状態になっています(Chapter 4 で auth.log を読めたのは、このため)。なぜ入っているのかは、この章の後半で 種明かし します。
whoami # → student (ユーザ名だけ) groups # → student (副グループありなら複数表示される)
主グループと副グループ
| 種類 | 役割 | 個数 | 定義場所 |
|---|---|---|---|
| 主グループ (primary) | 新規ファイル作成時に自動で付くグループ | 必ず 1 つ | /etc/passwd の 4 番目 (gid) |
| 副グループ (secondary) | 「ついでに所属している」グループ。アクセス権を広げる | 0 個以上 | /etc/group のメンバー欄 |
grep '^student' /etc/passwd # → student:x:1003:1003::/home/student:/bin/bash # ^^^^ ← 主グループ GID grep '^adm:' /etc/group # → adm:x:4:syslog ← adm グループのメンバー一覧
/etc/passwd と /etc/group は プレーンテキストの定義ファイル です。Linux のユーザ管理は驚くほどシンプルで、テキストエディタでも読めます(編集は専用コマンドを推奨)。
🪟 コラム · Windows との違い (読み飛ばし可)
| 観点 | Linux | Windows |
|---|---|---|
| 主グループの概念 | 必ず 1 つの主 + 複数の副 | フラット(主の概念なし) |
| 新規ファイルの所有グループ | プロセスの 主グループ が自動付与 | 親フォルダの ACL を継承 |
| グループのネスト | しない(フラット) | AD では「グループ of グループ」可 |
| 権限表現 | 9 文字(-rwxr-xr--) | ACL(許可・拒否 / 継承 / 詳細) |
| グループ切替 | newgrp でセッション内切替可 | 該当なし |
| データ保存 | /etc/passwd / /etc/group | SAM / Active Directory |
groups で 3 つ並んでいるのに、新規ファイルは 1 つにしか属さない ── これは「主グループだけが新規ファイルに自動で付く」ためです。よく使う「特権グループ」── グループに入る = できることが増える
Linux では、特定のグループに所属することで、ある操作が許される という設計が広く使われています。代表例:
| グループ | 役割 | 入っていると |
|---|---|---|
sudo | sudo 実行権限(Debian/Ubuntu 系) | sudo で root 操作可 |
wheel | sudo 実行権限(RHEL / AlmaLinux 系) | 同上(伝統的な名前) |
adm | 管理者ログ閲覧 | /var/log/auth.log 等が読める |
docker | Docker 操作 | docker コマンド使用可(実質 root 相当) |
www-data | Web サーバの実行ユーザ | nginx/Apache が読み書きするファイルの所有グループ |
disk | ディスクデバイス直接アクセス | /dev/sda 等が読める(取り扱い注意) |
sudo グループに入っている人 という形で管理されています。/etc/sudoers を覗くと、その証拠が 1 行で書かれています:
%sudo ALL=(ALL:ALL) ALL # └─ 「sudo グループのメンバーは、全ホストで・全ユーザに化けて・全コマンドを実行可能」
% はグループを表す記号。つまり「sudo を使えるようにする = sudo グループに追加する」という、驚くほどシンプルな仕組みです。あなたの student が既に adm に入っているのも、まさにこの仕組み(グループ所属で特権が広がる)の実例です。この章の後半で、その 種明かし(どうやって付与されたか・なぜ Chapter 4 で auth.log が読めたか)をします。
2. 「読む」── -rwxr-xr-- を 3 × 3 で分解
ls -l の左端 10 文字は、ファイル種別 1 文字 + 権限 9 文字(3 × 3)で構成されています。
(所有者)
(グループ)
(その他)
| 文字 | 意味 | ファイル | ディレクトリ |
|---|---|---|---|
r (read) | 読む | 内容を読める | ls で一覧を見られる |
w (write) | 書く | 編集できる | 中にファイルを作る・消せる |
x (execute) | 実行 | プログラムとして実行可 | cd で入れる |
- | なし | 該当の権限なし | |
例: -rwxr-xr-- なら 所有者は全部 OK / グループは読と実行 / 他人は読むだけ。先頭の - は「通常ファイル」を表します(d ならディレクトリ、l ならシンボリックリンク)。
3. 「変える」── 数字と記号の 2 方式
chmod(change mode = ファイルの mode = パーミッションを変える)で権限を変えます。書き方は 2 通り あり、現場では両方使われます。
記号方式(部分的に変えたいとき)
chmod u+x file # user に実行権限を「足す」 chmod g-w file # group から書き権限を「引く」 chmod o=r file # others を「読みだけ」に設定 chmod a+r file # all (u+g+o) に読み権限を足す chmod u+x,go-r file # 複数指定はカンマ区切り
| 記号 | 意味 |
|---|---|
u / g / o / a | user / group / others / all |
+ / - / = | 足す / 引く / 設定(上書き) |
r / w / x | 読 / 書 / 実行 |
数字方式(全部いっぺんに設定)
仕組み: rwx の 3 つの権限はそれぞれ 1 ビット(オン/オフ)で表せるので、3 つまとめて 3 ビットの 2 進数 と見ると一つの数字になります。
r w x ビット位置 → 4 2 1 # それぞれの重み (2² 2¹ 2⁰) 2進数表記 → 1 1 1 # 全部 ON なら 111(2) = 7(10)
r が一番上の桁 (4)、w が真ん中の桁 (2)、x が一番下の桁 (1)。それぞれが オンなら足す / オフなら足さない だけです。
この「3ビット数字」を user / group / others の 3 桁分 並べたものが chmod 755 の正体です:
chmod 755 file ↓ 7 5 5 111 101 101 rwx r-x r-x user group others ↓ -rwxr-xr-x
chmod 755 file # rwx r-x r-x → 実行可能なスクリプトの定番 chmod 644 file # rw- r-- r-- → 通常のテキストファイル chmod 600 file # rw- --- --- → SSH 秘密鍵の定番 chmod 700 file # rwx --- --- → 自分専用の実行ファイル
慣れると、-rwxr-xr-x を見た瞬間に 111 101 101 → 755 と読める / その逆もできるようになります。
chmod +x で実行権限だけ追加)/ 「権限をひと言で全部決めたい」→ 数字方式(chmod 755 ~/bin/myscript でスクリプト用)4. 「守る」── 自分のファイルを他人から隠す
SSH 鍵やパスワードを書いたファイルは、他人から完全に隠す 必要があります。
chmod 600 ~/.ssh/id_ed25519 ls -l ~/.ssh/id_ed25519 # → -rw------- 1 student student 411 ... id_ed25519
-rw------- = 自分だけ読み書き可、グループも他人もアクセス不可。
5. コラム · 権限はどこに保存されている?(inode の話) (読み飛ばし可)
「ファイルの権限」は ファイル本体(中身)に書かれているわけではありません。Linux のファイルシステムでは、ファイルごとに inode という小さな台帳が用意されていて、そこに権限・所有者・タイムスタンプなどのメタデータが書かれています。
ls -li ~/bin/hello # → 396936 -rwxrwxr-x 1 student student 70 5月 16 09:35 /home/student/bin/hello # ^^^^^^ inode 番号 stat ~/bin/hello # File: /home/student/bin/hello # Size: 70 Blocks: 8 IO Block: 4096 通常ファイル # Device: 252,0 Inode: 396936 Links: 1 # Access: (0775/-rwxrwxr-x) Uid: (1003/student) Gid: (1003/student) # Access: 2026-05-16 09:35:44 +0900 # Modify: 2026-05-16 09:35:44 +0900 # Change: 2026-05-16 09:35:44 +0900
ファイル名は inode へのポインタにすぎません。chmod で権限を変えると、ファイルの中身ではなく inode が書き換わります(その証拠に stat の Change タイムスタンプが更新される)。
※ ハードリンク / シンボリックリンクという「inode の使いまわし」の話は、Part 3 のサーバ運用編で詳しく扱います。
試してみよう:hello の権限を解剖し、adm の種明かしを見る
Chapter 6 で作った ~/bin/hello を題材に、前半で chmod の 変える・守る を体験し、後半で「なぜ Chapter 4 で auth.log が読めたのか」の 種明かし をします。
触るのは ~/bin/hello の権限だけ。すべて元に戻せる操作です。ステップ ⑦〜⑨ は 種明かし(読むだけ) です。usermod などの管理コマンドを あなたが打つ必要はありません(adm は事前に付与済み)。
まず learner01 に入る
ssh student@learner01
誰が ── 自分のユーザとグループを確認
id # → uid=1003(student) gid=1003(student) groups=1003(student),4(adm) groups # → student adm
主グループ = student、副グループ = adm。あれ、副グループに adm が居ますね。Chapter 4 で auth.log をスラスラ読めたのは、実はこの adm のおかげでした。なぜ入っているのかは、ステップ ⑦ で種明かしします。
読む ── ~/bin/hello の権限を観察
ls -l ~/bin/hello # → -rwxrwxr-x 1 student student 70 5月 16 09:35 /home/student/bin/hello
Chapter 6 の chmod +x で x が 3 箇所すべてに付いた のがここで確認できます。
inode を覗く ── 権限はどこに保存されているか
ls -li ~/bin/hello # → 396936 -rwxrwxr-x 1 student student ... stat ~/bin/hello # Inode: 396936 / Access: (0775/-rwxrwxr-x) / Uid: 1003 / Gid: 1003
inode 番号 (例: 396936) はあなたの環境では別の数字になります。これがファイルの「身分証明書」です。
変える(数字方式)── chmod 644 で実行権限を剥がす
chmod 644 ~/bin/hello ls -l ~/bin/hello # → -rw-r--r-- 1 student student ... ~/bin/hello # → bash: /home/student/bin/hello: 許可がありません
実行権限がないと、シェルは「これは実行ファイルではない」と判断して拒否します。
変える(記号方式)── chmod u+x で自分だけ実行可能に
chmod u+x ~/bin/hello ls -l ~/bin/hello # → -rwxr--r-- 1 student student ... ~/bin/hello # → こんにちは、student さん! (from learner01)
u+x = user に x を足す。自分だけ実行できる状態になりました。
守る ── chmod 600 で他人から完全ブロック
chmod 600 ~/bin/hello ls -l ~/bin/hello # → -rw------- 1 student student ... # 確認後、実行できる状態に戻す chmod 755 ~/bin/hello ls -l ~/bin/hello # → -rwxr-xr-x 1 student student ...
種明かし ── あなたの adm はどう付与されたか
student が adm に入っているのは、管理者が learner01 を準備したときに、下のコマンドを root 権限で実行したからです。自分のサーバを建てて誰かに権限を渡すときは、まさにこの手順を踏みます。仕組みを読んで理解しましょう。# ↓ 管理者が実行済み(あなたは打たない) sudo usermod -aG adm student # -a: 「追加 (append)」/ -G: 副グループ指定 # -a を忘れると既存の副グループを上書きする大事故になる # ↓ あなたが確認できること(実行OK) grep '^adm:' /etc/group # → adm:x:4:syslog,student ← student が既に入っている
反映のタイミング ── グループはログイン時に焼き付く
グループ追加は 今開いているシェルには即座に反映されません。プロセスのグループメンバーシップは、ログイン時に決まるからです。あなたは adm を 付与済みの状態でログイン しているので、もう groups に出ています。一方、自分が今いるセッション中に新しく追加された場合は、いったん exit して再ログインするか、newgrp で切り替えるまで見えません。
groups # → student adm ← ログイン時点で焼き付いている
もしあなた自身があとで別のグループに追加されたときは、その場の groups には出ません。exit → 再 SSH(=新セッション)で初めて反映されます。この落とし穴は 修了確認の問 2 で扱います。
種明かしの結び ── Chapter 4 で auth.log を読めた理由
/var/log/auth.log(認証ログ)は adm グループのメンバーしか読めない ファイルです。Chapter 4 であなたがこのログをスラスラ読めたのは、adm に入っていたからでした。実際に所有グループを確かめてみましょう。
ls -l /var/log/auth.log # → -rw-r----- 1 syslog adm ... ← 所有グループ=adm, group権限=r-- # adm に入っていない一般ユーザなら: # cat: /var/log/auth.log: 許可がありません # あなたは adm メンバーなので読める: head -3 /var/log/auth.log # → 2026-05-16T09:30:58 learner01 sshd[1148]: Server listening on 0.0.0.0 port 22
adm / wheel / docker / www-data 等)にユーザを追加する作業が頻繁に登場します。| 起きたこと | 対処 |
|---|---|
chmod で実行権限を消して hello が動かない | chmod +x ~/bin/hello |
chmod 000 で自分も読めなくなった | chmod 755 ~/bin/hello(所有者なら chmod は常に可能) |
グループ追加後 groups に出ない | exit → 再 SSH で新セッション |
usermod -G で -a を忘れ既存副グループを上書きした | sudo usermod -aG group1,group2,... student で必要な副グループを全部足し直す |
大事なファイルを誤って chmod 777 | chmod 644 ファイル(一般)or chmod 600 ファイル(鍵類) |
詰まったら
- 段階ヒント: 定番の詰まりポイントへの段階開示
- AI に相談: Cloudflare Workers AI に自由質問できる相談窓口(v2 公開予定)
💡 軽く方向だけ
-rwxr-xr-- は左から ファイル種別 / user / group / others の 4 区画に分けて読みます。chmod には 数字方式 (755) と 記号方式 (u+x) の 2 種類があり、どちらも同じ操作ができます。グループの追加は usermod -aG、効果は 新セッション で初めて見えます。
💡 具体的な手順
# 確認 id # 自分のユーザ・グループ ls -l ~/bin/hello # 現在の権限を 3×3 で読む stat ~/bin/hello # メタデータ全部 # 変える chmod 755 ~/bin/hello # 数字方式 chmod u+x ~/bin/hello # 記号方式 # 守る chmod 600 ~/bin/hello # 自分以外完全ブロック # グループ(種明かし・あなたは打たない) groups # → student adm を確認 # adm は管理者が付与済み: # sudo usermod -aG adm student (追加した本人の新セッションで反映)
✅ 答えを見る
# ① 誰が id # ② 読む ls -l ~/bin/hello # ③ inode ls -li ~/bin/hello stat ~/bin/hello # ④⑤⑥ 変える / 守る chmod 644 ~/bin/hello # 実行権限剥がす ~/bin/hello # → 許可がありません chmod u+x ~/bin/hello # 自分だけ実行可 ~/bin/hello # → こんにちは、... chmod 600 ~/bin/hello # 他人完全ブロック chmod 755 ~/bin/hello # 元に戻す # ⑦⑧ グループ(種明かし・あなたは打たない/adm は付与済み) groups # → student adm # 付与は管理者が: sudo usermod -aG adm student(追加した本人の新セッションで反映) # ⑨ 種明かしの結び head -3 /var/log/auth.log # adm メンバーなので読める
ポイント: ls -l は左から 種別 / user / group / others / chmod の数字は r=4 / w=2 / x=1 の足し算 / グループの効果は 新セッション で初めて見える
AI に相談
修了確認
学んだことが身についたか、2 問だけ確認してみましょう。
-rwxr-xr-- という権限表示について:① 所有者は何ができますか?
② グループメンバーは何ができますか?
③ その他は何ができますか?
④ これを 数字方式 で表すと何ですか?
sudo usermod -aG docker student で student を docker グループに追加しましたが、groups を打っても docker が出てきません。なぜですか? どう対処すればよいですか?次の章へ
次は Chapter 8「Part 1 修了演習」 です。
Chapter 1 〜 7 で習った内容(SSH / ファイル操作 / grep / vim / 環境変数 / 権限)を 1 つのシナリオに統合 して、実機サーバ上で総合演習を行います。Part 1 の卒業試験です。