RHEL6.4でパスワードポリシー設定してみました

職場でパスワードの複雑さやログイン失敗時のアカウントロックなどを実現して
セキュリティを強化したいという要望があったのでテストしてみました。

1.環境
OS:RedHat Enterprise Linux 6.4

2.実現した要件
・アカウントロック
 5回以上のログイン失敗で10分間ロックする。

・パスワードの複雑性チェック
 英語の大文字・小文字、数字、記号を最低1文字以上
 8文字以上
(rootユーザにも適用)

・パスワード履歴チェック
 過去2回のパスワードと比較し、同様のものは拒否させる(rootユーザにも適用)

・パスワード有効期限(90日)の設定
・パスワード有効期限直前(7日前)の変更通知の設定

3.設定手順

cd /etc/pam.d

バックアップ
cp -p system-auth system-auth_org
cp -p password-auth password-auth_org

3-1.全体PAM設定変更

vi /etc/pam.d/system-auth

①アカウントロック設定
5行目に以下を追記。
auth        required      pam_tally2.so deny=5 unlock_time=600

14行目に以下を追記。
account     required      pam_tally.so

②パスワード複雑性設定
15行目pasword requisite pam_cracklib.so...に追記し、以下のように変更(rootユーザに適用させない場合「enforce_for_root」の記述は不要です。)
password    requisite     pam_cracklib.so try_first_pass retry=3 type=
↓
password    requisite     pam_cracklib.so try_first_pass minlen=8 retry=3 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 enforce_for_root

③パスワード履歴チェック設定
16行目に以下を追記。(rootユーザに適用させない場合「enforce_for_root」の記述は不要です。)
password    required      pam_pwhistory.so remember=2 enforce_for_root


※このファイル編集後、サービスの再起動などは必要ありません。
 パスワード変更時に適用されるため、既存のユーザに影響はありません。

cat /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        required      pam_tally2.so deny=5 unlock_time=600
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

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_tally.so

password    requisite     pam_cracklib.so try_first_pass minlen=8 retry=3 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 enforce_for_root
password    required      pam_pwhistory.so remember=2 enforce_for_root
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
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

3-2.SSHでのPAM設定変更

vi /etc/pam.d/password-auth
system-authと同様の箇所を同じように編集します。
①アカウントロック設定
5行目に以下を追記。
auth        required      pam_tally2.so deny=5 unlock_time=600

14行目に以下を追記。
account     required      pam_tally.so

②パスワード複雑性設定
15行目pasword requisite pam_cracklib.so...に追記し、以下のように変更(rootユーザに適用させない場合「enforce_for_root」の記述は不要です。)
password    requisite     pam_cracklib.so try_first_pass retry=3 type=
↓
password    requisite     pam_cracklib.so try_first_pass minlen=8 retry=3 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 enforce_for_root

③パスワード履歴チェック設定
16行目に以下を追記。(rootユーザに適用させない場合「enforce_for_root」の記述は不要です。)
password    required      pam_pwhistory.so remember=2 enforce_for_root

cat /etc/pam.d/password-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        required      pam_tally2.so deny=5 unlock_time=600
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        required      pam_deny.so

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_tally.so

password    requisite     pam_cracklib.so try_first_pass minlen=8 retry=3 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 enforce_for_root
password    required      pam_pwhistory.so remember=2 enforce_for_root
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
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

3-3.パスワード有効期限の設定

cd /etc

バックアップ
cp -p login.defs login.defs_org

vi /etc/login.defs
パスワードの有効期限を設定する。ユーザーは設定した日数以内にパスワードを変更しなければならない。
ただし、この設定はアカウント新規作成時のみ有効。既存のアカウントには影響しない。
当設定がされていない既存ユーザーに設定する場合は「chage -M 日数 ユーザー」で設定。

# 25行目:パスワードの有効期限を90日に設定
PASS_MAX_DAYS   99999
↓
PASS_MAX_DAYS   90

パスワード有効期限直前の変更通知の設定

vi /etc/login.defs
パスワードの有効期限が来る前に警告を発する期間の日数を設定する。
ただし、この設定はアカウント新規作成時のみ有効。既存のアカウントには影響しない。
当設定がされていない既存ユーザーに設定する場合は「chage -W 日数 ユーザー」で設定。

# 28行目:パスワードの有効期限が来る前に警告を発する期間の日数を7日に設定
PASS_WARN_AGE 7

4.確認

ユーザ(user1)を追加
# useradd user2

user1のパスワード設定
# passwd user2

hogehoge 簡単なパスワードは失敗
******** ポリシーを満たすパスワードは成功

user2をグループ(server-admins)に追加する
# usermod -G server-admins user2

# chage -l user2
Last password change                                    : Feb 20, 2021
Password expires                                        : May 21, 2021
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 90
Number of days of warning before password expires       : 7

新規作成したuser2はパスワード有効期限が90日

# chage -l user1
Last password change                                    : Feb 12, 2021
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

既存ユーザのuser1はパスワード有効期限が無期限のまま

パスワードの履歴確認
# passwd user2

過去2回設定したパスワードが設定できないことを確認

ログイン失敗確認

5回以上ログイン失敗でロックがかかることを確認

ログイン失敗回数の確認
pam_tally2 -u user2
Login           Failures Latest failure     From
user2               9    02/20/21 12:40:30  192.168.0.194

ログイン失敗回数のリセット
pam_tally2 -u user2 --reset

ログイン失敗回数の確認
pam_tally2 -u user2
Login           Failures Latest failure     From
user2               0

5.参考URL
CentOS6パスワードポリシーを設定する
https://www.server-world.info/query?os=CentOS_6&p=password

Linuxでパスワードポリシーの設定をする方法
https://qiita.com/nikoniko/items/1a4193c40ff178d4f750

6.まとめ
パスワードポリシーの設定が出来ました。定期的なパスワード変更は意味があるのか?というお話もありますが、先日のブログで簡単にパスワードハッシュを抜き取って、パスワードクラック出来ることがわかったので、パスワード変更は単純だけど、それなりに意味のあるものだと思います。

Comments are closed.