メンテナンスが不十分なシステムのアカウントがロックアウトされている場合があります。問題は、アカウントをロックアウトするさまざまな方法があり、それぞれに独自のロック解除方法があることです。
アカウントが不適切に、予期せずにロックされているわけではありませんが、リセットする正しいロックを見つけるのは困難です。
この問題に対する最近の攻撃はSUSEシステムに対するもので、パスワードの有効期限が切れており(ログインの試行がそのようなフィードバックを提供するシステムを介して行われていないため、当初は不明でした)、その後ロックされましたログインに失敗したため。
考えられるすべての異なるアカウントロックのリストと、それらを無効にする方法はありますか?ホームディレクトリへのアクセスの問題、破損したPAMライブラリなど、実際の問題はこの質問の範囲外となることを意図しています。
passwd
を使用して、いくつかの情報を収集できます。アカウントがロックされている場合
passwd -S user
user LK 2012-11-06 0 99999 7 -1 (Password locked.) (CentOS)
user L 01/22/2013 0 99999 7 -1 (Ubuntu)
chage
ユーティリティは、アカウントのさまざまなタイマーに関する情報を提供します。期限が切れていないパスワードの場合
chage -l user
Last password change : Nov 12, 2012
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
期限切れのパスワード
chage -l user
Last password change : password must be changed
Password expires : password must be changed
Password inactive : password must be changed
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 22
Number of days of warning before password expires : 33
passwd
およびchage
ユーティリティも、アカウントロックの多くをリストします。
getent
を使用して、関連するデータベースから直接情報を取得し、調査することができます
getent passwd user
user:x:505:505::/home/passtest:/sbin/nologin <-- denied login
getent shadow user
user:!!:0:0:22:33:44:: <-- this is locked
一般的に:いいえ。
Iainの答えは、パスワードエージングシステムを照会する方法の良い要約ですが、あらゆる種類のものを逃しました。例えば:
sshd
構成のディレクティブによって禁止される可能性があります。PAM
構成では、ログインに明示的なグループメンバーシップが必要な場合や、特定のユーザーリストのみを許可する場合があります。/etc/nologin
を作成した可能性があります。これは、一部のアプリケーション(たとえば、ssh
)ですべてのユーザーをロックアウトします。言い換えると、passwd
ファイルとは何の関係もないアカウントがロックアウトされる多くの方法があります。あなたの最善の策は、/var/log/secure
または配布に適したローカルアナログをチェックすることです。
前述のpasswd
chage
とgetent
に加えて、pam_tally2
もあります。
ログイン試行の失敗回数が許容制限(/etc/pam.d/password-authで設定されている)を超える場合、再度ログインするには、pam_tally2 --user=foo --reset
を実行する必要があります。
次のスクリプトは、すべてのユーザーとそのステータス(ロックされているかどうか)の簡単な説明を提供します
cat /etc/passwd | cut -d : -f 1 | awk '{ system("passwd -S " $0) }'