⏱ 約 30 分
Part 1Chapter 07/Linux 基礎

ユーザとパーミッション

chmod の数字、rwx の 9 文字、グループ追加 ── Linux のすべてのファイルに刻まれた「誰が何をできるか」を読み解き、自分の手で書き換えられるようになります。

所要時間約 30 分
章タイプstandard
前提知識Chapter 1-6(SSH / ファイル操作 / vim / 環境変数)
使用機材踏み台 workstation01 + 演習用サーバ learner01
関連章前: Chapter 6「環境変数とシェルの仕組み」/ 後: Chapter 8「Part 1 修了演習」

chmod +x の正体」を解剖する

Chapter 6 の演習で、あなたはこんなコマンドを打ちました。

bash
chmod +x ~/bin/hello

何気なく打ったこの 1 行が、Linux の パーミッション(permission = 許可 / 日本語では「権限」)の入口です。chmodchange mode の略で、「mode = パーミッション」を変えるコマンドです。+x は「実行する許可を付ける」という意味で、これを忘れると hello が実行ファイルとして認識されません。

この章では 「パーミッション」と「権限」は同じ意味 として使います(章タイトルでは「パーミッション」、本文では文脈によって「権限」も)。Linux 公式ドキュメントでも file mode / permission / 権限 が混在しているので、両方の呼び方に慣れておくと、後の章や英語ドキュメントで困りません。

では、このパーミッションはどこに保存されていて、誰がどう読んでいるのでしょうか?

bash
ls -l ~/bin/hello
# → -rwxrwxr-x 1 student student 70  5月 16 09:35 /home/student/bin/hello

左端の -rwxrwxr-x という呪文。これが「ファイルに付いたパーミッション(権限)の表記」です。9 文字の中に 「誰が」「何を」「できるか」 がすべて詰まっています。

この章では、Linux の パーミッション(権限) ── つまり 「誰が・何を・できるか」を管理する仕組み を読み解きます。これを掴むと:

-rwxr-xr-- をひと目で読めるようになる
chmod 755chmod u+x2 つの書き方 が両方使える
・「権限のないファイル」が出てきたとき、自分でグループを変えて解決できる
・Part 3 以降の SSH 鍵 / nginx / PostgreSQL で出てくる「権限エラー」を恐れなくなる

この章を終えるとできること

パーミッションを扱う 4 動作 を手に覚えます。

$ id
uid=1003(student)
groups=1003(student)
① 誰が
id / groups で
自分の所属確認
id · groups
$ ls -l
-rwxr-xr--
3×3 で分解
② 読む
ls -l で
9 文字を分解
ls -l
$ chmod 755
$ chmod u+x
数字 / 記号 2 方式
③ 変える
chmod で権限を
付け外し
chmod
$ chmod 600
-rw-------
own のみ可
④ 守る
chmod 600 で
他人をブロック
chmod 600

この 4 動作が体になじむと、「Permission denied」がもう怖くなくなります。原因が即座に切り分けられて、自分で直せるからです。

概念説明

1. 「誰が」── ユーザとグループ

Linux では、すべてのプロセス・ファイルに 「誰のものか」 が紐づいています。これを管理する単位が ユーザグループ です。

bash
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 という別ユーザが sudoadm の 2 つの副グループに入っている場合、id の出力は以下のようになります:

bash · 副グループ持ちの例
id alice
# → uid=1000(alice) gid=1000(alice) groups=1000(alice),27(sudo),4(adm)
#                                         └──┬──┘    └──┬──┘ └─┬─┘
#                                         主グループ  副グループ  副グループ
#                                         (自分専用)   (sudo 可)  (ログ閲覧可)

副グループに入っているほど「できることが増える」 わけです。実はあなたの student も既に adm という副グループに入っていて、上のような複数グループ持ちの状態になっています(Chapter 4 で auth.log を読めたのは、このため)。なぜ入っているのかは、この章の後半で 種明かし します。

bash
whoami       # → student     (ユーザ名だけ)
groups       # → student     (副グループありなら複数表示される)

主グループと副グループ

種類役割個数定義場所
主グループ
(primary)
新規ファイル作成時に自動で付くグループ必ず 1 つ/etc/passwd の 4 番目 (gid)
副グループ
(secondary)
「ついでに所属している」グループ。アクセス権を広げる0 個以上/etc/group のメンバー欄
bash
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 との違い (読み飛ばし可)

