【まとめ】Linuxのアカウントロックの種類と解除方法

概要・環境

Linuxにはさまざまなユーザロックアウトの種類があります。

それぞれのユーザロックアウトについての設定方法と、解除方法を本記事でまとめます。

本記事で使用する環境は「Cent OS 7」となります。

ユーザロックアウトの種類

ユーザーのロックアウトには、大きく分けて3種類あります。

パスワード誤りでロックアウト

そのままの通り、サーバにログインするときにパスワードを誤った回数が上限を超えたとき、ユーザをロックアウトすることです。

長期ログイン無しでロックアウト

一定期間ログイン履歴がなかった場合、ユーザをロックアウトします。言い換えれば、非アクティブ期間以上ログインがなかった場合、ユーザをロックアウトします。

パスワードの有効期限切れでロックアウト

パスワードに有効期限を設定して、その有効期限が切れたときにユーザをロックアウトします。




設定方法

それぞれの設定方法についてみていきます。

パスワード誤りでロックアウトする設定値

「/etc/pam.d/system-auth-ac」と「/etc/pam.d/password-auth-ac」のauthディレクティブに”required pam_tally2.so deny=数字“を追記します。

上の場合、3回パスワード入力を誤るとロックがかかります。

長期間ログイン無しでロックアウトする設定値

「/etc/pam.d/system-auth-ac」と「/etc/pam.d/password-auth-ac」のaccountディレクティブに”pam_lastlog.so inactive=数字“を追記します。

上の設定値の場合、10日間ユーザがログインしていないとロックアウトがかかります。

パスワード有効期限切れでのロックアウトする設定

パスワードの有効期限を設定するには、ユーザに対して下記のコマンドを実行します。

上の場合Johnというユーザのパスワード有効期限を20に設定しています。

パスワード有効期限が切れたとき即座にロックアウトする場合は、追加で以下の設定(コマンド)を入れます。

ユーザのパスワードの有効期限を確認する方法は、下のような方法があります。

  • /etc/shadowで確認
/etc/shadowファイルをcatなどで開いて第5カラムを確認します。(コロンで区切られています)5カラムが「20になっていることが確認できます。

また7カラム有効期限が切れてからロックアウトするまでの日数が確認できます。上のJohnユーザの場合「1日」になっています。

ちなみに有効期限が切れてからロックアウトするまでの日数デフォルト値は、-1」(無効)になります。この場合/etc/shadowで確認すると、7カラム空白となります。

上のPaulユーザ7カラム空白になっているのが確認できます。後述しますが、この場合のロックアウト解除は、Paulユーザ自身で実施できます

パスワード有効期限を確認する方法としてもう一つが、chageコマンドで確認する方法です。

  • chageコマンドで確認
Johnユーザの[パスワードを変更しなくてよい最長日数]に「20」が設定されていることが確認できます。




ロックアウト解除の方法

最後にそれぞれのロックアウトについて、解除方法を記載します。

パスワード誤りのロックアウト解除

「pam_tally2」コマンドで解除します。下のように「–reset」オプションを付けます。

現在のパスワード誤りの回数も「pam_tally2」コマンドで確認できます。

上の例の場合、3回パスワード誤りの履歴があります。

ちなみにパスワード誤りでロックがかかっている状態でログインを試行すると、「/var/log/secure」に下記のようなログが記録されます。

ロックアウトを解除した後は、パスワード誤りが0回に戻っていることが確認できます。

長期間ログイン無しのロックアウトを解除

長期間(最大非アクティブ期間)以上ログイン履歴がなかったユーザのロックアウトを解除する方法は、コマンドでユーザの最終ログイン日時を変更します。

今時点からログインしていなくてよい日数以内の日付を指定します。

わかりずらいですね。。。💦

例えば「pam_lastlog.so inactive=3」と設定していたら、今の日付から3日以内の日付を指定すれば、ユーザはログインできるようになります。(「pam_lastlog.so inactive=3」は今から3日間ログインしないことが許されるから)

解除には「lastlog」コマンドを使用します。方法は2種類あり、それぞれ付与するオプションが違います。

  • 「–set」または「-S」オプション
これでログイン日時を現在日付に変更でき、ユーザは許される非アクティブ期間内になり、ログインできるようになります。

  • 「–clear」または「-C」オプション
上のコマンドでは「ユーザが一度もログインしたことがない」という状態にします。ユーザは非アクティブ期間に影響を受けなくなるので、ログインできるようになります。

パスワード有効期限切れの解除

パスワードの有効期限が切れたとき、どのようなエラーが発生するか確認します。

前提として、JohnユーザPaulユーザパスワード有効期限1に設定しています。そしてJohnユーザはパスワード有効期限が切れたら即座にロックアウトすることとし、Paulユーザはロックアウトしない(デフォルト)設定としています。

まずはパスワードの有効期限が切れていることの確認です。

パスワードロックがかかっている状態でログインを試行すると、以下のエラーが発生します。

この場合ユーザ(ここではJohn)はログインできないので、root権限を持ったユーザでchageコマンドの「-d」オプションで解除します。

もしPaulユーザのように有効期限が切れてもロックアウトしない場合は、ユーザがログインを試行したタイミングで新しいパスワードへ変更を求められるので、そこで新しいパスワードに変更することができます。

以上です。お読みいただきありがとうございました。



参考サイト

https://access.redhat.com/discussions/3655431?tour=8

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html-single/7.3_release_notes/index

https://www.steponboard.net/linux/537/

https://linuc.org/study/knowledge/510/