『Linux標準教科書』を読み始めながら、学びを自分の言葉で整理した忘備録です。
標準教科書の内容についてChatGPTの対話で得た理解・補足をかみ砕いてまとめました。
本記事は全12章のうちの第7章。ユーザ・グループ周りについて、標準教科書を軸にしながらChatGPTとの会話を肉付けしていく形で整理したものになります。
学ぶ途中のつまずきや疑問もそのまま残す方針なので、同じところで悩む人の助けになればと思ってます!
6章と10章の内容も併せてご確認ください!
目次
ユーザ
ユーザが記述されたファイル
/etc/passwd(ユーザの基本情報)
形式:ユーザ名:パスワード欄:UID:GID:注釈(GECOS):ホームディレクトリ:ログインシェル
例:
alice:x:1001:1001:Alice,,,:/home/alice:/bin/bash
# x → 実際のハッシュは /etc/shadow に保存
主な用途:UID/GIDとホーム、ログインシェルの紐付けをOSに伝える
/etc/shadow(シャドウファイル)
各ユーザパスワードのハッシュやパスワード有効期限を格納(一般ユーザは読めない)
形式:ユーザ名:ハッシュ:最終変更日:最小日数:最大日数:警告日数:無効化日数:有効期限:予備
例:
alice:$y$j9T$...:20000:0:99999:7:::
# $y$... → yescrypt等のハッシュ。!や*でロックを示すことも
シャドウファイルとは?
セキュリティ強化のため、/etc/passwd からパスワード情報を分離して管理者のみ読めるファイルにしたもの。
/etc/login.defs(既定値)
UID/GID の範囲、パスワード有効期限など useradd の初期値を定義
例:CREATE_HOME の有無、PASS_MAX_DAYS など
新規作成
Ubuntuの要点
adduser:高レベルの対話コマンド。ホームを作成し、/etc/skelを展開するのが標準。useradd:低レベルコマンド。デフォルトのままだとホームを作らない(→-mを付ける)。
adduser(Ubuntu流・おすすめ)
sudo adduser alice
# 途中でパスワード等を対話設定
# 想定: /home/alice が作成され、/etc/skel の初期ファイルがコピーされる
useradd(スクリプト向け・厳密制御)
sudo useradd -m -s /bin/bash -U alice
# -m: ホーム作成, -s: シェル, -U: 同名のプライマリグループ
sudo passwd alice
# 想定: /home/alice が作られ、ログイン可能になる(鍵/パスワードいずれか必須)
チェック系
getent passwd alice
# 想定: alice:x:1001:1001:...:/home/alice:/bin/bash
id alice
# 想定: uid=1001(alice) gid=1001(alice) groups=1001(alice)
注意(演習で出たポイント)
UID 1001 is not unique:既存UIDと衝突。getent passwd 1001 で確認。
※useradd -u 1001 -o で重複UIDは技術的に可能だが非推奨。
削除
sudo userdel alice
# 想定: /etc/passwd 等のエントリが消えるが、ホームは残る
sudo userdel -r alice
# 想定: ホーム /home/alice も削除(重要データの扱いに注意)
編集(属性変更)
# ログインシェル変更
sudo usermod -s /bin/zsh alice
# 想定: /etc/passwd のシェル欄が /bin/zsh に
# 表示名(GECOS)変更
sudo chfn -f "Alice Example" alice
# 想定: /etc/passwd の注釈欄が更新
# 補助グループに追加(-aG の a を忘れない)
sudo usermod -aG sudo,docker alice
# 想定: id alice に groups=... sudo, docker が追加
# UID 変更(要計画)
sudo usermod -u 1101 alice
# 想定: 所有権移管が必要
sudo find / -xdev -uid 1001 -exec chown -h alice {} \;
パスワード
設定・変更・ロック
sudo passwd alice
# 想定: 対話で新パスワード設定 → /etc/shadow 更新
sudo passwd -l alice # ロック
sudo passwd -u alice # アンロック
sudo passwd -S alice # 状態確認(locked 等)
有効期限(パスワードエイジング)
sudo chage -l alice
# 想定: 最終変更日/最大日数/警告日数を一覧表示
sudo chage -M 90 -W 14 alice
# 想定: 90日で期限, 14日前から警告
Ubuntuのrootについて
-
初期状態では root はロック(パスワードなし)。
sudoで管理作業を行うのが前提。
sudo -i
# 想定: 一時的に root シェルへ
# どうしても su を使いたい場合のみ root にパスワード付与(非推奨)
sudo passwd root
su -
ログインユーザの変更
su / su -
su bob
# 想定: 非ログインシェルで bob に切替(bob のパスワードが必要)
su - bob
# 想定: bob に「ログインした体」(HOME, PATH 等も bob 仕様)
sudo(推奨)
sudo -u bob -i
# 想定: bob としてログインシェル開始(自分が sudoer であること)
sudo -u bob command
# 想定: bob の権限で 1 コマンドだけ実行
SSH
ssh bob@host
# 想定: bob のパスワード or 公開鍵で認証(authorized_keys を bob の HOME に配置)
ログインできない典型原因
-
パスワード未設定/ロック:
sudo passwd <user> -
無効なシェル:
/usr/sbin/nologinや/bin/false→usermod -s /bin/bash
グループ
グループが記述されたファイル
/etc/group
- 形式:
グループ名:パスワード欄:GID:メンバー,メンバー,... - 例:
developers:x:1002:alice,bob - 補助グループ(複数所属)にユーザを入れるときにここへ反映。
/etc/gshadow(グループのシャドウ)
-
/etc/groupの秘匿情報版(グループパスワード/管理者など)
新規作成
sudo groupadd developers
# 想定: /etc/group に developers:x:<新GID>: が追加
# GID を明示
sudo groupadd -g 1010 web
# 想定: GID 1010 の web グループ
ユーザを補助グループへ追加(よく使う)
sudo usermod -aG developers alice
# 想定: /etc/group の developers 行末に alice が追加
削除
sudo groupdel developers
# 想定: developers の行が /etc/group から削除
# ※ そのグループをプライマリにしているユーザがいる場合は不可
編集(属性変更)
# グループ名変更
sudo groupmod -n devs developers
# 想定: developers → devs にリネーム
# GID 変更
sudo groupmod -g 1102 devs
# 想定: GID が 1102 に変更(所有グループのファイル移管は手動で)