Linux入門:コマンド操作のきほん
ユーザーとグループの概念
このレッスンで分かること
- Linux はユーザーとグループの組み合わせでアクセス制御します
- UID 0 が root、1〜999 がシステム、1000 以降が一般ユーザー
- 確認は
whoamiidgroups、追加はusermod -aG グループ ユーザー
ユーザーとグループの概念 とは
Linuxにおけるユーザーとグループの概念を理解します。権限管理の基本を学びましょう。本レッスンでは、ユーザーとグループの概念 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
なぜ重要か
Linux はマルチユーザー OS として設計されており、1 台のサーバーに複数の利用者が同時にログインして作業できます。本番サーバーで複数人が触る場面、アプリケーションを専用ユーザーで動かす場面、ログを安全に共有する場面など、ユーザーとグループの仕組みを理解していないと「誰がどのファイルを読み書きできるのか」を制御できません。Web アプリケーションが www-data ユーザーで動く、データベースが postgres ユーザーで動く、開発者は自分のユーザーでログインしてデプロイする、といった役割分担はすべてこの仕組みの上に成り立っています。
グループは複数ユーザーをまとめて権限管理する単位です。たとえば developers グループに所属するユーザー全員が /srv/app を読めるように設定すれば、メンバー追加のたびにファイルごとの権限を書き換える必要はありません。
主要コマンド
| コマンド | 役割 |
|---|---|
whoami | 現在のユーザー名を表示 |
id | ユーザー ID とグループ ID、所属グループを表示 |
groups | 所属しているグループ一覧 |
cat /etc/passwd | システムに存在するユーザー一覧 |
cat /etc/group | システムに存在するグループ一覧 |
ユーザーとグループの関係
図の関係を箇条書きで整理すると、次の通りです。
aliceはdevelopersグループに所属bobはdevelopersとopsの両方に所属 (複数所属可)carolはopsに所属developersグループは/srv/appにアクセスできるopsグループは/var/log/appにアクセスできる
ユーザーは複数のグループに同時に所属できます。主たる所属先を プライマリグループ、追加で所属するものを セカンダリグループ と呼びます。新しく作ったファイルの所有グループはプライマリグループになります。
/etc/passwd の読み方
ターミナル
$ cat /etc/passwd | head -3
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologinコロン区切りで ユーザー名 / パスワード(x は影ファイル参照) / UID / GID / コメント / ホームディレクトリ / ログインシェル という構造です。UID 0 は root、1 から 999 まではシステムユーザー、1000 以降が一般ユーザーになるのが慣習です。
id コマンドの出力例
ターミナル
$ id
uid=1000(alice) gid=1000(alice) groups=1000(alice),27(sudo),100(users)ここから alice はプライマリグループが alice、セカンダリで sudo と users に所属していると読めます。sudo グループにいるかどうかが、後の章で扱う sudo コマンドを使えるかの判定に直結します。
システムユーザーとサービスユーザー
nginxやpostgresのようにサービス専用のユーザーが作られるのは、サービスがハッキングされた場合の被害を最小化するためです。一般ユーザーやサービスユーザーが乗っ取られても、root でない限りシステム全体を破壊することはできません。
この「最小権限の原則」は Linux 運用の基本姿勢で、後続レッスンの chmod や sudo の使い方にも一貫して影響します。
ユーザー追加コマンドの存在
本番環境では useradd alice や usermod -aG developers alice でユーザーを追加・グループに参加させます。本演習環境では実行できませんが、形だけ確認しておきましょう。
ターミナル
# 本番サーバーでの典型的な操作(演習環境では実行不可)
sudo useradd -m -s /bin/bash alice
sudo passwd alice
sudo usermod -aG developers alice「ユーザーとグループの設計は、その後のセキュリティ運用すべての土台になる」— 多くの本番障害は権限設計のミスが原因です。
UID と GID の数値設計
本番運用では UID / GID の数値設計も意外と重要です。Docker コンテナのボリュームマウントで、ホストとコンテナの UID がずれているとファイルにアクセスできなくなる事故がよく起こります。たとえばホスト側で UID 1000 が alice、コンテナ側で UID 1000 が nobody だと、マウントしたファイルの読み書きがちぐはぐになります。Dockerfile で USER を明示するか、docker run -u $(id -u):$(id -g) で UID を揃えるのが定番の回避策です。
ターミナル
# コンテナとホストの UID を揃えて起動する例
docker run --rm -u $(id -u):$(id -g) -v $(pwd):/work busybox ls -l /workグループに後から追加する
本番サーバーで「新しい開発者が入った」という場面では、既存ユーザーに対して usermod -aG でセカンダリグループに追加するのが定番です。-a を付け忘れると既存のグループ所属が全部置き換えられる事故になるので注意が必要です。
ターミナル
# alice を developers グループに追加(既存所属は維持)
sudo usermod -aG developers alice
# 反映は次回ログイン以降、または newgrp で即座に
newgrp developers
usermod -G developers aliceのように-aを付けないと、alice の所属グループがすべてdevelopers一つに置き換えられます。本人がログインできなくなる原因にもなるので、追加は必ず-aGで行います。
ここまでの要点
UID 0 = root、1-999 = システム、1000+ = 一般。プライマリ + セカンダリの複数グループ所属可。usermod -aG の -a を忘れない (既存所属が消える)。
まとめ
- Linux はユーザーとグループでアクセス制御する
whoamiidgroupsで自分の所属を確認する/etc/passwd/etc/groupがデータの実体- サービスごとに専用ユーザーを作るのが本番運用のセオリー
- グループにまとめることでメンバー管理が楽になる
- Docker や CI では UID / GID のずれに注意
usermod -aGで既存所属を壊さずグループ追加する
次のレッスン
次は パーミッションの読み方 で、Linuxにおけるユーザーとグループの概念を理解します を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- ユーザーとグループ の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. ユーザーとグループ とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン