JumpCloudでパスワード有効期限が迫っているMacローカルユーザーに通知を表示する方法

JumpCloudは10人まで無料で利用できるので、小さな企業等だと便利ですよね
RAIDUS機能もあるので使われている方も多いのではないでしょうか。

今回はJumpCloudでパスワードの有効期限が迫っているユーザーに対して期限がきれますよ。
という通知を表示させる方法です。
(パスワードに期限をつけるなんてナンセンスと思われそうですが、
現行(2020年10月現在)のPCI DSSではパスワードの定期更新が求められるため、設定しなければいけない企業もあるということです)

目次

前提

  • Macに対してJumpCloudを設定し、ログインするように設定している
  • パスワード期限の7日前からダイアログを表示させ、パスワード変更方法を記したページURLを自動的に開くようにする

APIキーの取得

  1. JumpCloudの管理ポータルへAPIキーを発行するユーザーでログインします
  2. 右上のログイン名をクリックし、【API Settings】をクリックします
  3. 表示されたAPIキーを控えておきます

スクリプト作成

以下のようなスクリプトを作成します。
JCAPIKeyには、事前に控えたAPIキーを貼り付けます

#!/bin/bash

## Populate below variable before running command
JCAPIKey=''

## alertDaysThreshold set to '7' by default.
## Users whose passwords will expire in 7 days or less will receive a prompt to update.
## Update the value of the variable alertDaysThreshold=''to modify the threshold.
alertDaysThreshold='7'

#------- Do not modify below this line ------
user=$(ls -la /dev/console | cut -d " " -f 4)

passwordExpirationDate=$(
    curl -s \
        -X 'POST' \
        -d '{"filter":[{"username":"'${user}'"}],"fields" : "password_expiration_date"}' \
        -H 'Accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'x-api-key: '${JCAPIKey}'' \
        "https://console.jumpcloud.com/api/search/systemusers"
)

regex=':".*T'
if [[ $passwordExpirationDate =~ $regex ]]; then
    unformattedDate1="${BASH_REMATCH[@]}"
    unformattedDate2=$(echo "${unformattedDate1:2}")
    expirationDay=${unformattedDate2%?}
    echo "${user} password_expiration_date: ${expirationDay}"
else
    echo "Could not locate the password expiration date for user ${user}."
    echo "Is ${user} enabled for password_never_expires?"
    echo "If so users enabled with password_never_expires have no password expiration date."
    exit 1
fi

Today="$(echo $(date -u +%Y-%m-%d))"

daysToExpiration=$(echo $((($(date -jf %Y-%m-%d $expirationDay +%s) - $(date -jf %Y-%m-%d $Today +%s)) / 86400)))
echo "${user} password will expire in ${daysToExpiration} days"

if [ "$daysToExpiration" -le "$alertDaysThreshold" ]; then
    echo "${daysToExpiration} within alertDaysThreshold of ${alertDaysThreshold} prompting user"

    userPrompt=$(sudo -u $user osascript -e '
        display dialog "パスワードの期限が残り'"${daysToExpiration}"'日で切れます。\n OKをクリックし表示された手順に従いパスワードを更新してください。" buttons {"OK","Cancel"} default button 1 with title "パスワード有効期限通知" with icon file "Applications:Jumpcloud.app:Contents:Resources:AppIcon.icns"
        set tmp to result
        set btn to button returned of tmp
    ')
    echo "$userPrompt"

    if [ $userPrompt = "OK" ]; then
        `sudo -u $user /usr/bin/open -a '/Applications/Safari.app' "https://パスワード変更手順を記したWikiなどのURL"`
    fi


else
    echo "${daysToExpiration} NOT within alertDaysThreshold of ${alertDaysThreshold} NOT prompting user"

fi

exit 0

JumpCloudにスクリプトを登録する

PowerShellで登録する方法もありますが、管理ポータルか登録させていきます

  1. 管理ポータルにログインし、「Commands」→【+】アイコンをクリックします
  2. 各種内容を入力します
    NAME わかりやすい名前
    RUN AS root
    COMMAND 事前に作成したスクリプトの内容を貼り付け
    EVENT Run as Repeating
    Day
    Repeat every 1 days
    Run at :実行したい時間

  3. 対象のグループやシステムを選択し、【save command】をクリックします
    今回Macを対象としているので、Macグループを指定しています
    (事前にグループに対してマシンを紐付ける必要があります)
  4. 実行されると、command resultの欄に実行結果が表示されてきます
  5. 結果をクリックすると、標準出力の結果等を確認することができます

Mac側での表示のされ方

Mac側でパスワードの期限切れが近づいており、設定したタイミングでスクリプトが実行されると以下のようなダイアログが表示されます
OKをクリックすると、指定したURLが開きます

JumpCloudアプリでパスワードを変更する

FileVaultの絡みがあるので、JumpCloudのアプリから変更するのが無難かと思います

  1. メニューバーにあるJumpCloudアイコンをクリックし、【Update Now】をクリックします
  2. 表示された内容に従ってパスワードを変更します
  3. 下記画面が表示されてパスワード変更は完了です

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次