Linuxのパスワードポリシーの設定

2015年11月7日土曜日

Linux セキュリティ

t f B! P L

Red Hat Enterprise Linux 6.7 で確認。

以下の文中の『login.defs』のフルパスは『/etc/login.defs』です。 『system-auth』のフルパスは『/etc/pam.d/system-auth』ですがこれはシンボリックリンクになっていて実体は『/etc/pam.d/system-auth-ac』というファイルです。

パスワードの長さ
login.defs の PASS_MIN_LEN パラメータと system-auth の pam_cracklib.so モジュールの minlen パラメータで設定。minlen のほうが優先。PASS_MIN_LEN パラメータのデフォルト値は 5。minlen のデフォルト値はないが、pam_cracklib に先んじてパスワードチェックを行う crack ライブラリが強制的にパスワード長 6 未満を拒否するため、実質的に下限は 6。minlen パラメータの設定可能範囲は 5 から 2^31 -1(2147483647) まで。ただし 5 にしても前述した通り 6 未満は受け付けられない。
パスワード変更禁止期間
login.defs の PASS_MIN_DAYS パラメータ。設定可能範囲は -2147483648 から 2147483647。ただし、0 以下の値は 0 と同様に禁止期間を無効化(すぐに変更可能)する。
パスワードの有効期間
login.defs の PASS_MAX_DAYS パラメータ。設定可能範囲は -2147483648 から 2147483647。ただし、-1 および 10000 以上の値は無期限を意味する。
パスワードの履歴を記録する回数
system-auth の pam_unix.so モジュールの remember パラメータ。設定可能範囲は 0 から 400 まで。
パスワードの複雑さ
system-auth の pam_cracklib.so モジュールの ucredit(英大文字の数), lcredit(英小文字の数), dcredit(数字の数), ocredit(記号の数), minclass(最小限含まなければならない文字種の数), difok(変更前のパスワードと異なる文字の数) パラメータ(他にもあるがよく使うものだけ記載。残りは man を見てくださいな)。xcredit で文字種を指定するときに含まなければいけない数は負の整数で書く。例えば数字2文字以上なら dcredit=-2。含める文字種を指定するときに、複数のパラメータを並べることになるが、条件は論理積(&&)になる。論理和(||)の設定はできない。例えば、『英大文字または英小文字から最低1文字と、数字または記号から最低1文字』といったルールは『または』が入っているので設定できない。minclass と併用することで、『英大文字または英小文字から最低1文字と、数字を最低1文字と、記号を最低1文字』なら設定できる(minclass=3 dcredit=-1 ocredit=-1)。
アカウントがロックされるまでの失敗回数
system-auth の pam_tally2.so モジュールの deny パラメータ。設定可能範囲は 0 ~ 65535 まで。
アカウントロックが解除されるまでの秒数
system-auth の pam_tally2.so モジュールの unlock_time パラメータ。設定可能範囲は -2147483648 から 2147483647。0 以下の値にすると、アカウントロックされなくなる。

パスワード長8文字、変更禁止期間0日、有効期間180日、履歴記録回数1回、アカウントロックまでの失敗回数5回、ロック10分、複雑さの要件は、各文字種を最低1文字、前回のパスワードと最低2文字異なる、という条件だと以下のようになります。

/etc/login.defs ※関連箇所のみ抜粋

PASS_MAX_DAYS   180
PASS_MIN_DAYS   0
PASS_MIN_LEN    8

/etc/pam.d/system-auth-ac

auth        required      pam_env.so
auth        sufficient    pam_fprintd.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        required      pam_deny.so
auth        required      pam_tally2.so deny=5 unlock_time=600

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     required      pam_permit.so
account     required      pam_tally2.so

password    requisite     pam_cracklib.so try_first_pass retry=3 type= minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 difok=2
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=3
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

QooQ