コンピューターサイエンス:アルゴリズム / OS / ネットワーク / DB
パーミッションと所有者
パーミッションと所有者
このレッスンで分かること
- UNIX 系 OS のファイルは 所有ユーザー(owner)、所有グループ(group)、その他(others) の 3 区分にそれぞれ 読み(r)・書き(w)・実行(x) の権限を持ちます
chmodchownで変更でき、ls -lで確認できます- 細粒度な制御が必要な場合は ACL(Access Control List)や capability に頼ります
パーミッションと所有者 とは
パーミッションと所有者。本レッスンでは、パーミッションと所有者 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
UNIX パーミッションとは (要約)
UNIX 系 OS のファイルには 所有者・所有グループ・その他 の 3 区分にそれぞれ r (読み) / w (書き) / x (実行) の権限を持たせます。
ls -l で rwxr-xr-- のように見え、chmod 644 のような 8 進数で設定できます。
用途別 mode 早見表
| シーン | 推奨 mode | 意味 |
|---|---|---|
| 一般的な公開ファイル (HTML, 画像) | 644 | 所有者書き、誰でも読み |
| 実行スクリプト (公開可) | 755 | 所有者書き、誰でも実行 |
| 秘密鍵・認証情報 | 600 | 所有者のみ読み書き |
| プロジェクトディレクトリ | 755 | 所有者書き、誰でも一覧 + cd |
| チーム共有ディレクトリ | 2775 | setgid 付きで同グループに継承 |
/tmp 系の共有ゴミ箱 | 1777 | sticky bit で他人のファイル削除を禁止 |
| 完全プライベートなホーム | 700 | 所有者のみアクセス |
基本の 9 ビット
ファイルやディレクトリには 9 つのアクセスフラグがあります。ls -l で表示される rwxr-xr-- の部分です。
| 区分 | ビット | 意味(ファイル) | 意味(ディレクトリ) |
|---|---|---|---|
| owner | r | 中身を読める | 中の名前一覧を読める |
| owner | w | 中身を書ける | 中にファイルを作成・削除できる |
| owner | x | 実行できる | 中に入れる(cd できる) |
| group | r/w/x | 上記と同じ(グループメンバー対象) | |
| others | r/w/x | 上記と同じ(誰でも) |
ディレクトリの x(実行ビット)は「中に入る権限」になる点に注意してください。読みだけ与えると ls はできても cd できません。
数字表記
8 進数 3 桁で表現できます。
| 数字 | 2 進数 | 意味 |
|---|---|---|
| 7 | 111 | rwx |
| 6 | 110 | rw- |
| 5 | 101 | r-x |
| 4 | 100 | r-- |
| 0 | 000 | --- |
ターミナル
chmod 755 script.sh # rwxr-xr-x(所有者だけ書き、誰でも読み・実行)
chmod 644 memo.txt # rw-r--r--(所有者だけ書き、誰でも読み)
chmod 600 secret.key # rw-------(所有者のみ読み書き)図解
所有者の変更
ターミナル
sudo chown alice memo.txt # 所有ユーザーを alice に
sudo chown alice:devs memo.txt # ユーザーとグループ両方
sudo chgrp devs memo.txt # グループのみ通常ユーザーは「自分のファイルでも他人に所有権を譲渡できない」点に注意してください。root 権限が必要です。
特殊ビット
3 つの特殊ビットが追加であります。
| ビット | 名前 | 効果 |
|---|---|---|
| 4xxx | setuid | 実行時に 所有者の権限 で動く |
| 2xxx | setgid | 実行時に 所有グループの権限 で動く |
| 1xxx | sticky | ディレクトリ内のファイルは所有者しか削除できない(/tmp で活用) |
ターミナル
ls -ld /tmp
# drwxrwxrwt 12 root root 4096 ...
# ^ sticky bit (t)/usr/bin/passwd は setuid root で、誰が起動しても一時的に root として実行され、/etc/shadow を書き換えられます。
ACL
POSIX 9 ビットでは粒度が足りない場面(特定ユーザーだけ書きを許す等)は ACL を使います。
ターミナル
setfacl -m u:bob:rw secret.txt
getfacl secret.txtNTFS と APFS は ACL がネイティブで、ext4 でも有効化できます。
具体例 (Web サーバー)
| ファイル | mode | 所有者 | 意図 |
|---|---|---|---|
/var/www/html | 755 | www-data:www-data | Web サーバーが読める |
/var/www/html/index.html | 644 | www-data:www-data | 公開ファイル |
/etc/nginx/ssl/private.key | 600 | root:root | 秘密鍵は root だけ |
/etc/passwd | 644 | root:root | ユーザー名は誰でも読める |
/etc/shadow | 640 | root:shadow | パスワードハッシュは root + shadow グループのみ |
トレードオフ
- 9 ビットモデルはシンプルで覚えやすい反面、組織が大きくなると グループの組合せ爆発 が起きます
- ACL は柔軟ですが、管理コストと「見落とし」のリスクが増えます
- 特権分離が極端になると、運用が複雑化して逆に「全部 root で動かそう」というアンチパターンが生まれます
よくある誤解
- 「
chmod 777で何でも動く」は危険な誤解で、世界中の誰でも書き換えられる状態を作るのは攻撃者を招くだけです - 「root なら何でもできる」は半分正解で、SELinux や AppArmor、Capability が有効な環境では root でも特定の操作は禁止されます
やってみよう
ターミナル
umask自分のシェルの umask 値(典型 022)を確認してください。これは「新規ファイルの初期パーミッションから引かれるマスク」で、022 なら新規ファイルは 644、ディレクトリは 755 になります。チーム作業用ディレクトリでは 002 にして同グループに書きを許す運用もあります。
まとめ
このレッスンの要点は、9 ビットモデル / 数字表記と特殊ビット / ACL と capability の 3 点です。実務でこれらを切り分けて説明できるようになると、設計レビューや障害対応の精度が一段上がります。
理解度チェック
Q. chmod 644 memo.txt の結果として正しい説明はどれ?
- 所有者だけが読み書き、グループとその他は何もできない
- 所有者は読み書き、グループとその他は読みのみ
- 全員が読み書き実行できる
- 所有者は実行のみ、グループとその他は読みのみ
答えを見る
正解は 2。6 = 110 (rw-)、4 = 100 (r--)。所有者が rw-、グループが r--、その他が r-- になります。実行ビット (x) は付かないので、スクリプトとしては動きません。
出典 (References)
最終更新: 2026-05-28
関連レッスン
よくある質問
Q. このトピックは実務でどう役立ちますか?
A. DB のクエリ最適化、API 設計、データ構造の選択など、設計判断の根拠になります。表面的にライブラリを使うだけでなく「なぜそれが速いのか」を理解できると、性能問題を未然に防げます。コーディング面接でも頻出のテーマです。
Q. 計算量はどう求めれば良いですか?
A. ループのネストごとに掛け算する、再帰なら漸化式から解く、というのが基本です。Big-O 表記は定数倍と低次の項を無視するため、n の指数(n²、n log n など)に注目してください。最悪・平均・最良の 3 つを意識すると説得力が増します。
Q. 覚えるべき定番アルゴリズムは何ですか?
A. 二分探索、クイックソート/マージソート、BFS/DFS、ダイクストラ、DP の基本問題(フィボナッチ・ナップサック)が必修です。これらを「白紙から書ける」状態にすると、応用問題が一気に解けるようになります。
次のレッスン
次は レースコンディション で、パーミッションと所有者 を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- パーミッション の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. パーミッション とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン