第4章: ユーザーとグループ管理
4.1 この章で解説する主要な技術・概念
本章では、Linuxのマルチユーザー環境において欠かせない「ユーザーとグループ管理」をさらに詳細に解説します。セキュリティと利便性の両立を図るためにも、下記の要素を総合的に理解することが重要です。
- Linuxのユーザー・グループの基本構造
- /etc/passwd, /etc/shadow, /etc/group の役割
- ユーザーアカウントの高度な設定
- useradd, usermod, userdel のパラメータ活用
- UID/GIDの指定やパスワードポリシー
- グループ管理とアクセス制御
- groupadd, groupmod, groupdel の仕組み
- 補助グループ設定とファイル権限
- sudoの高度な設定
- /etc/sudoers と visudo
- 特定コマンドの制限や安全な管理方法
- パスワードポリシーとアカウントロック
- /etc/login.defs や pam_faillock での運用
- LDAPやSSSDを使った集中管理(概要)
- 小規模からエンタープライズ規模への拡張性
4.2 Linuxにおけるユーザーとグループの基本構造
4.2.1 /etc/passwd, /etc/shadow, /etc/group の役割
- /etc/passwd
- ユーザーアカウントの基本情報を保持するテキストファイル。
- 1行につき1ユーザー。ユーザー名、パスワードフィールド(x など)、UID、GID、コメント、ホームディレクトリ、ログインシェルをコロン区切りで記述。
- パスワードの平文やハッシュは含まれず、セキュリティのため参照専用。
例: alice:x:1001:1001:Alice User:/home/alice:/bin/bash
- /etc/shadow
- ユーザーのパスワードハッシュや有効期限など、機密度の高い情報を保持するファイル。
- rootのみが読み取り可能であり、一般ユーザーにはアクセス制限がかかっている。
- パスワードの有効期限管理(chageで設定)やパスワードの最終変更日などもここに記録される。
例: alice:$6$abcd1234$...:19123:0:99999:7:::
- /etc/group
- グループアカウントの情報を保持するファイル。
- グループ名、GID、グループ内のメンバーが記載される。
例: staff:x:1002:bob,alice
注:
最新のエンタープライズ環境では、LDAPやSSSDなど外部ディレクトリサービスを使うケースも多いが、基本情報は上記3つのファイルから継承される。
4.3 ユーザーアカウントの高度な設定
4.3.1 useradd の詳細オプション
sudo useradd [オプション] ユーザー名
-u
(UID): ユーザーのUIDを指定。既存と衝突しないように要注意。-g
(初期グループ): プライマリグループを指定。-G
(補助グループ): カンマ区切りで複数グループを指定可能。-d
(ホームディレクトリ): ホームディレクトリのパスを明示的に指定。-m
: ホームディレクトリを自動作成。-c
: GECOSフィールド(コメント)を指定。-s
: デフォルトのログインシェルを指定。-e
: アカウントの有効期限をYYYY-MM-DD形式で指定。-f
: パスワード期限切れ後の猶予日数を指定。
例:特定のUID/GIDと補助グループでユーザーを作成
sudo useradd -u 2001 -g developers -G qa -m -s /bin/bash -c "John Dev" john
sudo passwd john
- UID=2001、プライマリグループ=developers、補助グループ=qa
- ホームディレクトリ作成 + bashをログインシェルに指定
4.3.2 usermodとuserdel
- usermod
- ユーザーの設定変更に使用。
-l
でログイン名変更、-s
でシェル変更、-L/-U
でアカウントロック・解除など多彩なオプションがある。 -aG
オプションを使うと、既存の補助グループを上書きせずに追加できる。
sudo usermod -aG wheel john
などでjohnを管理者グループ(wheel)に追加。
- userdel
- ユーザーアカウントの削除。
-r
をつけるとホームディレクトリやメールスプールまで削除する。
sudo userdel -r john
- 誤って削除した場合はデータが復元困難なので、特に本番サーバーで使用するときは注意。
4.3.3 UID/GIDの管理方針
UID/GID の衝突を防ぐため、企業内のポリシーによって「ユーザーUIDは10000〜19999」「サービスアカウントは500〜999」など範囲を定めておくと混乱が減る。
systemdや特定デーモンが使用するUID/GIDはあらかじめ予約されているため、カスタム設定時は競合しないよう確認が必要。
4.4 グループ管理とアクセス制御
4.4.1 groupadd, groupmod, groupdel
sudo groupadd -g 3001 devops
sudo groupmod -n devteam devops
sudo groupdel devteam
-g
でGIDを指定-n
でグループ名を変更
4.4.2 補助グループ設定とファイル権限
ユーザーが複数のグループに所属すると、ファイルやディレクトリに「グループ権限 (g)」を付与した際に、該当ユーザー全員がその権限を得られる。
これはプロジェクト単位でディレクトリを共有するときなどに有効。
# usermodで追加の補助グループを設定 (既存グループを上書きしないようにaオプションを付ける)
sudo usermod -aG webproject alice
# /var/www/proj ディレクトリのグループをwebprojectに変更
sudo chown :webproject /var/www/proj
sudo chmod 2770 /var/www/proj
2
(setgidビット) を付与することで、ディレクトリに作成されるファイルが自動的にwebproject
グループになる。
4.5 sudoの高度な設定
4.5.1 /etc/sudoersとvisudo
sudo visudo
visudo
コマンドは、/etc/sudoers
の文法ミスを防ぎ、万が一のエラーによるroot権限喪失を回避するために必ず使う。
sudoersファイル構造の基本
User_Alias ADMINS = alice, bob
Cmnd_Alias WEB_CMDS = /bin/systemctl restart httpd, /bin/systemctl status httpd
ADMINS ALL=(ALL) ALL
developers ALL=(ALL) NOPASSWD: WEB_CMDS
- User_Alias: ユーザーの別名を定義
- Cmnd_Alias: コマンドの別名を定義
ADMINS ALL=(ALL) ALL
: ADMINSグループのユーザーは、すべてのホスト、すべてのユーザー権限で、すべてのコマンドを実行できる。developers ALL=(ALL) NOPASSWD: WEB_CMDS
: developersグループのユーザーは、指定したコマンドのみをパスワード入力なしで実行可能。
注:
sudo su -
やsudo -i
などでrootシェルに入れる権限を付与すると、事実上なんでもできてしまうため、必要最小限のコマンド許可に留めることでセキュリティを高められる。
4.5.2 sudoのログと監査
/var/log/secure
やjournalctl -u sudo
を確認すると、誰がいつsudoを利用したかの履歴が残る。- sudoersログをSplunkやElastic Stackに送って監査する企業も多い。
4.6 パスワードポリシーとアカウント保護
4.6.1 /etc/login.defsとパスワード有効期限
/etc/login.defs
で新規ユーザー作成時のデフォルトポリシーを決定できる。
PASS_MAX_DAYS 90
PASS_MIN_LEN 12
PASS_WARN_AGE 7
PASS_MAX_DAYS
: パスワード有効期限。90日に設定すると、90日経過後にパスワードが失効する。PASS_MIN_LEN
: パスワードの最小文字数。PASS_WARN_AGE
: パスワード失効前に警告を出す日数。
4.6.2 chageコマンド
sudo chage -l alice # 現在のパスワード期限設定を表示
sudo chage -M 60 alice # 60日に変更
sudo chage -E 2025-12-31 bob # アカウント有効期限を2025年末までに設定
-M
: パスワード最大使用日数-E
: アカウントそのものの有効期限
4.6.3 pam_faillockによるアカウントロック
pam_faillock
短時間で複数回の認証失敗があると、一定時間アカウントをロックする仕組みを実現。ブルートフォース攻撃の緩和に有効。
/etc/pam.d/system-auth
や /etc/pam.d/password-auth
に設定例:
auth required pam_faillock.so preauth audit silent deny=5 unlock_time=600
auth [success=1 default=bad] pam_unix.so
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=600
account required pam_faillock.so
deny=5
: 5回連続失敗でロックunlock_time=600
: 600秒(10分)後に自動解除
4.7 LDAPやSSSDを使った集中管理(概要)
4.7.1 LDAPによるユーザー管理
LDAP (Lightweight Directory Access Protocol) サーバーを用い、ユーザー情報を一元管理する。企業や大規模環境では、Windows Active DirectoryやOpenLDAP、389 Directory Serverなどでユーザー情報を集約するケースが多い。
- ユーザーが増えてもUID/GID重複を防ぎやすい
- パスワードやアカウント情報を全サーバーで共有するため、運用がシンプル化
4.7.2 SSSD (System Security Services Daemon)
SSSD
LDAPやActive Directoryなど外部ディレクトリサービスと連携し、ユーザー認証やグループ情報をキャッシュ管理する仕組み。オフライン時のキャッシュ機能や複数バックエンド対応が特長。
sudo dnf install sssd
sudo systemctl enable sssd
sudo systemctl start sssd
/etc/sssd/sssd.conf
に接続先LDAP/AD情報などを設定- nsswitch.conf や pam設定を変更してSSSD経由でユーザー情報を取得できるようにする
注: 詳細なLDAP/SSSD設定は本書の範囲を超えるため概要紹介に留めるが、エンタープライズ環境ではほぼ必須の知識となる。
4.8 学習のまとめ
- Linuxユーザー管理の基本構造: /etc/passwd, /etc/shadow, /etc/group の3つのファイルと、それぞれの役割を理解する。
- ユーザーアカウントの高度な設定: useraddでUID/GIDやホームディレクトリを制御し、usermodでアカウントのロックやグループ追加を行う。競合や削除時のリスクに注意。
- グループ管理: groupadd, groupmod, groupdel を使いこなし、補助グループやsetgidディレクトリを活用して効率的にアクセス制御を行う。
- sudo設定: /etc/sudoers による細やかなコマンド制限やログ管理を行い、安全にroot権限を委譲する。
- パスワードポリシーとアカウント保護: /etc/login.defs や pam_faillock でパスワード期限、失敗回数によるロックなどを設定し、セキュリティを高める。
- LDAP/SSSD連携(概要): 大規模環境ではローカルファイルだけでなく、外部ディレクトリサービスを用いた集中管理が一般的。
次章へのつながり
次の章(第5章)では、AlmaLinux 9でのパッケージ管理とソフトウェアのインストールをさらに深く掘り下げます。DNFコマンドやリポジトリ管理、EPELやモジュールストリームなどを活用し、必要なアプリケーションを効率的かつ安全に導入する手法を学びましょう。