観点LinuxWindows
主グループの概念必ず 1 つの主 + 複数の副フラット(主の概念なし)
新規ファイルの所有グループプロセスの 主グループ が自動付与親フォルダの ACL を継承
グループのネストしない(フラット)AD では「グループ of グループ」可
権限表現9 文字(-rwxr-xr--ACL(許可・拒否 / 継承 / 詳細)
グループ切替newgrp でセッション内切替可該当なし
データ保存/etc/passwd / /etc/groupSAM / Active Directory
Windows 経験者が引っかかるポイント: groups で 3 つ並んでいるのに、新規ファイルは 1 つにしか属さない ── これは「主グループだけが新規ファイルに自動で付く」ためです。

よく使う「特権グループ」── グループに入る = できることが増える

Linux では、特定のグループに所属することで、ある操作が許される という設計が広く使われています。代表例:

グループ役割入っていると
sudosudo 実行権限(Debian/Ubuntu 系)sudo で root 操作可
wheelsudo 実行権限(RHEL / AlmaLinux 系)同上(伝統的な名前)
adm管理者ログ閲覧/var/log/auth.log 等が読める
dockerDocker 操作docker コマンド使用可(実質 root 相当)
www-dataWeb サーバの実行ユーザnginx/Apache が読み書きするファイルの所有グループ
diskディスクデバイス直接アクセス/dev/sda 等が読める(取り扱い注意)
(参考コラム・読み飛ばし可) 重要な発想: 「sudo を使えるユーザ」は sudo グループに入っている人 という形で管理されています。/etc/sudoers を覗くと、その証拠が 1 行で書かれています:
/etc/sudoers
%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)で構成されています。

-rwxr-xr--
種別
user
(所有者)
group
(グループ)
others
(その他)
文字意味ファイルディレクトリ
r (read)読む内容を読めるls で一覧を見られる
w (write)書く編集できる中にファイルを作る・消せる
x (execute)実行プログラムとして実行可cd で入れる
-なし該当の権限なし

例: -rwxr-xr-- なら 所有者は全部 OK / グループは読と実行 / 他人は読むだけ。先頭の - は「通常ファイル」を表します(d ならディレクトリ、l ならシンボリックリンク)。

3. 「変える」── 数字と記号の 2 方式

chmodchange mode = ファイルの mode = パーミッションを変える)で権限を変えます。書き方は 2 通り あり、現場では両方使われます。

記号方式(部分的に変えたいとき)

bash · 記号方式
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 / auser / 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)。それぞれが オンなら足す / オフなら足さない だけです。

表記
r (4)
w (2)
x (1)
合計
rwx
4
2
1
7
rw-
4
2
0
6
r-x
4
0
1
5
r--
4
0
0
4
-wx
0
2
1
3
-w-
0
2
0
2
--x
0
0
1
1
---
0
0
0
0

この「3ビット数字」を user / group / others の 3 桁分 並べたものが chmod 755 の正体です:

chmod 755 の解読
chmod 755 file
        ↓
        7    5    5
       111  101  101
       rwx  r-x  r-x
       user group others
        ↓
       -rwxr-xr-x
bash · よく使うパターン
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 101755 と読める / その逆もできるようになります。

現場の使い分け: 「部分的に変えたい / 設定を残したい」→ 記号方式chmod +x で実行権限だけ追加)/ 「権限をひと言で全部決めたい」→ 数字方式chmod 755 ~/bin/myscript でスクリプト用)

4. 「守る」── 自分のファイルを他人から隠す

SSH 鍵やパスワードを書いたファイルは、他人から完全に隠す 必要があります。

bash · SSH 秘密鍵の典型
chmod 600 ~/.ssh/id_ed25519
ls -l ~/.ssh/id_ed25519
# → -rw------- 1 student student 411 ... id_ed25519

-rw------- = 自分だけ読み書き可、グループも他人もアクセス不可。

注意: SSH の鍵は権限がゆるいと SSH 側が 「鍵を読まない」 という安全装置を発動します。Part 3 で SSH 鍵を扱うときに再登場します。

5. コラム · 権限はどこに保存されている?(inode の話) (読み飛ばし可)

「ファイルの権限」は ファイル本体(中身)に書かれているわけではありません。Linux のファイルシステムでは、ファイルごとに inode という小さな台帳が用意されていて、そこに権限・所有者・タイムスタンプなどのメタデータが書かれています。

bash · 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 が書き換わります(その証拠に statChange タイムスタンプが更新される)。

※ ハードリンク / シンボリックリンクという「inode の使いまわし」の話は、Part 3 のサーバ運用編で詳しく扱います。

