15
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Linuxでパスワードポリシーの設定をする方法

Last updated at Posted at 2018-07-16

##概要
CentOS7,RHEL6.5にて以下のパスワードポリシーを適用します。

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

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

・アカウントロック
 5回以上のログイン失敗で30分間ロックする。

・SSHでのrootユーザ直ログイン禁止
・パスワード有効期限の設定
・パスワード有効期限直前の変更通知の設定

PAMの設定ファイルはtelnetとSSHでファイルが異なるので、両方の接続で同じ設定にしたい場合、2つのファイルを同様に編集する必要があります。

※バージョンやディストリビューションによって異なるので注意して設定して下さい。
 私は複数のサイトのものを組み合わせて試していたら、1度rootユーザにログインできなくなりました。
 ファイルを戻したら入れるように戻ったので、ほんとよかった...です。。。

##telnet側の設定
 /etc/pam.d/system-authを編集します。

ディレクトリを移動
# cd /etc/pam.d
バックアップを取っておく
# cp system-auth system-auth_org

viエディタを起動
# vi
挿入モードに変更
# i

以下system-authファイル

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

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

②パスワード複雑性設定
15行目pasword requisite pam_cracklib.so...に追記し、以下のように変更(rootユーザに適用させない場合「enforce_for_root」の記述は不要です。)

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=1 enforce_for_root

コマンドモードに戻り、保存
Escキーを押す。
:wq

パスワード履歴チェックは参考にさせて頂いたサイト(この記事の最終行に記載)で記載されていたpam_unix.soでも上手く動作しましたが、
マニュアルを参照したところ、rootにも適用させるオプションが見当たらなかったので、pam_pwhistory.soを使用したところ、上手くいきました。

###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=1800
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     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 minlen=8 retry=3 type= dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1
enforce_for_root
password    required      pam_pwhistory.so remember=1 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

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

##SSH,FTP側の設定
/etc/pam.d/password-authを、上記のsystem-authと同様の箇所を同じように編集します。
###pasword-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=1800
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_tally2.so
password    requisite     pam_cracklib.so try_first_pass minlen=8 retry=3 type= dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1
enforce_for_root
password    required      pam_pwhistory.so remember=1 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

##アカウントロック解除方法
アカウントロックは、pam_tally2によって管理され、ログイン失敗するごとに回数をカウントし、日時を記録します。

通常、ロックされるまでに正しいパスワードでログインするか、ロック解除後に正しいパスワードでログインすることで、ロックとカウントは自動で解除されますが、
解除できなかった場合は、次のコマンドで解除できます。

rootユーザでコマンドを打つと解除できます。

# pam_tally2 -u ユーザ名 --reset

コマンドを打った後、なぜか解除前の回数が表示されますが、確認してみるとカウントは0になりロック解除されています。

ロックのカウントを確認したい場合

# pam_tally2 -u ユーザ名

表示の意味は次の通りです。

Login Failures Latest failure From
asaito 1 07/02/18 00:40:55 pts/0
ユーザ名 失敗回数 最近失敗した日時 どこからのログインで失敗したか(端末やIPアドレスが表示される)

##SSHのパスワード試行回数の設定

SSHのパスワード試行回数はデフォルトで3回で設定されているため、5回に変更します。
これを設定しないと、3回でカウントがリセットされ、ロックが掛かりません。
/etc/ssh/sshd_configを編集します。

ディレクトリ移動
# cd /etc/ssh

バックアップ取得
# cp ssh_config ssh_config_org

viエディタ起動
# vi ssh_config

挿入モードに変更
 i

最終行に追記
NumberOfPasswordPrompts 5

(NumberOfPasswordPrompts の記載が既にある場合は、スペースを1つ開けて設定したい回数の数字を記入して下さい。)

コマンドモードに戻り、保存
Escキーを押す。
:wq

構文チェック
sshd -t
→エラーが起きていなければOKです。

サービスの再起動
/etc/init.d/sshd restart

##SSHでのrootユーザ直ログイン禁止
/etc/ssh/sshd_configを編集します。

ディレクトリ移動
# cd /etc/ssh

バックアップ取得
# cp sshd_config sshd_config_org

viエディタを起動
# vi sshd_config

挿入モードに変更
 i 

PermitRootLogin yes
を
PermitRootLogin noに変更する。

コマンドモードに戻って保存
Escキーを押す。
:wq

構文チェック
sshd -t 
→エラーが起きなければOKです

サービス再起動
/etc/init.d/sshd restart

##パスワード有効期限の設定
・日数で設定

chage -M 日数 ユーザ名

chage -M 120 asaito

・日にちで指定

chage -E 日付 ユーザ名

chage -E 2018-08-01 asaito

・確認

chage -l ユーザ名

※コマンドを打った時に反映されます。

##パスワード有効期限直前の変更通知の設定
有効期限が切れる何日前から警告するか設定します。

chage -W 日数 ユーザ名

chage -W 7 asaito

※コマンドを打った時に反映されます。

##参考


・俺的備忘録 〜なんかいろいろ〜 Linuxでパスワードポリシーを設定する
・Qiita:情報セキュリティの基本 ~パスワードの強化~@LostEnryuさん ・@IT:【 chage 】コマンド――パスワードの有効期限を設定する/確認する ・OXY NOTES: Linuxの各アプリケーションが共通して利用する「PAM認証」について ・PAMによる認証の仕組みを調べてみた_GeekFactory
15
22
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?