今回は、Linuxでのパスワードポリシーの設定方法についてを記述する。 システムを構築する上で、よく求められるパスワードポリシーは以下のようなものだと思う。
- パスワードの文字数は8文字以上とする
- パスワードの有効期間は〇〇日とする
- パスワードの変更禁止期間は〇〇日とする
- パスワードの有効期間が切れる前の◯日間に警告を出す
- 新しいパスワードは過去◯世代と違うものとする
- 初回ログイン時にパスワードを変更させる
- ◯回、誤ったパスワードを入力したらアカウントをロックする
- 誤ったパスワード入力によるロック後、◯◯◯秒後にロック解除する
- 複雑なパスワード(大文字、小文字、数字を含める等)
- 特権ユーザで直接ログイン出来ないようにする
これらをLinuxで実現するには、どうすれば良いのだろう。 上記のパスワードポリシーの1~9までを設定する場合、以下の2つのファイルのどちらかに設定することで対応できる。 ※なお「6.初回ログイン時にパスワードを変更させる方法」については、以前こちらに記述しているので割愛する。
- /etc/login.defs
- /etc/pam.d/system-auth
どのポリシーに対し、どの設定ファイルに値を記述する必要があるのか。以下にまとめてみた。
なお、表の※がついた「/etc/login.defs」の設定は、Pamの設定値が優先される。 最近のOSであればpamを使用するのが一般的なので、あまり気にしなくていいだろう。
参考までに、実際に設定する場合のサンプルを掲載する。
1./etc/login.defs
「/etc/login.defs」に設定を記述した場合のサンプル。
#
# Please note that the parameters in this configuration file control the
# behavior of the tools from the shadow-utils component. None of these
# tools uses the PAM mechanism, and the utilities that use PAM (such as the
# passwd command) should therefore be configured elsewhere. Refer to
# /etc/pam.d/system-auth for more information.
#
# *REQUIRED*
# Directory where mailboxes reside, _or_ name of file, relative to the
# home directory. If you _do_ define both, MAIL_DIR takes precedence.
# QMAIL_DIR is for Qmail
#
#QMAIL_DIR Maildir
MAIL_DIR /var/spool/mail
#MAIL_FILE .mail
# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
# 2.パスワードの有効期間は〇〇(90)日とする
PASS_MAX_DAYS 90
# 3.パスワードの変更禁止期間は〇〇(7)日とする
PASS_MIN_DAYS 7
# 1.パスワードの文字数は8文字以上とする(※)
PASS_MIN_LEN 8
# 4.パスワードの有効期間が切れる前の◯(7)日間に警告を出す
PASS_WARN_AGE 7
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN 500
UID_MAX 60000
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN 500
GID_MAX 60000
#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD /usr/sbin/userdel_local
#
# If useradd should create home directories for users by default
# On RH systems, we do. This option is overridden with the -m flag on
# useradd command line.
#
CREATE_HOME yes
# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK 077
# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes
# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512
2./etc/pam.d/system-auth
次は、「/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 sufficient pam_fprintd.so
# 5.新しいパスワードは過去◯(3)世代と違うものとする
auth sufficient pam_unix.so remember=3 try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.so
# 7.◯(5)回、誤ったパスワードを入力したらアカウントをロックする
# 8.誤ったパスワード入力によるロック後、◯◯◯(3600)秒後にロック解除する
auth required pam_tally2.so deny=5 unlock_time=3600
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account required pam_permit.so
# 1.パスワードの文字数は8文字以上とする
# 9.複雑なパスワード(大文字、小文字、数字を含める等)
password requisite pam_cracklib.so try_first_pass minlen=8 retry=3 type= dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1
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
また「10.特権ユーザで直接ログイン出来ないようにする」については、一般ユーザの特権へのスイッチ方法(suとかsudo)の内容を精査した上で、「/etc/ssh/sshd_config」に以下の設定を追加すればいい。
PermitRootLogin no