◆はじめに
前回の「アップデート及び初期状態の確認」に続いて、Rocky Linux 9 サーバ構築手順の次のステップとして、「初期設定編」として以下の項目について設定を行います。
◆環境情報
当ブログサイトを運用しているサーバは、「KAGOYA JAPAN」で提供されている「KAGOYA CLOUD VPS」を利用しています。
◆初期設定
・一般ユーザ作成
前提条件
ユーザ作成手順
- ユーザの追加
# useradd maruuser
- パスワードの設定
# passwd maruuser
Changing password for user maruuser.
New password: # 新しいパスワードを入力
Retype new password: # 再度パスワードを入力
passwd: all authentication tokens updated successfully.
パスワード設定のベストプラクティス
useraddコマンドの主要オプション
useradd [オプション] ユーザー名
主要オプション:
-m
: ホームディレクトリを作成(通常は自動作成される)-s
: ログインシェルを指定(例:-s /bin/bash
)-g
: プライマリグループを指定-G
: セカンダリグループを指定-d
: ホームディレクトリのパスを指定-c
: ユーザーのフルネームやコメントを追加
・管理者用一般ユーザ設定
wheelグループへの追加
- ユーザをwheelグループに追加
# usermod -G wheel maruuser
- 設定確認
# id maruuser
uid=1001(maruuser) gid=1001(maruuser) groups=1001(maruuser),10(wheel)
出力の説明:
uid
: ユーザIDgid
: プライマリグループIDgroups
: 所属グループ一覧(wheelグループが追加されている)
usermodコマンドの主要オプション
# usermod [オプション] ユーザー名
主要オプション:
-G
: セカンダリグループを指定(複数指定可能)-a
: グループを追加(-G
と組み合わせて使用)-g
: プライマリグループを変更-s
: ログインシェルを変更-d
: ホームディレクトリを変更-l
: ユーザー名を変更
注意点
su制限の設定
- PAM設定ファイルの編集
# vi /etc/pam.d/su
- 以下の行のコメントアウトを削除して有効化
変更前:
#auth required pam_wheel.so use_uid
変更後:
auth required pam_wheel.so use_uid
設定の意味と効果
設定項目 | 効果 | セキュリティ上の利点 |
---|---|---|
wheelグループ | 管理者権限を持つユーザーのグループ | 権限の一元管理 |
PAM設定 | wheelグループのメンバーのみsuコマンド使用可能 | 権限昇格の制限 |
PAM(Pluggable Authentication Modules)について
PAMは認証処理を柔軟に設定できるシステムです。
PAMの主要設定ファイル
/etc/pam.d/su
: suコマンドの認証設定/etc/pam.d/sudo
: sudoコマンドの認証設定/etc/pam.d/login
: ログイン認証設定/etc/pam.d/passwd
: パスワード変更時の認証設定
PAM設定の構文
タイプ 制御フラグ モジュール 引数
auth required pam_wheel.so use_uid
- タイプ :
auth
(認証)、account
(アカウント)、password
(パスワード)、session
(セッション) - 制御フラグ :
required
(必須)、optional
(任意)、sufficient
(十分) - モジュール : 実際の認証処理を行うモジュール
- 引数 : モジュールに渡すパラメータ
・sudo設定確認
確認コマンド:
# sudo -l -U maruuser
確認結果の例:
# sudo -l -U maruuser
Matching Defaults entries for maruuser on v133-18-226-221:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY
HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC
LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User maruuser may run the following commands on v133-18-226-221:
(ALL) ALL
各行の説明:
1行目:sudo -l -U maruuser
でユーザー「maruuser」のsudo権限を確認
2行目以降:sudo実行時のデフォルト設定が表示
最下行:(ALL) ALL
は全てのコマンドを全てのユーザーとして実行可能
sudoコマンドの主要オプション
# sudo [オプション] コマンド
主要オプション:
-l
: 実行可能なコマンドを一覧表示-U ユーザー名
: 指定ユーザーのsudo権限を確認-u ユーザー名
: 指定ユーザーとしてコマンドを実行-s
: シェルを起動-i
: ログインシェルを起動(環境変数をリセット)-v
: sudo認証をリフレッシュ
sudoの設定詳細解説
Defaults entries(デフォルト設定):
設定項目 | 説明 |
---|---|
!visiblepw | パスワード入力時の可視化無効(アスタリスクを表示しない) |
always_set_home | HOMEディレクトリの設定を強制 |
match_group_by_gid | グループIDでマッチング |
env_reset | 環境変数のリセット |
env_keep | 保持する環境変数の指定 |
secure_path | 安全なPATH設定 |
権限設定:
(ALL) ALL
- 第1フィールド
(ALL)
: 実行可能なユーザー(ALLは全ユーザー) - 第2フィールド
ALL
: 実行可能なコマンド(ALLは全コマンド)
sudo設定ファイル(/etc/sudoers)
sudo権限の詳細設定は/etc/sudoers
ファイルで管理されています。
# visudo
主要な設定例:
# wheelグループのユーザーに全権限を付与
%wheel ALL=(ALL) ALL
# パスワード入力なしでsudo実行(セキュリティリスクあり)
%wheel ALL=(ALL) NOPASSWD: ALL
# 特定のコマンドのみ実行許可
username ALL=(ALL) /bin/systemctl, /usr/bin/dnf
visudoコマンドの重要性
一般ユーザーでのsudo動作確認
作成したユーザーでログインし、sudo動作を確認します。
$ sudo whoami
[sudo] password for maruuser:
root
確認手順:
- 一般ユーザー「maruuser」でログイン
sudo whoami
コマンドを実行- パスワードを入力
- 「root」と表示されれば、sudo権限が正常に動作
・不要ユーザの削除
使用していないユーザアカウントは削除することが重要です。特に初期セットアップ時に作成されたデフォルトユーザ(rocky
、centos
等)は、適切に管理されていない場合、セキュリティリスクとなる可能性があります。
事前確認作業
アカウントの使用状況確認
# rockyユーザが所有するファイルの確認
# find / -user rocky -type f 2>/dev/null | head -20
/home/rocky/.bash_logout
/home/rocky/.ssh/authorized_keys
/home/rocky/.bashrc
/home/rocky/.bash_history
/home/rocky/.bash_profile
# rockyユーザのプロセス確認
# ps -u rocky
PID TTY TIME CMD
# crontab確認
# crontab -u rocky -l
no crontab for rocky
# systemdサービスでの使用確認
# grep -r "User=rocky" /etc/systemd/
# パスワード情報の確認
# chage -l rocky
Last password change : Nov 28, 2022
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 9999
Number of days of warning before password expires : 7
# sudo権限の確認
# grep rocky /etc/sudoers /etc/sudoers.d/*
/etc/sudoers.d/90-cloud-init-users:# User rules for rocky
/etc/sudoers.d/90-cloud-init-users:rocky ALL=(ALL) NOPASSWD:ALL
/etc/sudoers.d/90-cloud-init-users:# User rules for rocky
/etc/sudoers.d/90-cloud-init-users:rocky ALL=(ALL) NOPASSWD:ALL
/etc/sudoers.d/90-cloud-init-users:# User rules for rocky
/etc/sudoers.d/90-cloud-init-users:rocky ALL=(ALL) NOPASSWD:ALL
/etc/sudoers.d/90-cloud-init-users:# User rules for rocky
/etc/sudoers.d/90-cloud-init-users:rocky ALL=(ALL) NOPASSWD:ALL
/etc/sudoers.d/90-cloud-init-users:# User rules for rocky
/etc/sudoers.d/90-cloud-init-users:rocky ALL=(ALL) NOPASSWD:ALL
/etc/sudoers.d/90-cloud-init-users:# User rules for rocky
/etc/sudoers.d/90-cloud-init-users:rocky ALL=(ALL) NOPASSWD:ALL
現在のログイン状況確認
# SSH接続の確認
# authorized_keysの内容確認
# cat /home/rocky/.ssh/authorized_keys
# 現在のSSH接続状況確認
# ss -tuln | grep :22
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 128 [::]:22 [::]:*
# who
# 現在のユーザー確認
# whoami
重要
削除対象ユーザでログインしている場合は、別のユーザーでログインし直してから作業を行ってください。
削除手順
アカウントの無効化
アカウントを無効化し、数日間システムが正常動作することを確認します。
または、アカウントの削除が困難な場合は、代替案として無効化します。
# ログインを無効化
# usermod -L rocky
# usermod -s /sbin/nologin rocky
# アカウント有効期限を過去に設定
# usermod -e 1 rocky
# sudo権限を削除
# gpasswd -d rocky wheel
システム設定のバックアップ
# ユーザー関連ファイルのバックアップ
# cp /etc/passwd /etc/passwd.backup.$(date +%Y%m%d)
# cp /etc/group /etc/group.backup.$(date +%Y%m%d)
# cp /etc/shadow /etc/shadow.backup.$(date +%Y%m%d)
# ホームディレクトリのバックアップ
# tar -czf /tmp/rocky_backup_$(date +%Y%m%d_%H%M).tar.gz /home/rocky
cloud-init設定の修正
Rocky LinuxやCentOSでは、cloud-initによって作成されたsudoers設定が残っている場合があります。
# cloud-init設定ファイルのバックアップ
# cp /etc/sudoers.d/90-cloud-init-users /etc/sudoers.d/90-cloud-init-users.backup
# 不要ユーザの設定を削除
# sed -i '/rocky/d' /etc/sudoers.d/90-cloud-init-users
# 結果確認
# cat /etc/sudoers.d/90-cloud-init-users
ユーザ削除の実行
# ユーザとホームディレクトリを削除
# userdel -r rocky
# 対応するグループも削除(存在する場合)
# groupdel rocky 2>/dev/null || echo "Group rocky does not exist"
削除後の確認
# ユーザー削除の確認
# id rocky 2>/dev/null || echo "User rocky successfully deleted"
# 孤立ファイルの確認
# find / -nouser -o -nogroup 2>/dev/null | head -10
# sudoers設定の構文チェック
# visudo -c
# SSH設定の確認
# grep -i rocky /etc/ssh/sshd_config
# システムの動作確認
# systemctl status sshd
・セキュリティ上の注意事項
権限管理
- 最小権限の原則
- 必要最小限のユーザーにのみsudo権限を付与
- 定期的な権限見直し
- アクセス制御
- 強力なパスワードポリシーの適用
- 不要なアカウントの削除
監査とログ
- sudo使用ログ
/var/log/secure
でsudo使用状況を確認- 不審なアクセスの監視
- 定期的な確認
# 現在のsudo権限ユーザー確認
# getent group wheel
# sudo使用履歴確認
# tail -f /var/log/secure | grep sudo
# sudo実行ログの確認
$ sudo journalctl -f | grep sudo
デフォルトユーザのリスク
使用されていないデフォルトユーザアカウントは以下のリスクがあります
- 古いパスワード : 長期間変更されていないパスワード
- 強力な権限 :
NOPASSWD:ALL
などの不適切な権限設定 - SSH公開鍵 : 管理されていない公開鍵によるリモートアクセス
- 攻撃対象の拡大 : 複数のアカウントが攻撃者に選択肢を与える
◆トラブルシューティング
よくある問題と解決方法
- sudo権限が機能しない
- wheelグループの所属確認
- PAM設定の確認
- パスワード認証に失敗
- パスワードの再設定
- アカウントロックの確認
- 環境変数が引き継がれない
- sudoersファイルのenv_keep設定確認
- ユーザ削除後に問題が発生した場合
# バックアップからユーザー情報を復元
# cp /etc/passwd.backup.$(date +%Y%m%d) /etc/passwd
# cp /etc/group.backup.$(date +%Y%m%d) /etc/group
# cp /etc/shadow.backup.$(date +%Y%m%d) /etc/shadow
# ホームディレクトリを復元
# cd /tmp
# tar -xzf rocky_backup_*.tar.gz
# mv home/rocky /home/
# sudoers設定を復元
# cp /etc/sudoers.d/90-cloud-init-users.backup /etc/sudoers.d/90-cloud-init-users - 孤立ファイルの処理
- ユーザ削除後に孤立ファイルが発見された場合
# 孤立ファイルの詳細確認
# find / -nouser -ls 2>/dev/null
# 必要に応じて所有者を変更
# find / -nouser -exec chown maruuser:maruuser {} \; 2>/dev/null
- ユーザ削除後に孤立ファイルが発見された場合
◆補足
・systemd-journalグループについて
デフォルトユーザがsystemd-journal
グループに所属している場合、新しい管理ユーザーにも同じ権限を付与することを検討します。
# 現在のグループ確認
# groups maruuser
# systemd-journalグループに追加
# usermod -a -G systemd-journal maruuser
# ログ閲覧権限の確認
$ journalctl -n 10
この権限により、以下のようなシステム管理に必要なログ監視が可能になります。
# Webサーバーのログ監視
$ journalctl -u nginx -f
# データベースのログ確認
$ journalctl -u mariadb --since "1 hour ago"
# エラーレベルのログ抽出
$ journalctl -p err --since today
・usermodコマンドの詳細
usermod
コマンドは、既存ユーザーアカウントの設定を変更するための重要なコマンドです。ユーザー削除の代替手段としてアカウント無効化を行う際や、一般的なユーザー管理で頻繁に使用されます。
基本構文
usermod [オプション] ユーザー名
主要オプション一覧
アカウント制御関連
# アカウントをロック(パスワードログイン無効化)
sudo usermod -L username
# アカウントのロックを解除
sudo usermod -U username
# ログインシェルを変更(ログイン無効化)
sudo usermod -s /sbin/nologin username
sudo usermod -s /bin/false username
# アカウント有効期限を設定(YYYY-MM-DD形式)
sudo usermod -e 2024-12-31 username
# アカウント有効期限を無効化(無期限)
sudo usermod -e "" username
ユーザー情報変更
# ユーザー名を変更
sudo usermod -l new_username old_username
# ユーザーID(UID)を変更
sudo usermod -u 1001 username
# コメント(フルネーム等)を変更
sudo usermod -c "New Full Name" username
# ホームディレクトリを変更
sudo usermod -d /new/home/path username
# ホームディレクトリを移動
sudo usermod -d /new/home/path -m username
グループ管理
# プライマリグループを変更
sudo usermod -g newgroup username
# セカンダリグループを追加(既存グループは保持)
sudo usermod -a -G group1,group2 username
# セカンダリグループを置き換え(既存グループは削除)
sudo usermod -G group1,group2 username
# 特定のグループから削除
sudo gpasswd -d username groupname
実用的な使用例
セキュリティ強化の例
# 不要ユーザーの段階的無効化
sudo usermod -L rocky # パスワードロック
sudo usermod -s /sbin/nologin rocky # シェルログイン無効
sudo usermod -e 1 rocky # アカウント期限切れ設定
ユーザー権限管理の例
# Webサーバー管理者にNginxグループを追加
sudo usermod -a -G nginx webadmin
# システム管理者に複数グループを一括追加
sudo usermod -a -G wheel,systemd-journal,docker sysadmin
# 開発者ユーザーのホームディレクトリ変更
sudo usermod -d /var/www/html/dev -m developer
ユーザー情報の更新例
# システム管理者の情報を更新
sudo usermod -c "System Administrator" -s /bin/bash admin
# サービスアカウントの設定
sudo usermod -s /sbin/nologin -d /var/lib/myservice serviceuser
usermodとuserdel/useraddとの使い分け
usermod(修正)を使う場面
- 既存ユーザーの権限変更
- アカウントの一時的な無効化
- ユーザー情報の更新
- グループメンバーシップの変更
userdel(削除)を使う場面
- 完全にアカウントが不要
- セキュリティリスクの排除
- システムのクリーンアップ
useradd(追加)を使う場面
- 新規ユーザーアカウントの作成
- システムアカウントの作成
注意事項とベストプラクティス
実行前の確認
# 現在のユーザー情報を確認
id username
groups username
sudo chage -l username
# 変更前の設定をバックアップ
sudo cp /etc/passwd /etc/passwd.backup
sudo cp /etc/group /etc/group.backup
実行後の確認
# 変更結果の確認
id username
groups username
# ログインテスト(別ターミナルで)
su - username
ssh username@localhost
よくある注意点
グループ追加時の注意:
# ❌ 間違い: 既存グループが削除される
sudo usermod -G newgroup username
# ✅ 正しい: 既存グループを保持して追加
sudo usermod -a -G newgroup username
ホームディレクトリ移動時の注意:
# ❌ 間違い: ディレクトリは移動されない
sudo usermod -d /new/path username
# ✅ 正しい: -mオプションでディレクトリも移動
sudo usermod -d /new/path -m username
セキュリティ設定の実例
段階的なアカウント無効化
# 段階1: パスワードログインを無効化
sudo usermod -L suspicious_user
# 段階2: シェルアクセスを無効化
sudo usermod -s /sbin/nologin suspicious_user
# 段階3: アカウント自体を期限切れに
sudo usermod -e 1 suspicious_user
# 最終段階: 完全削除
sudo userdel -r suspicious_user
権限の段階的付与
# 新入社員: 基本権限のみ
sudo usermod -a -G users newemployee
# 昇進後: 追加権限を付与
sudo usermod -a -G developers,systemd-journal newemployee
# 管理者昇格: 管理者権限を付与
sudo usermod -a -G wheel newemployee
usermod
コマンドを適切に使用することで、アカウントの完全削除を行わずに柔軟なユーザー管理が可能になります。特にセキュリティが懸念される場合は、段階的なアプローチを取ることで、問題が発生した際の復旧も容易になります。
◆次のステップ
ユーザー作成とsudo設定が完了したら、次は以下の手順を実行します。
- SELinux無効化及び開発ツール設定
- セキュリティ設定の調整
- 開発環境の構築
- 自動更新の設定
- SSH設定の強化
- 公開鍵認証の設定
- rootログインの無効化
- NTPサーバ設定
- 時刻同期設定
これらの手順により、安全で管理しやすいLinuxサーバ環境を構築できます。