Linux入門:コマンド操作のきほん

ユーザーとグループの概念

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

このレッスンで分かること

  • Linux はユーザーとグループの組み合わせでアクセス制御します
  • UID 0 が root、1〜999 がシステム、1000 以降が一般ユーザー
  • 確認は whoami id groups、追加は usermod -aG グループ ユーザー

ユーザーとグループの概念 とは

Linuxにおけるユーザーとグループの概念を理解します。権限管理の基本を学びましょう。本レッスンでは、ユーザーとグループの概念 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

なぜ重要か

Linux はマルチユーザー OS として設計されており、1 台のサーバーに複数の利用者が同時にログインして作業できます。本番サーバーで複数人が触る場面、アプリケーションを専用ユーザーで動かす場面、ログを安全に共有する場面など、ユーザーとグループの仕組みを理解していないと「誰がどのファイルを読み書きできるのか」を制御できません。Web アプリケーションが www-data ユーザーで動く、データベースが postgres ユーザーで動く、開発者は自分のユーザーでログインしてデプロイする、といった役割分担はすべてこの仕組みの上に成り立っています。

グループは複数ユーザーをまとめて権限管理する単位です。たとえば developers グループに所属するユーザー全員が /srv/app を読めるように設定すれば、メンバー追加のたびにファイルごとの権限を書き換える必要はありません。

主要コマンド

コマンド役割
whoami現在のユーザー名を表示
idユーザー ID とグループ ID、所属グループを表示
groups所属しているグループ一覧
cat /etc/passwdシステムに存在するユーザー一覧
cat /etc/groupシステムに存在するグループ一覧

ユーザーとグループの関係

diagram (will load when visible)

図の関係を箇条書きで整理すると、次の通りです。

  • alicedevelopers グループに所属
  • bobdevelopersops の両方に所属 (複数所属可)
  • carolops に所属
  • 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、セカンダリで sudousers に所属していると読めます。sudo グループにいるかどうかが、後の章で扱う sudo コマンドを使えるかの判定に直結します。

システムユーザーとサービスユーザー

nginxpostgres のようにサービス専用のユーザーが作られるのは、サービスがハッキングされた場合の被害を最小化するためです。一般ユーザーやサービスユーザーが乗っ取られても、root でない限りシステム全体を破壊することはできません。

この「最小権限の原則」は Linux 運用の基本姿勢で、後続レッスンの chmodsudo の使い方にも一貫して影響します。

ユーザー追加コマンドの存在

本番環境では useradd aliceusermod -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 はユーザーとグループでアクセス制御する
  • whoami id groups で自分の所属を確認する
  • /etc/passwd /etc/group がデータの実体
  • サービスごとに専用ユーザーを作るのが本番運用のセオリー
  • グループにまとめることでメンバー管理が楽になる
  • Docker や CI では UID / GID のずれに注意
  • usermod -aG で既存所属を壊さずグループ追加する

次のレッスン

次は パーミッションの読み方 で、Linuxにおけるユーザーとグループの概念を理解します を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. ユーザーとグループ の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. ユーザーとグループ とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

参考リンク