目录
60. shell命令--chpasswd
功能说明
chpasswd 命令在 Linux 系统中用于批量更新用户的密码。这个命令非常有用,特别是在批量创建用户并需要为这些用户设置初始密码时,或者是在需要快速更新多个用户密码的场景中。chpasswd 读取标准输入中的用户名和密码对(格式为 用户名:密码),然后更新这些用户的密码。
chpasswd 命令是批量更新用户口令的工具,是把一个文件内容重新定向添加到 /etc/shadow 中。 chpasswd 命令从系统的标准输入读入用户的名称和口令,并利用这些信息来更新系统上已存在的用户的口令。
但是,由于 chpasswd 主要从标准输入(stdin)读取用户名和密码对,因此它通常与 echo 或其他命令的管道(pipe)一起使用,或者通过重定向(redirection)从文件中读取。
语法格式
chpasswd [<选项>]
SYNOPSIS
chpasswd [options]
选项说明
-e:输入的密码是加密后的密文;
-h:显示帮助信息并退出;
-m:当被支持的密码未被加密时,使用MD5加密代替DES加密。
实践操作
0. 环境准备
seq 6 |sed -r 's#(.*)#useradd usertest-\1#g' |bash #批量创建5个普通用户
tail -6 /etc/passwd
1. 直接修改用户 usertest-1 的密码为 usertest-1
tail -6 /etc/shadow
echo usertest-1:usertest-1 |chpasswd
tail -6 /etc/shadow
2. 命令行直接输入并执行
tail -6 /etc/shadow
chpasswd #在新的一行中输入用户名和密码,按Ctrl+d结束输入,若中途输入错了,按住Ctrl键在按退格就行了
#usertest-2:usertest-2
#usertest-3:usertest-3
tail -6 /etc/shadow
3. 从写好的文件中执行
echo -e "usertest-4:usertest-4\nusertest-5:usertest-5" >passwd.txt
cat passwd.txt
tail -3 /etc/shadow
chpasswd <passwd.txt
tail -3 /etc/shadow
4. 让普通用户使用 chpasswd
# 默认普通用户是没有chpasswd的权限,但是可以通过修改命令文件权限来修改
ll /usr/sbin/chpasswd
su - usertest-1
whoami
echo usertest-6:usertest-6 |chpasswd
logout
chmod 4755 /usr/sbin/chpasswd
ll /usr/sbin/chpasswd
su - usertest-1
echo usertest-6:usertest-6 |chpasswd
tail -1 /etc/shadow
logout
tail -1 /etc/shadow
注意事项
- 权限问题:更新用户密码通常需要超级用户权限,因此可能需要使用 sudo。
- 安全性:直接在命令行中使用 echo 或文件来传递密码可能存在安全风险,因为这些命令和文件可能会保留在命令历史或系统中。确保处理密码的方式符合你的安全政策。
- 加密:chpasswd 命令处理的密码不是加密的,而是直接以明文形式处理。但是,一旦密码被设置,它们就会在系统中以加密形式存储。
- 密码策略:确保你设置的密码符合系统的密码策略要求,比如长度、复杂度等。
- 使用临时文件:将用户名和密码对写入一个临时文件,并确保该文件具有适当的权限(如仅所有者可读写),然后立即使用 chpasswd 读取该文件,并在完成后删除该文件。
- 避免命令历史记录:在 Bash 中,可以通过在命令前添加空格来防止该命令被记录到历史中(尽管这不是完全安全的,因为其他工具可能仍然捕获到命令)。
- 加密存储:虽然 chpasswd 本身不处理加密的密码,但可以在将密码写入文件之前使用加密工具(如 openssl)对密码进行加密,然后在脚本中解密并使用。然而,这种方法增加了复杂性,并且需要确保解密密钥的安全。