不得不感叹一下,网上的水军真是多,今天就搜了“Linux批量修改密码”,发现网上的都是一个样,我要的是sha512的密码。
1、批量创建用户
创建用户,需要用到useradd和newusers,useradd就不多说了,newusers是用来批量创建和修改用户的命令。
使用它需要先建立一个用户账号文件,文件格式需要和passwd文件格式一样。
下面我来创建用户文件:
[root@CentOS7 root]# newusers users.txt
[root@CentOS7 root]# tail -4 /etc/passwd #下面是user.txt文件的内容,发现已经创建成功
user1:x:1011:1011::/home/user:/bin/bash
user2:x:1012:1011::/home/user:/bin/bash
user3:x:1013:1011::/home/user:/bin/bash
user4:x:1014:1011::/home/user:/bin/bash
2、批量设置密码
2.1、使用passwd和--stdin组合
我们通常使用的命令是这样的:
[root@CentOS7 root]# echo "centos" |passwd --stdin user1
Changing password for user user1.
passwd: all authentication tokens updated successfully.
优点:方便快捷,不需要交互式更改密码,这样就可以在shell脚本中直接使用这个命令修改密码了
缺点:如果你输入的指令能被别人通过history或者其他方式捕获,那么这样的方式是很不安全的,更重要的是如果密码同时含有单引号和双引号,那么则无法通过这种方法修改。另外其它的一些发行版(如Debian/Suse)所提供的passwd并不支持--stdin这个参数
2.2、使用chpasswd
2.2.1、chpasswd未加密密码
chpasswd其实是通过用户输入'用户名:密码'来更改一组用户的密码,还是读取文件里的内容,文件格式也是'用户名:密码',也就成为了一个可以批量修改密码的工具。
格式1
:# echo 用户名:密码 | chpasswd
[root@CentOS7 root]# echo "user1:redhat"|chpasswd
格式2:
:#cat passwd.txt | chpasswd(centos7)
:#chpasswd < passwd.txt(centos 6以前)
[root@CentOS7 root]# cat file |chpasswd #即可成功
#注意文件不能有空行
#文件符合user:passwd形式
2.2.2、chpasswd加密密码
chpasswd -e选项是可以使用加密方式来加密的,让我们先来生成密码
[root@CentOS7 root]# openssl passwd -1 12345678 > file
#然后进入file里面,添加上用户名,让其符合user:passwd形式
[root@CentOS7 root]# cat file |chpasswd -e #就成功了
说明:openssl passwd用来生成MD5的加密密码。
密码虽然一样,但是如果你执行第二次,则会发现不一样,是因为它是以时间来“加盐”?
加盐就是使用一个字符串来对另一个字符串进行加密,如果使用的盐不一样,则生成的密码自然就不一样。
使用同样的"盐",则生成密码一样
[root@CentOS7 root]# openssl passwd -1 -salt 'abc' 123456
$1$abc$mJPQCTATLDV5aNzcHMYLr/
[root@CentOS7 root]# openssl passwd -1 -salt 'abc' 123456
$1$abc$mJPQCTATLDV5aNzcHMYLr/
注意:我们centos6以后的系统默认都是sha512进行加密的,因为使用MD5加密早就被破解了,但是使用生成的MD5也可以当做密码,是因为每一个密码前面都有一个字符来表示密码加密的算法,比如上面的密码,1代表MD5,6则代表sha512.
网上说了一大堆,都只是生成了MD5,没人生成sha512的密码,后来网上一查,发现要想生成sha512需要使用脚本来生成。(以后一定自己写一个可以生成sha512密码的脚本)