試してみよう:hello の権限を解剖し、adm の種明かしを見る

Chapter 6 で作った ~/bin/hello を題材に、前半で chmod変える・守る を体験し、後半で「なぜ Chapter 4 で auth.log が読めたのか」の 種明かし をします。

🛟 演習の安全範囲

触るのは ~/bin/hello の権限だけ。すべて元に戻せる操作です。ステップ ⑦〜⑨ は 種明かし(読むだけ) です。usermod などの管理コマンドを あなたが打つ必要はありませんadm は事前に付与済み)。

まず learner01 に入る

bash · workstation01 から SSH
ssh student@learner01

誰が ── 自分のユーザとグループを確認

bash
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 の権限を観察

bash
ls -l ~/bin/hello
# → -rwxrwxr-x 1 student student 70  5月 16 09:35 /home/student/bin/hello

Chapter 6 の chmod +xx が 3 箇所すべてに付いた のがここで確認できます。

inode を覗く ── 権限はどこに保存されているか

bash
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 で実行権限を剥がす

bash
chmod 644 ~/bin/hello
ls -l ~/bin/hello
# → -rw-r--r-- 1 student student ...

~/bin/hello
# → bash: /home/student/bin/hello: 許可がありません

実行権限がないと、シェルは「これは実行ファイルではない」と判断して拒否します。

変える(記号方式)── chmod u+x で自分だけ実行可能に

bash
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 で他人から完全ブロック

bash
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 はどう付与されたか

あなたが打つコマンドはありません(読むだけ)。あなたの studentadm に入っているのは、管理者が learner01 を準備したときに、下のコマンドを root 権限で実行したからです。自分のサーバを建てて誰かに権限を渡すときは、まさにこの手順を踏みます。仕組みを読んで理解しましょう。
bash · 種明かし(管理者が準備時に実行・あなたは打たない)
# ↓ 管理者が実行済み(あなたは打たない)
sudo usermod -aG adm student
# -a: 「追加 (append)」/ -G: 副グループ指定
# -a を忘れると既存の副グループを上書きする大事故になる

# ↓ あなたが確認できること(実行OK)
grep '^adm:' /etc/group
# → adm:x:4:syslog,student      ← student が既に入っている

反映のタイミング ── グループはログイン時に焼き付く

⚠ 要注意ポイント

グループ追加は 今開いているシェルには即座に反映されません。プロセスのグループメンバーシップは、ログイン時に決まるからです。あなたは adm付与済みの状態でログイン しているので、もう groups に出ています。一方、自分が今いるセッション中に新しく追加された場合は、いったん exit して再ログインするか、newgrp で切り替えるまで見えません。

bash · 確認
groups
# → student adm         ← ログイン時点で焼き付いている

もしあなた自身があとで別のグループに追加されたときは、その場の groups には出ません。exit → 再 SSH(=新セッション)で初めて反映されます。この落とし穴は 修了確認の問 2 で扱います。

種明かしの結び ── Chapter 4 で auth.log を読めた理由

/var/log/auth.log(認証ログ)は adm グループのメンバーしか読めない ファイルです。Chapter 4 であなたがこのログをスラスラ読めたのは、adm に入っていたからでした。実際に所有グループを確かめてみましょう。

bash
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
「グループに入っている」という状態が、ファイルへのアクセス権を広げている ── これがグループの実用例です。Part 3 以降のサーバ運用では、サービスごとに専用グループ(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 777chmod 644 ファイル(一般)or chmod 600 ファイル(鍵類)

詰まったら

💡 軽く方向だけ
-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 に相談

AI わからないところを自由に質問できます
この章の内容を踏まえて、Linux の基礎にやさしく答えます

修了確認

学んだことが身についたか、2 問だけ確認してみましょう。

問 1 · -rwxr-xr-- を分解する
-rwxr-xr-- という権限表示について:
所有者は何ができますか?
グループメンバーは何ができますか?
その他は何ができますか?
④ これを 数字方式 で表すと何ですか?
問 2 · グループ追加が反映されない
sudo usermod -aG docker student で student を docker グループに追加しましたが、groups を打っても docker が出てきません。なぜですか? どう対処すればよいですか?

次の章へ

次は Chapter 8「Part 1 修了演習」 です。

Chapter 1 〜 7 で習った内容(SSH / ファイル操作 / grep / vim / 環境変数 / 権限)を 1 つのシナリオに統合 して、実機サーバ上で総合演習を行います。Part 1 の卒業試験です。