#!/bin/bash
###########################################################################
#
# Linux 계정의 패스워드를 랜덤하게 변경하고 당사자에게 메일을 보낸다.
#
# 필요한 패키지 설치: yum -y install pwgen ImageMagick mailx
#
# $ crontab -e (매월 1일 00:10에 실행)
# 10 0 1 * * /etc/scripts/pw_changer.sh
#
##########################################################################
CURRENT_TIME=$(date "+%Y-%m-%d_%H:%M:%S")
CURRENT_DATE=$(date "+%Y-%m-%d")
CURRENT_PATH=$(pwd)
SENDER_MAIL="pwchanger@esvali.com"
MAIL_DOMAIN="esvali.com"
LOG_FILE="/var/log/esvali_pw_changer.log"
PNG_FILENAME="/tmp/${CURRENT_DATE}.png"
TMP_FILENAME1="/tmp/__tmp_file1__.txt"
TMP_FILENAME2="/tmp/__tmp_file2__.txt"
###########################################################################
# 파일의 존재와 실행가능여부 검사
##########################################################################
function check_file() {
if [ ! -x $1 ]
then
echo "$1 not found."
exit 1
fi
}
###########################################################################
# 유틸리티 체크
##########################################################################
function prepare_run() {
check_file /usr/bin/pwgen
check_file /usr/bin/convert
check_file /usr/bin/mail
}
###########################################################################
# 문자열을 이미지로 변환
# text2png <text>
##########################################################################
function text2png() {
if [ -f ${PNG_FILENAME} ]
then
rm -f ${PNG_FILENAME}
fi
# 가용 폰트 알아보기: convert -list font
/usr/bin/convert -size 640x100 xc:"rgba(0,0,0,0)" -font "FreeMono-Bold" -pointsize 64 -fill blue -annotate +64+64 "$1" ${PNG_FILENAME}
}
###########################################################################
# 암호를 변경하고 메일로 보낸다.
# change_pw <os id> <email>
##########################################################################
function change_pw() {
# 신규 비밀번호를 생성하여 $NEW_PASSWD에 넣는다.
pwgen -CcysnB 10 1 > ${TMP_FILENAME1}
if [ $? != 0 ]
then
echo "Failed to pwgen."
exit 1
fi
NEW_PASSWD=$(cat ${TMP_FILENAME1})
text2png ${NEW_PASSWD}
# 메일을 보낸다.
echo "Password changed time: ${CURRENT_TIME}, Look at the attachment." > ${TMP_FILENAME2}
mail -a ${PNG_FILENAME} -r ${SENDER_MAIL} -s "$1@${MAIL_DOMAIN} password changed. (${CURRENT_DATE})" $2 < ${TMP_FILENAME2}
if [ $? != 0 ]
then
echo "Failed to mail."
exit 1
fi
# 비밀번호를 변경한다.
echo "${NEW_PASSWD}" | passwd --stdin $1
# 로그를 기록한다.
#echo ${CURRENT_TIME} \"$1\" \"$2\" \"${NEW_PASSWD}\" >> ${LOG_FILE}
echo ${CURRENT_TIME} \"$1\" \"$2\" >> ${LOG_FILE}
# 임시파일 삭제
rm -f ${TMP_FILENAME1} ${TMP_FILENAME2} ${PNG_FILENAME}
}
prepare_run
change_pw "user1" "user1@naver.com"
change_pw "user2" "user2@daum.net"