chpasswd - update passwords in batch mode
- chpasswd 是一个批量更新用户口令的命令
- chpasswd 会从标准输入批量读取成对的用户名和密码,并使用这些信息来更新现有的一组
用户 - 从标准输入读取的每行数据格式应为 username:password 即用户名和密码用冒号分隔开
- 默认情况下所提供的密码必须是明文,并通过chpasswd进行加密
- chpasswd 首先在内存中更新密码,在没有任何错误的情况下才会将更改的密码更新到磁盘中
- chpasswd 的应用场景主要是在一个比较大的系统环境下,同一时间创建了多个用户的情况
- 默认的加密算法可以通过修改/etc/login.defs中ENCRYPT_METHOD变量的值(默认值SHA512),可以通过-e,-m,-c选项覆盖默认的加密算法
常用选项如下:
-c 使用指定的方法来加密密码,可用的方法是DES、MD5、NONE、SHA512(前提是你的系统支持这些加密算法)
-e 输入的密码是加密后的密码
-m 当提供的密码没有加密时,使用MD5代替DES加密
-s 使用指定的rounds数值加密密码(SHA加密算法)
- 如果指定的数值为0将使用默认的rounds数值5000
- 数值的范围在1000到999999999之间
- 可以使用-s参数跟上SHA256或SHA512
- 默认的最小和最大rounds定义在/etc/login.defs文件的SHA_CRYPT_MIN_ROUNDS和SHA_CRYPT_MAX_ROUNDS变量中
配置说明:下面列出的所有配置项都可以通过修改/etc/login.defs中的配置来生效
ENCRYPT_METHOD 该值定义了chpasswd默认的加密算法,该变量的值可以定义为:DES(默认)、MD5、SHA256、SHA512
SHA_CRYPT_MIN_ROUNDS 当ENCRYPT_METHOD的值定义为SHA256或SHA512时,将使用该变量的值作为SHA加密算法的最小rounds值
SHA_CRYPT_MAX_ROUNDS 当ENCRYPT_METHOD的值定义为SHA256或SHA512时,将使用该变量的值作为SHA加密算法的最大rounds值
- SHA_CRYPT_MIN_ROUNDS 和 SHA_CRYPT_MAX_ROUNDS 默认没有在/etc/login.defs文件中定义,一旦定义将被采用,如果没有定义则使用5000作为默认的rounds值
- SHA_CRYPT_MIN_ROUNDS 和 SHA_CRYPT_MAX_ROUNDS的取值范围为1000-999999999
- 如果SHA_CRYPT_MIN_ROUNDS > SHA_CRYPT_MAX_ROUNDS,将取SHA_CRYPT_MIN_ROUNDS的值作为默认rounds值
基本使用:
[root@prenv ~]# useradd chtest
[root@prenv ~]# chpasswd
chtest:123456
[root@prenv ~]# echo "chtest:123456" > passwd.txt
[root@prenv ~]# chpasswd < passwd.txt