2017/08/29

LinuxのOSユーザーパスワードに有効期限を設定する


CentOSなんかでOSユーザーのパスワードに有効期限を設定し、
有効期限が近づいてきたらメール通知するような感じにしたい。
認証サーバを立てずに!


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

前回パスワード設定から指定日数過ぎたアカウントのパスワードを無効化
という事は出来る様なので、そのとおりに。

今回はアカウントロックまでは行わないけど、ロックもできるみたい。
例)パスワード有効期限を90日に設定
# chage -M 90 user_name

パスワード有効期限が切れた後にSSHアクセスすると以下のような文言が表示され
変更を促されます。
You are required to change your password immediately (root enforced)
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user user.
Changing password for user.
(current) UNIX password: <古いパスワード>
New password: <新しいパスワード>
Retype new password: <新しいパスワード>

パスワード有効期限切れ通知

既存の機能では期限切れの通知を出すような機能はないそうなので、
/etc/shadowファイルから計算するようにする。

shadowファイルの3項目目に設定日からの時刻が記載されているので、
dateコマンドから取得した値で引くことで初期パスワード設定日から何日経過しているかを計算できる。
# expr `date +%s` / 60 / 60 / 24

これを利用してバッチを作って1日一回cronで実行するようにすればいい。
#!/bin/bash
DAY=$(expr `date +%s` / 60 / 60 / 24)
USER_LIST="$1"
THRESHOLD="76"
PASSWD=$(getent shadow |grep -f $USER_LIST)

for line in ${PASSWD[@]}
do
  USERS=$(echo $line |awk -F\: '{print $1}')
  PASS_TIME=$(echo $line |awk -F\: '{print $3}')
  PASS_DAYS=$(expr $DAY - $PASS_TIME)
  if [ "$PASS_DAYS" -ge $THRESHOLD  ]; then
     echo "$USERS : $PASS_DAYS"
     {
     echo "ユーザー名:$USERS"
     echo "      パスワード変更後 $PASS_DAYS 日経過"
     echo ""
     } >> $BODY
     HANTEI=NG
  else
     echo "パスワード期限間近のユーザーはいません"
  fi
done

if [ "$HANTEI" = NG ]; then
   {
     echo "■パスワードの変更方法"
     echo "  対象サーバへログインしパスワードコマンドを実行して変更します"
     echo "-------"
     echo "$ passwd"
     echo "-------"
     echo ""
     echo "■パスワード有効期限が切れた場合"
     echo "  サーバログイン時にパスワード変更を求められるので、任意のパスワードへ変更してください。"
     echo "  サーバへSSH接続しパスワードを設定します。"
     echo "-------"
     echo "You are required to change your password immediately (root enforced)"
     echo "WARNING: Your password has expired."
     echo "You must change your password now and login again!"
     echo "Changing password for user user."
     echo "Changing password for user."
     echo "(current) UNIX password: <古いパスワード>"
     echo "New password: <新しいパスワード>"
     echo "Retype new password: <新しいパスワード>"
     echo "-------"


標準テキスト CentOS 7 構築・運用・管理パーフェクトガイド
有限会社ナレッジデザイン 大竹 龍史 市来 秀男 山本 道子 山崎 佳子
SBクリエイティブ
売り上げランキング: 9,975

0 コメント:

コメントを投稿