方法一:
CODE:
方法二:
CODE:
来自: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类操作系统.
来自:http://hbaolong.bokee.com/960891.html
CODE:
方法二:
CODE:
来自: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类操作系统.
来自:http://hbaolong.bokee.com/960891.html
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/4923/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
评论列表
2012-2-2 09:05 | hxngb8ff
辛苦了,祝大家新春快乐
分页: 1/1 1