前提
サーバーはEC2で構築
基礎的なコマンドは打てる前提
目的
PAMの主要な設定
・ユーザーのパスワード設定
・ユーザーのパスワードポリシー
・パスワードの再試行回数設定
・コマンド監視
ユーザーのパスワード設定
passwd <ユーザー名>
設定パスワードを確認含めて2回入力すると変更可能
パスワードポリシー設定
PAMについて
パスワード関連の設定はLinuxに標準で入ってるPAMモジュールで制御されている(ことが多い)
正直PAMは奥が深すぎるし全然理解できていないので主要なものだけ記載します....
中でも
/etc/pam.d/system-auth
と/etc/security/pwquality.conf
が大事
パスワードポリシールール
/etc/security/pwquality.conf
内でパスワードポリシーを制御する
12文字以上+特殊文字数字大文字小文字含む場合
minlen = 12 # 最低文字数
dcredit = -1 # 少なくとも1つの数字を含む
ucredit = -1 # 少なくとも1つの大文字を含む
lcredit = -1 # 少なくとも1つの小文字を含む
ocredit = -1 # 少なくとも1つの特殊文字を含む
パスワード認証ルール
/etc/pam.d/system-auth
でパスワード認証ルールを設定する
SSH,SUDO,passwdなど複数のサービスの認証の共通設定となる
auth :: ログイン時に適用するルール
account :: ログインユーザーのシステムログイン権限をチェック
password :: パスワード変更の際に適用
session :: ユーザーのログインセッション管理
↑これらは管理グループといいsystem-auth内ではこの単位で設定を適応する
それぞれ詳細な設定を記載していく
ログイン試行回数制限
pam_faillock.so でログイン失敗のアカウントロックなどを制御する
auth required pam_faillock.so preauth silent audit deny=回数 unlock_time=解除時間
auth [default=die] pam_faillock.so authfail audit deny=回数 unlock_time=解除時間
account required pam_unix.so
account required pam_faillock.so
UNIX認証でのパスワードをN回失敗するとT秒間アカウントロックする
ロック解除はsudoユーザーから下記コマンド入力
faillock --user <ユーザー名> --reset
パスワード強度チェック
password requisite pam_pwquality.so try_first_pass local_users_only retry=3
/etc/security/pwquality.conf
の設定を元にパスワードの強度を検証
パスワードをハッシュ化して保存
password sufficient pam_unix.so try_first_pass use_authtok nullok sha512 shadow
/etc/shadow
にsha512でハッシュ化されてパスワードが保存
特定ユーザーのリモートログイン禁止
アクセスに関するルールは/etc/security/access.conf
に記載
-:<ユーザー名>:ALL EXCEPT <IPアドレス>
-:root:ALL EXCEPT 192.168.1.100
rootへの192.168.1.100以外からのログイン禁止(SSH)
account required pam_access.so
↑アクセス設定適応
特定の時間だけログイン
ログイン時間帯制御は```/etc/security/time.conf
```/etc/security/time.conf
login;*;<ユーザー名>;<時間指定>
<時間指定>の部分はここでは記載しない
login;*;root;!Wk0900-1800
root ユーザーのログインを平日の9:00~18:00だけ許可
account required pam_time.so
↑時間帯設定適応
とはいえ、夜間作業等でrootユーザーが使えないと困るケースの方が多いのでこんな設定しないか
コマンド監視
pam_tty_auditモジュールでコマンド監査用のログを取得できる
設定ファイルはetc/audit/auditd.conf
に記載
log_file = /var/log/audit/audit.log #監査ログの保存先
max_log_file = 8 #監査ログファイルの最大サイズ(MB単位)。このサイズを超えるとローテーション
max_log_file_action = ROTATE #ログをローテーション(古いものを削除)
↓pam_tyy_auditの適応
session required pam_tty_audit.so disable=username,username2 enable=username
コマンドログ監査対象から除外したいユーザーはdisableで明記
基本的にroot/sudo許可ユーザーなど重要な操作を行えるユーザーだけ対象にしよ