目前公司的网站系统中,服务器保有量巨大,因安全需要系统工程部会定期更新一次系统用户密码。随着业务的扩展,机器的日益增加,定期修改帐户密码成为一项繁冗、重复的工作,为减轻系统管理人员的工作强度,开发了这套密码更新系统.
此系统shell部分有两部分组成,为常见的C/S架构,目前是稳定后的发布版,我个人的负责的机器已经上线
A. 机选口令模块
#!/bin/bash
# Name : DB_passwd.sh
# Deviser: Li Ming
# Date : Mon Sep 22 2008
# Purpose: Automatic password revised on a regular basis
# Use : Unifies the crontab automatic movement
# NOTE :
# History:
# Mon sep 22 2008 First release by Li Ming
# Wen Sep 10 2008 Second release by Li Ming
# Thu Dec 11 2008 Third release by Li Ming
# Wen Mar 04 2009 Fourth release by Li Ming
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin/X11:/usr/X11R6/bin:/root/bin
export PATH
[[ $# != 1 ]]&&{ echo " ERROR:Usage /XX/XX/DB_passwd.sh username ";exit 1; }
LOCKfile=/tmp/alter-passwd.lock
Username=$1
DB_ac=michael
DB_ip=xxx.xxx.xxx.xxx
DB_pw=257ea6949c88@
DB_db=password
DB_Key=michael
DB_table=michael
DB_iplist=/tmp/iplist
Results=/tmp/results.txt
DATE=`date +%F`
DATE2=`date +%Y_%m_%d`
IP=$(ifconfig | grep `route | grep default | awk '{print $2}'| cut -d"." -f1,2`|awk -F: '{print $2}' |awk '{print $1}')
Addressee="42239674@qq.com"
Message=/root/shell/message
Mysql=`which mysql`
if [ -f "$LOCKfile" ]
then
echo "LOCK file is exist" && exit
else
touch $LOCKfile
fi
touch $DB_iplist
touch $Results
#touch $Message
check1=`mysqladmin -h $DB_ip -u $DB_ac -p$DB_pw ping 2> /dev/null |wc -l`
test $check1 -ne 1 && rm -rf $LOCKfile && exit
passwd=`echo $RANDOM | md5sum | awk '{print $1}'|cut -c-12`@
$Mysql -u $DB_ac -h $DB_ip -p$DB_pw -D $DB_db -e "select server,account
from $DATE2;"|grep -v server |sed -e 's#\t##g'>$DB_iplist
if [ -z "`grep -x "$IP$Username" $DB_iplist`" ]
then
insertSQL="insert into $DATE2 values('','$IP','$Username',AES_ENCRYPT('$passwd','$DB_Key'),'$DATE');"
$Mysql -u $DB_ac -h $DB_ip -p$DB_pw -D $DB_db -e "$insertSQL"
else
updateSQL="update $DATE2 set
password=AES_ENCRYPT('$passwd','$DB_Key'),revision_time='$DATE' where
server='$IP' and account='$Username';"
$Mysql -u $DB_ac -h $DB_ip -p$DB_pw -D $DB_db -e "$updateSQL"
fi
selectSQL="select revision_time from $DATE2 where server='$IP' and account='$Username';"
check2=`$Mysql -u $DB_ac -h $DB_ip -p$DB_pw -D $DB_db -e "$selectSQL"| grep -v revision_time`
echo $check2
if [ "$check2" != "$DATE" ]
then
deleteSQL="delete from $DATE2 where server='$IP' and account='$Username';"
$Mysql -u $DB_ac -h $DB_ip -p$DB_pw -D $DB_db -e "$deleteSQL"
rm -rf $LOCKfile
exit
fi
echo $passwd | passwd $Username --stdin
echo Server:$IP Account:$Username Passwd:$passwd >>$Results
cat $Message | mutt -s "$DATE-$IP-$1" -a $Results "$Addressee"
rm -rf $LOCKfile
rm -rf $DB_iplist
rm -rf $Results
B. 调用模块
#/bin/bash
Dir=/root/shell
$Dir/dbpasswd.sh ceshi
$Dir/dbpasswd.sh michael
#$Dir/dbpasswd.sh root
#$Dir/dbpasswd.sh maintain
#$Dir/dbpasswd.sh weihu
#$Dir/dbpasswd.sh menhu
#$Dir/dbpasswd.sh javadev
使用时 将B 脚本 植入crontab 定期任务,密码修改后,从mysql 数据库表中解密导出明文密码表, 多项目分组的情况下,SA朋友们可以结合控制机(无密码链接)使用脚本激发手动临时批量修改!
目前使用下来,效果还可以,有兴趣的网友可以试试,欢迎回馈顶贴!! :mrgreen:
小生在深入的学习数据库的过程中,发现次系统还有很多不完善的地方,架构上也不太理想,从数据库的角度开发的话,可以修改为W/S 架构,DB server端维护一张用户列表,结合存贮函数,可以轻松实现用户的管理,比现在的架构方便了许多,DBA 朋友请不吝赐教啊!
ps: 日志记录功能还未加入,crontab系统使用了自更新,定期从指定的web服务器取最新的密码脚本 ,各检测点可增加的mail 信件通知功能,各位仁者见仁、智者见智吧
阅读(832) | 评论(0) | 转发(0) |