返回大旺国际登录网站
当前位置: 主页 > 精通Office > Ubuntu教程 >

Linux下或者Unix下自动批量修改普通用户密码的脚本

时间:2012-01-31 22:46来源:大旺国际登录网站www.zhixing123.cn 编辑:麦田守望者

方法一:
CODE:

 

view plaincopy to clipboardprint?
1.#!/bin/bash
2.#自动修改所用普通用户的密码为123456
3.
4.#这里获取的普通用户通常情况下是正确的,比如你建立用户时指定了ID是一个小于500的数字就获取不到了
5.#我在测试时有个nfsnobody用户的ID是65534,所这awk中加了个/sbin/nologin的判断过滤掉此类用户
6.userlist=$(awk 'BEGIN{FS=":"};{if($3 >= 500 && $7 !~ "/sbin/nolo\
7.gin") printf $1"\n"}' /etc/passwd)
8.
9.for i in $userlist
10.do
11.&#160; &#160;&#160; &#160;&#160;&#160;chpasswd <<< "$i:123456"
12.echo "The user $i password is ok!"
13.done

方法二:
CODE:

 

view plaincopy to clipboardprint?
1.#!/bin/bash
2.
3.userlist=$(awk 'BEGIN{FS=":"};{if($3 >= 500 && $7 !~ "/sbin/nolo\
4.gin") printf $1"\n"}' /etc/passwd)
5.
6.passwdcode=yourpasswd
7.
8.for i in $user
9.do
10.passwd $i 2> /dev/null <<EOF #错误信息丢掉如密码太过简单类的警告就不显示了
11.$passwdcode #这三行一定要从行开头写
12.$passwdcode #这三行一定要从行开头写
13.EOF #这三行一定要从行开头写
14.done

来自:http://www.linuxdiyf.com/viewarticle.php?id=203102


Unix及FreeBSD的密码生成情况:
自动更改口令由两部分组成.即自动口令生成,及口令设置.

1. 口令生成.口令生成比较简单,你可以根据时间、日期、IP、MAC等进行一系统的换算然后取其中一些字符即可。

 

2.口令设置

 

Linux下的口令设置比较简单.因为LINUX下的passwd支撑stdin参数,即可以从标准输入接收口令.

如要更改口令为 1234.即可做如下操作:

cat "1234" > pass.file

passwd root --stdin < pass.file

这样,root口令即在无干扰情况下被更改,

 

BSD下可能会比较复杂.因为BSD下的passwd不支撑stdin或类似参数.可以只能考虑其它方式.

UNIX类操作系统的的口令加密一般会使用crypt 函数进行的加密算法.其使用方法如下:

char *crypt(const char *key, const char *salt);

 

其一个使用实例如下:

crypt("mypassword", "$1$ZsQMTk6T$e");

这样你输入原始口令后,通过这个函数即可产出密文.

在/etc/passwd文中,在特定的位置保存着密文.这时,大家只要把得到的密文通过文件操作,换掉原来的密文即可.

由于BSD等BSD类UNIX系统,其并不直接使用/etc/passwd,而且使用一个数据库文件,所以还需要实行pwd_mkdb来生成DB文件.

 

参考代码如下:

//genpasswd (脚本)

#!/bin/sh
IP=`ifconfig eth0|grep "inet addr"|awk '{print $2}'|awk -F ":" '{print $2}'`
echo `date` $IP $1 >/tmp/pass
md5sum /tmp/pass.1
expr substr `cat /tmp/pass.1|awk '{print $1}'` 3 10

 

genpass.c //用于根据原始密码生成密文

int main(int argc, char **argv)
{
if (argc != 2) {
printf("Usage: %s pass\n");
return -1;
}
printf("%s\n", crypt(argv[1], "$1$ZsQMTk6T$e"));
}

用于更改密码:(脚本)

#!/bin/sh
if [ $# -ne 1 ];then
echo "Usage: "
exit
fi

password=`/usr/sbin/genpasswd $1`
passwd=`/usr/bin/genepass $password`
username=`grep -i -w $1 /etc/passwd|awk -F: '{print $1}'`
echo $username

echo $1 $username $password >>/root/mychpass.log
exit
cat /etc/master.passwd | awk -v user=$username -v pass=$passwd -F: '{if ($1 == user) {print $1 ":" pass":" $3 ":" $4 ":" $5 ":" $6 ":" $7 ":" $8 ":" $9 ":" $10} else {print}}' /etc/master.passwd > /tmp/master.passwd.tmp

mv /tmp/master.passwd.tmp /etc/master.passwd
/usr/sbin/pwd_mkdb /etc/master.passwd

这样,新密码即生效了.

当然,以上方法稍作修改也可以用于LINUX类操作系统

------分隔线----------------------------
标签(Tag):Linux 操作系统
------分隔线----------------------------
推荐内容
猜你感兴趣
XML 地图 | Sitemap 地图