linux12345是用户合法口令吗,Linux下或者Unix下自动批量修改普通用户密码的脚本...

方法一:

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类操作系统

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值