ユーザ作成及びsudo設定

スポンサーリンク
RockyLinux
この記事は約21分で読めます。
ランキングに参加しています。応援よろしくお願いします。
ブログランキング・にほんブログ村へ 人気ブログランキングへ FC2ブログランキングへ
スポンサーリンク
この記事が気に入ったら
フォローしよう
最新情報をお届けします。

前回の「アップデート及び初期状態の確認」に続いて、Rocky Linux 9 サーバ構築手順の次のステップとして、「初期設定編」として以下の項目について設定を行います。

当ブログサイトを運用しているサーバは、「KAGOYA JAPAN」で提供されている「KAGOYA CLOUD VPS」を利用しています。

前提条件

  1. ユーザの追加
# useradd maruuser
  1. パスワードの設定
# passwd maruuser
Changing password for user maruuser.
New password:                    # 新しいパスワードを入力
Retype new password:             # 再度パスワードを入力
passwd: all authentication tokens updated successfully.

パスワード設定のベストプラクティス

  • 長さ: 8文字以上
  • 複雑性: 英数字と記号の組み合わせ
  • 一意性: 他のシステムと異なるパスワード
  • 定期変更: セキュリティポリシーに従った定期的な変更
useradd [オプション] ユーザー名

主要オプション:

  • -m : ホームディレクトリを作成(通常は自動作成される)
  • -s : ログインシェルを指定(例:-s /bin/bash
  • -g : プライマリグループを指定
  • -G : セカンダリグループを指定
  • -d : ホームディレクトリのパスを指定
  • -c : ユーザーのフルネームやコメントを追加
  1. ユーザをwheelグループに追加
# usermod -G wheel maruuser
  1. 設定確認
# id maruuser
uid=1001(maruuser) gid=1001(maruuser) groups=1001(maruuser),10(wheel)

出力の説明:

  • uid: ユーザID
  • gid: プライマリグループID
  • groups: 所属グループ一覧(wheelグループが追加されている)
# usermod [オプション] ユーザー名

主要オプション:

  • -G : セカンダリグループを指定(複数指定可能)
  • -a : グループを追加(-Gと組み合わせて使用)
  • -g : プライマリグループを変更
  • -s : ログインシェルを変更
  • -d : ホームディレクトリを変更
  • -l : ユーザー名を変更

注意点

  • -Gオプションのみを使用すると、既存のセカンダリグループから削除される
  • グループを追加する場合は-a -Gオプションを組み合わせる
  • 例:usermod -a -G wheel,users maruuser
  1. PAM設定ファイルの編集
# vi /etc/pam.d/su
  1. 以下の行のコメントアウトを削除して有効化

変更前:

#auth        required   pam_wheel.so use_uid

変更後:

auth        required   pam_wheel.so use_uid
設定項目効果セキュリティ上の利点
wheelグループ管理者権限を持つユーザーのグループ権限の一元管理
PAM設定wheelグループのメンバーのみsuコマンド使用可能権限昇格の制限

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 -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 [オプション] コマンド

主要オプション:

  • -l : 実行可能なコマンドを一覧表示
  • -U ユーザー名 : 指定ユーザーのsudo権限を確認
  • -u ユーザー名 : 指定ユーザーとしてコマンドを実行
  • -s : シェルを起動
  • -i : ログインシェルを起動(環境変数をリセット)
  • -v : sudo認証をリフレッシュ

Defaults entries(デフォルト設定):

設定項目説明
!visiblepwパスワード入力時の可視化無効(アスタリスクを表示しない)
always_set_homeHOMEディレクトリの設定を強制
match_group_by_gidグループIDでマッチング
env_reset環境変数のリセット
env_keep保持する環境変数の指定
secure_path安全なPATH設定

権限設定:

(ALL) ALL
  • 第1フィールド (ALL) : 実行可能なユーザー(ALLは全ユーザー)
  • 第2フィールド ALL : 実行可能なコマンド(ALLは全コマンド)

sudo権限の詳細設定は/etc/sudoersファイルで管理されています。

# visudo

主要な設定例:

# wheelグループのユーザーに全権限を付与
%wheel  ALL=(ALL)   ALL

# パスワード入力なしでsudo実行(セキュリティリスクあり)
%wheel  ALL=(ALL)   NOPASSWD: ALL

# 特定のコマンドのみ実行許可
username ALL=(ALL) /bin/systemctl, /usr/bin/dnf

visudoコマンドの重要性

  • /etc/sudoersファイルは直接編集せず、必ずvisudoコマンドを使用
  • 構文チェック機能により、設定ミスを防止
  • 複数人での同時編集を防止

作成したユーザーでログインし、sudo動作を確認します。

$ sudo whoami
[sudo] password for maruuser:
root

確認手順:

  1. 一般ユーザー「maruuser」でログイン
  2. sudo whoamiコマンドを実行
  3. パスワードを入力
  4. 「root」と表示されれば、sudo権限が正常に動作

使用していないユーザアカウントは削除することが重要です。特に初期セットアップ時に作成されたデフォルトユーザ(rockycentos等)は、適切に管理されていない場合、セキュリティリスクとなる可能性があります。

# 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

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

権限管理

  1. 最小権限の原則
    • 必要最小限のユーザーにのみsudo権限を付与
    • 定期的な権限見直し
  2. アクセス制御
    • 強力なパスワードポリシーの適用
    • 不要なアカウントの削除

監査とログ

  1. sudo使用ログ
    • /var/log/secureでsudo使用状況を確認
    • 不審なアクセスの監視
  2. 定期的な確認
# 現在のsudo権限ユーザー確認
# getent group wheel

# sudo使用履歴確認
# tail -f /var/log/secure | grep sudo

# sudo実行ログの確認
$ sudo journalctl -f | grep sudo

デフォルトユーザのリスク

使用されていないデフォルトユーザアカウントは以下のリスクがあります

  • 古いパスワード : 長期間変更されていないパスワード
  • 強力な権限 : NOPASSWD:ALLなどの不適切な権限設定
  • SSH公開鍵 : 管理されていない公開鍵によるリモートアクセス
  • 攻撃対象の拡大 : 複数のアカウントが攻撃者に選択肢を与える

よくある問題と解決方法

  1. sudo権限が機能しない
    • wheelグループの所属確認
    • PAM設定の確認
  2. パスワード認証に失敗
    • パスワードの再設定
    • アカウントロックの確認
  3. 環境変数が引き継がれない
    • sudoersファイルのenv_keep設定確認
  4. ユーザ削除後に問題が発生した場合
    # バックアップからユーザー情報を復元
    # 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
  5. 孤立ファイルの処理
    • ユーザ削除後に孤立ファイルが発見された場合
      # 孤立ファイルの詳細確認
      # find / -nouser -ls 2>/dev/null

      # 必要に応じて所有者を変更
      # find / -nouser -exec chown maruuser:maruuser {} \; 2>/dev/null

デフォルトユーザが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 [オプション] ユーザー名
# アカウントをロック(パスワードログイン無効化)
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
  • 既存ユーザーの権限変更
  • アカウントの一時的な無効化
  • ユーザー情報の更新
  • グループメンバーシップの変更
  • 完全にアカウントが不要
  • セキュリティリスクの排除
  • システムのクリーンアップ
  • 新規ユーザーアカウントの作成
  • システムアカウントの作成
# 現在のユーザー情報を確認
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設定が完了したら、次は以下の手順を実行します。

  1. SELinux無効化及び開発ツール設定
    • セキュリティ設定の調整
    • 開発環境の構築
    • 自動更新の設定
  2. SSH設定の強化
    • 公開鍵認証の設定
    • rootログインの無効化
  3. NTPサーバ設定
    • 時刻同期設定

これらの手順により、安全で管理しやすいLinuxサーバ環境を構築できます。

タイトルとURLをコピーしました