Initial Commit
This commit is contained in:
commit
c96e1e65fb
8
README.md
Normal file
8
README.md
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Purpose
|
||||||
|
To parse the list of users not in the defined service accounts group, and ensure all have OTP tokens configured. If they do not, generate a token and email it to the user.
|
||||||
|
|
||||||
|
# Usage
|
||||||
|
1. Download script to location of your choice
|
||||||
|
2. Update variables at top of file, and service accounts groups listed on line 26
|
||||||
|
3. Run Script
|
||||||
|
4. Ensure user recieves email, and the NOTIFY_EMAIL address will also receive a notification
|
94
freeIPA_otp_tokens.bash
Normal file
94
freeIPA_otp_tokens.bash
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#This script will check to see if a user has an OTP token, and if not, create one and email the QR Code to the user
|
||||||
|
|
||||||
|
#Set Variables
|
||||||
|
#ARN of the secret which stores the FreeIPA Login credentials
|
||||||
|
AWS_SECRET_ARN=ARN of an AWS Secret holding your IPA user creds
|
||||||
|
#Email address to notify
|
||||||
|
NOTIFY_EMAIL=freeipa-support@domain.com
|
||||||
|
#IPA User, parsed from the secret
|
||||||
|
IPA_USER=$(aws secretsmanager get-secret-value --secret-id $AWS_SECRET_ARN | jq -r .SecretString| jq -r .username)
|
||||||
|
#IPA Password, parsed from the secret
|
||||||
|
IPA_PASSWORD=$(aws secretsmanager get-secret-value --secret-id $AWS_SECRET_ARN | jq -r .SecretString| jq -r .password)
|
||||||
|
#IPA Server URL
|
||||||
|
IPA_URL=ipa-master.ipa.domain.com
|
||||||
|
#From email
|
||||||
|
FROM_EMAIL="freeipa-noreply@domain.com"
|
||||||
|
#Set mail html file name
|
||||||
|
MAILFILE=/tmp/otptokenmail.html
|
||||||
|
#Set QR Code image file name
|
||||||
|
QRFILE=/tmp/otptokenqr.png
|
||||||
|
|
||||||
|
#Set kerberos ticket
|
||||||
|
echo $IPA_PASSWORD | kinit $IPA_USER
|
||||||
|
|
||||||
|
#List users not in service account groups
|
||||||
|
USERS=$(ipa user-find --not-in-groups=service-accounts --not-in-groups=admin-svc-accts --disabled=false | grep "User login:" | awk '{print $NF}')
|
||||||
|
|
||||||
|
#Function to create the token and email it
|
||||||
|
create_otptoken()
|
||||||
|
{
|
||||||
|
TOKEN_URI=$(ipa otptoken-add --owner=$USER --no-qrcode --desc="Created Automatically by Ansible on $(date +"%Y-%m-%d_%H-%M-%S")" | grep URI | awk -F" " '{print $NF}')
|
||||||
|
cat /dev/null > $MAILFILE
|
||||||
|
rm -f $QRFILE
|
||||||
|
/usr/local/bin/qr "${TOKEN_URI}" > $QRFILE
|
||||||
|
|
||||||
|
echo "<p>" >> $MAILFILE
|
||||||
|
echo "Congratulations, a new OTP Token has been created for your use in the FreeIPA authentication system." >> $MAILFILE
|
||||||
|
echo "</p>" >> $MAILFILE
|
||||||
|
echo "<p>" >> $MAILFILE
|
||||||
|
echo "Please scan the attached QR code with the OTP Mobile Application on your device of choice." >> $MAILFILE
|
||||||
|
echo "</p>" >> $MAILFILE
|
||||||
|
echo "<p>" >> $MAILFILE
|
||||||
|
echo "If the above does not work, try this link: ${TOKEN_URI}" >> $MAILFILE
|
||||||
|
echo "</p>" >> $MAILFILE
|
||||||
|
SUBJECT="FreeIPA OTP Token Created for $USER"
|
||||||
|
USER_EMAIL=$(ipa user-find $USER | grep Email | awk '{print $NF}')
|
||||||
|
(
|
||||||
|
echo "Subject: ${SUBJECT}";
|
||||||
|
echo "From: ${FROM_EMAIL}";
|
||||||
|
echo "To: ${USER_EMAIL}";
|
||||||
|
echo "MIME-Version: 1.0";
|
||||||
|
echo 'Content-Type: multipart/mixed; boundary="OTPEMAIL"';
|
||||||
|
echo '--OTPEMAIL';
|
||||||
|
echo 'Content-Type: text/html; charset="utf-8"';
|
||||||
|
echo "";
|
||||||
|
echo "$(<$MAILFILE)";
|
||||||
|
echo '--OTPEMAIL';
|
||||||
|
echo 'Content-Type: image/png;name="otpqr.png"';
|
||||||
|
echo "Content-Transfer-Encoding: base64";
|
||||||
|
echo "Content-ID: <part1.06090408.01060107>";
|
||||||
|
echo 'Content-Disposition: inline; filename="otpqr.png"';
|
||||||
|
echo "$(base64 $QRFILE)";
|
||||||
|
echo '--OTPEMAIL--';
|
||||||
|
|
||||||
|
)|sendmail -t
|
||||||
|
|
||||||
|
(
|
||||||
|
echo "Subject: ${SUBJECT}";
|
||||||
|
echo "From: ${FROM_EMAIL}";
|
||||||
|
echo "To: ${NOTIFY_EMAIL}";
|
||||||
|
echo "MIME-Version: 1.0";
|
||||||
|
echo 'Content-Type: multipart/mixed; boundary="OTPEMAIL"';
|
||||||
|
echo '--OTPEMAIL';
|
||||||
|
echo 'Content-Type: text/html; charset="utf-8"';
|
||||||
|
echo "";
|
||||||
|
echo "A new OTP Token has been created for ${USER}, and information has been emailed to them.";
|
||||||
|
echo '--OTPEMAIL--';
|
||||||
|
|
||||||
|
)|sendmail -t
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
for USER in $USERS; do
|
||||||
|
#Check to see if user has OTP token
|
||||||
|
ipa otptoken-find --owner=$USER > /dev/null
|
||||||
|
otp_ec=$?
|
||||||
|
#If no otp token, create it and send email to aws-support and user
|
||||||
|
if [[ $otp_ec != 0 ]]; then
|
||||||
|
echo "No token found for $USER, creating one and sending it to the user...";
|
||||||
|
create_otptoken;
|
||||||
|
else
|
||||||
|
echo "$USER has a token, no need to create a new one.";
|
||||||
|
fi
|
||||||
|
done
|
Loading…
Reference in New Issue
Block a user