CentOS8でユーザのパスワード有効期限を設定する。
掲題のままなのだが、CentOS8.1でパスワードの有効期限を設定する操作を調査したので記載します。
尚、実際にはPAMにも設定があり、パスワードの長さなどの優先順位はPAMの方が強いらしいのですが、今回は有効期限に関する部分にフォーカスして記載します。
login.defs の初期設定を確認・編集する。
ユーザパスワードの変更期限については、デフォルト値は /etc/login.defs に設定が入っている。
[root@localhost ~]# cat /etc/login.defs | grep -v "^#" | grep -v "^$" MAIL_DIR /var/spool/mail PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_MIN_LEN 5 PASS_WARN_AGE 7 (以下略)
上記の設定値の内容は以下になる。
PASS_MAX_DAYS:パスワード有効期限日数(パスワードを変更しなくてよい最長日数)
PASS_MIN_DAYS:パスワード最小期限日数(パスワードが変更できるまでの最短日数)
PASS_MIN_LEN :パスワード最短文字数
PASS_WARN_AGE:有効期限前アラート開始日(パスワード期限が切れる前に警告される日数)
実際に変更しうる値は PASS_MAX_DAYS と PASS_WARN_AGE かと考えられます。
また、PASS_WARN_AGEも変更する機会は少ないと考えたため、PASS_MAX_DAYS について実機で調査を行いました。
結果、以下の内容が得られました。
- 設定できる値は0~9999、ただし0の場合は当日中にパスワードが失効するため、まず利用しないと考えられます。
- 設定値に-1、もしくは10000を設定した場合、有効期限はなしとなりました。またデフォルト値である99999の場合も有効期限なしとなりました。したがって、有効期限なしにしたい場合は-1もしくは10000以上の値を設定することになります。
- この値はユーザ作成時点でユーザに適用されパスワードを変更した場合、パスワードの開始日は変更されるが有効期限までの日数は変更されない。この値を変更する場合は、後述の chage コマンドでユーザ個別に設定変更をする必要があります。
chage コマンドでユーザ個別に期限の変更を実施する。
/etc/login.defs は上記検証結果3からデフォルト値の設定ファイルであると考えられるため、ユーザ個別に設定を変更する方法を調査し、chageコマンドが該当すると分かった。
まず、よく使うのが「-l」オプションでこれは各種パスワード日数設定値を出力するオプションになります。
以下はtestユーザの設定値を出力する例となります。
[root@localhost ~]# chage -l test 最終パスワード変更日 : 4月 18, 2020 パスワード期限: : なし パスワード無効化中 : なし アカウント期限切れ : なし パスワードが変更できるまでの最短日数 : 0 パスワードを変更しなくてよい最長日数 : 99999 パスワード期限が切れる前に警告される日数 : 7
次によく使うと考えられるのが「-M」オプションでこれは PASS_MAX_DAYS の値を上書きします。
以下は有効期限日数をtestユーザのパスワード有効期限日数を90日に変更する例です。
chage -M 90 test
「-M」オプションで設定する値については、上記PASS_MAX_DAYSの検証1,2と同じ結果となりました。
その他、「-m」オプションが PASS_MIN_DAYS の値を、「-W」オプションが PASS_WARN_LEN の値を上書きするようです。