方法一:
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. 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 <
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类操作系统