問題の説明
Linux インスタンスの PAM 設定が正しくないか、PAM モジュールファイルが見つからない場合、ログインできなくなることがあります。/var/log/secure で、以下のエラーメッセージを確認してください。
-
requirement "uid >= 1000" not met by user "xxxx" -
user xxxx (0) has 5 failed attempts, failed attempts threshold is 3 -
Refused user xxxx for service sshd -
PAM unable to dlopen(/usr/lib64/security/pam_lastlog.so): /usr/lib64/security/pam_lastlog.so: cannot open shared object file: No such file or directory
ソリューション
PAM 設定ファイルを変更するには、管理者アカウント (root や sudo 権限を持つユーザーなど) でインスタンスにログインする必要があります。
問題の特定
-
管理者として VNC 経由で ECS インスタンスにログインします。
-
[ECSコンソール - インスタンス] ページに移動します。 リージョンとリソースグループを選択します。
-
インスタンスの詳細ページで、接続 をクリックし、VNC を選択します。 ユーザー名とパスワードを入力してログインします。
-
-
認証ログで主要なエラーメッセージを確認します。
-
試行の失敗による アカウントロック : ログに
Maximum amount of failed attempts was reachedが含まれている場合、複数回のログオン試行の失敗後にアカウントがロックされます。 アカウントのロックを解除するsudo grep -i "Maximum amount of failed attempts" /var/log/secure -
ユーザーログオンが制限されています: ログに
requirement "uid >= 1000" not met by userが含まれている場合、ルールによって UID が 1000 未満のユーザーはログオンできなくなります。 UID 制限を削除する。sudo grep -i "not met by user" /var/log/secure -
ユーザーが拒否リストに登録されている:ログに
Refused userが含まれている場合、許可リストまたは拒否リストがユーザーアクセスを制御していることを示します。 ユーザーが拒否リストに登録されているか、許可リストに登録されていないため、許可リストまたは拒否リストを編集する必要があります。sudo grep -i "Refused user" /var/log/secure -
PAM モジュールファイルがありません: ログに
PAM unable to dlopenおよびNo such file or directoryが含まれている場合、システムが参照する PAM モジュールファイル (pam_lastlog.soなど) がありません。見つからない PAM モジュールを復元する必要があります。sudo grep -i "unable to dlopen" /var/log/secure
-
アカウントのロック解除
-
ログイン失敗回数を確認します。
<username>は該当するユーザー名に置き換えてください。sudo pam_tally2 -u <username>失敗した試行回数が 0 より大きい場合、アカウントはロックされています。
-
アカウントのロックを解除します。
sudo pam_tally2 -u <username> -r -
(任意) ロックポリシーを恒久的に無効化します。
/etc/pam.d/system-authを編集し、pam_tally2.soを含むルールをコメントアウトします。sudo vim /etc/pam.d/system-authこのルールは、3 回連続でパスワードを間違えると、通常アカウントと root アカウントの両方をロックし、50 秒後に自動的にロックを解除します。
auth required pam_tally2.so deny=3 unlock_time=50この例では、
pam_tally2モジュールを使用します。実際のモジュールは、PAM のバージョンによって異なる場合があります。「Linux-PAM システム管理者ガイド」をご参照ください。 -
再度インスタンスにログインし、ログインできることを確認します。
UID 制限の解除
-
設定ファイルを探します。
pam_succeed_ifを含む、/etc/pam.d/sshd、/etc/pam.d/login、または/etc/pam.d/system-authなどのファイルを検索します。sudo grep -r "pam_succeed_if" /etc/pam.d/ -
設定を変更します。
sudo vim /etc/pam.d/sshdauth required pam_succeed_if.so uid >= 1000の行頭に#を追加してコメントアウトします。# auth required pam_succeed_if.so uid >= 1000 -
再度インスタンスにログインし、ログインできることを確認します。
許可リストまたは拒否リストの変更
-
設定ファイルを探します。
/etc/pam.d/sshd、/etc/pam.d/login、または/etc/pam.d/system-authなど、pam_listfileを含むファイルを検索します。sudo grep -r "pam_listfile" /etc/pam.d/ -
設定を確認します。
sudo vim /etc/pam.d/sshdsenseパラメーターは、許可リスト (sense=allow) または拒否リスト (sense=deny) を示します。file=パラメーターには、/etc/ssh/whitelistや/etc/ssh/blacklistなどのファイルパスを指定します。# 許可リストが設定されています。 リスト内のユーザーのみがログインできます。 auth required pam_listfile.so item=user sense=allow file=/etc/ssh/whitelist onerr=fail # 拒否リストが設定されています。 リスト内のユーザーはログインできません。 auth required pam_listfile.so item=user sense=deny file=/etc/ssh/blacklist onerr=fail -
リストファイルを変更します。
-
許可リストの場合:新しい行にユーザー名を追加します。 保存して終了します。
sudo vim /etc/ssh/whitelist -
拒否リストの場合:対象のユーザー名を含む行を削除します。 保存して終了します。
sudo vim /etc/ssh/blacklist
-
-
再度インスタンスにログインし、ログインできることを確認します。
欠落した PAM モジュールの復元
-
欠落したモジュールを所有するパッケージを特定します。
診断レポートまたはシステムログには、不足しているモジュールのパス (例:
/usr/lib64/security/pam_lastlog.so) が指定されています。 次のコマンドを実行して、ファイルが属するパッケージを特定します。rpm -qfコマンドは RPM データベースを照会するため、ファイルがすでに存在しない場合でも機能します。rpm -qf /usr/lib64/security/pam_lastlog.so次のサンプル出力は、モジュールが
pamパッケージに属していることを示しています。pam-1.3.1-39.1.al8.x86_64また、
dnf provides "*/pam_lastlog.so"を実行して、所有パッケージを特定することもできます。 -
パッケージを再インストールして、欠落したモジュールファイルを復元します。
pamを、前の手順で特定したパッケージ名に置き換えます。sudo dnf reinstall pam -yCentOS 7 のように、パッケージマネージャーとして yum を使用するシステムでは、上記のコマンドの
dnfをyumに置き換えます。 -
モジュールが復元されたことを確認します。
ls -l /usr/lib64/security/pam_lastlog.soモジュールファイルが存在する場合、復元は完了です。
-
再度インスタンスにログインし、ログインできることを確認します。
復元後も、インスタンスの健全性診断は、復元前に生成された過去のエラーログに基づいてこの問題を報告する場合があります。 しばらく待ってから、再度診断を実行してください。