Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2072604
  • 博文数量: 470
  • 博客积分: 10206
  • 博客等级: 上将
  • 技术积分: 5620
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-03 12:50
文章分类

全部博文(470)

文章存档

2012年(1)

2011年(18)

2010年(47)

2009年(404)

分类:

2009-04-07 20:37:24

目前公司的网站系统中,服务器保有量巨大,因安全需要系统工程部会定期更新一次系统用户密码。随着业务的扩展,机器的日益增加,定期修改帐户密码成为一项繁冗、重复的工作,为减轻系统管理人员的工作强度,开发了这套密码更新系统.

      此系统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) |
给主人留下些什么吧!~~