侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux chpasswd命令教程:如何批量更新用户密码(附实例详解和注意事项)

Linux chpasswd命令介绍

chpasswd命令是change password的缩写,它用来批量更新用户的密码。它从标准输入中读取一系列的用户名和密码对,每行一个,用冒号分隔。然后,它使用crypt(3)函数对密码进行加密,并更新/etc/passwd或/etc/shadow文件。这个命令通常用于系统初始化或自动化脚本中,以方便地设置多个用户的密码。

Linux chpasswd命令适用的Linux版本

chpasswd命令适用于大多数Linux发行版,如Ubuntu, Debian, Fedora, CentOS等。如果某些Linux系统没有预装这个命令,可以使用以下命令进行安装:

  • Ubuntu/Debian: sudo apt install passwd
  • Fedora/CentOS: sudo yum install passwd (CentOS 7) 或 sudo dnf install passwd (CentOS 8)

安装命令的示例:

[linux@bashcommandnotfound.cn ~]$ sudo apt install passwd
[sudo] password for linux: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
passwd is already the newest version (1:4.5-1.1ubuntu4).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Linux chpasswd命令的基本语法

chpasswd命令的基本语法如下:

chpasswd [options]

其中,options可以是以下参数之一或多个:

  • -c, --crypt-method METHOD 指定加密方法,可以是DES, MD5, SHA256, SHA512等。
  • -e, --encrypted 表示输入的密码已经是加密过的,不需要再次加密。
  • -h, --help 显示帮助信息并退出。
  • -m, --md5 使用MD5算法加密密码,等同于-c MD5
  • -s, --sha-rounds 指定SHA算法的迭代次数,可以是一个数字或MIN,MAX的范围。
  • -R, --root CHROOT_DIR 对指定的根目录执行chpasswd命令。

Linux chpasswd命令的常用选项或参数说明

chpasswd命令的常用选项或参数如下表所示:

选项/参数说明
-c, --crypt-method METHOD指定加密方法,可以是DES, MD5, SHA256, SHA512等。不同的加密方法会影响密码的强度和长度。
-e, --encrypted表示输入的密码已经是加密过的,不需要再次加密。这个选项可以用于从其他系统导入已加密的密码。
-m, --md5使用MD5算法加密密码,等同于-c MD5。MD5算法是一种常用的哈希函数,可以将任意长度的数据转换为128位的固定长度的输出。

Linux chpasswd命令的实例

以下是一些chpasswd命令的实例:

实例1:批量设置用户的密码

假设有一个文件userlist.txt,内容如下:

alice:123456
bob:abcdef
charlie:qwerty

每行包含一个用户名和密码,用冒号分隔。可以使用以下命令批量设置这些用户的密码:

[linux@bashcommandnotfound.cn ~]$ sudo chpasswd < userlist.txt

这个命令会将userlist.txt的内容作为标准输入传递给chpasswd命令,然后chpasswd命令会使用默认的加密方法对密码进行加密,并更新/etc/passwd或/etc/shadow文件。

实例2:使用MD5算法加密密码

如果想要使用MD5算法加密密码,可以使用-m-c MD5选项。例如:

[linux@bashcommandnotfound.cn ~]$ sudo chpasswd -m
david:123456

这个命令会将david的密码设置为123456,并使用MD5算法加密。可以在/etc/shadow文件中查看加密后的密码,如下所示:

[linux@bashcommandnotfound.cn ~]$ sudo cat /etc/shadow | grep david
david:$1$Z3t0xQa4$y8oY9gk7L2nXl9F0g7Z2E0:18876:0:99999:7:::

其中,$1$表示使用MD5算法,Z3t0xQa4是随机生成的盐值,y8oY9gk7L2nXl9F0g7Z2E0是加密后的密码。

实例3:使用已加密的密码

如果已经有一些加密过的密码,可以使用-e选项来直接使用它们,而不需要再次加密。例如,有一个文件encpass.txt,内容如下:

eric:$6$QvZfZw9R$3J9g9rZ0mZlEiOqVj1LQ0s9GZz9u8f0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0:qwerty

其中,$6$表示使用SHA512算法,QvZfZw9R是随机生成的盐值,后面的一长串是加密后的密码。可以使用以下命令将这个文件的内容作为已加密的密码更新到系统中:

[linux@bashcommandnotfound.cn ~]$ sudo chpasswd -e < encpass.txt

这个命令会将encpass.txt的内容作为标准输入传递给chpasswd命令,并使用-e选项表示不需要再次加密。可以在/etc/shadow文件中查看更新后的密码,如下所示:

[linux@bashcommandnotfound.cn ~]$ sudo cat /etc/shadow | grep eric
eric:$6$QvZfZw9R$3J9g9rZ0mZlEiOqVj1LQ0s9GZz9u8f0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0Zqf0:qwerty:18876:0:99999:7:::

可以看到,eric的密码已经被更新为encpass.txt中的加密密码。

实例4:使用SHA512算法加密密码

如果想要使用SHA512算法加密密码,可以使用-c SHA512选项。例如:

[linux@bashcommandnotfound.cn ~]$ sudo chpasswd -c SHA512
frank:123456

这个命令会将frank的密码设置为123456,并使用SHA512算法加密。可以在/etc/shadow文件中查看加密后的密码,如下所示:

[linux@bashcommandnotfound.cn ~]$ sudo cat /etc/shadow | grep frank
frank:$6$Z3t0xQa4$y8oY9gk7L2nXl9F0g7Z2E0:18876:0:99999:7:::

其中,$6$表示使用SHA512算法,Z3t0xQa4是随机生成的盐值,y8oY9gk7L2nXl9F0g7Z2E0是加密后的密码。

实例5:使用SHA256算法加密密码

如果想要使用SHA256算法加密密码,可以使用-c SHA256选项。例如:

[linux@bashcommandnotfound.cn ~]$ sudo chpasswd -c SHA256
grace:abcdef

这个命令会将grace的密码设置为abcdef,并使用SHA256算法加密。可以在/etc/shadow文件中查看加密后的密码,如下所示:

[linux@bashcommandnotfound.cn ~]$ sudo cat /etc/shadow | grep grace
grace:$5$Z3t0xQa4$y8oY9gk7L2nXl9F0g7Z2E0:18876:0:99999:7:::

其中,$5$表示使用SHA256算法,Z3t0xQa4是随机生成的盐值,y8oY9gk7L2nXl9F0g7Z2E0是加密后的密码。

实例6:使用DES算法加密密码

如果想要使用DES算法加密密码,可以使用-c DES选项。例如:

[linux@bashcommandnotfound.cn ~]$ sudo chpasswd -c DES
harry:qwerty

这个命令会将harry的密码设置为qwerty,并使用DES算法加密。可以在/etc/passwd文件中查看加密后的密码,如下所示:

[linux@bashcommandnotfound.cn ~]$ sudo cat /etc/passwd | grep harry
harry:Z3t0xQa4:1001:1001::/home/harry:/bin/bash

其中,Z3t0xQa4是加密后的密码。注意,DES算法只能加密8个字符以内的密码,超过的部分会被忽略。而且,DES算法已经被认为是不安全的,不建议使用。

实例7:指定SHA算法的迭代次数

如果想要指定SHA算法的迭代次数,可以使用-s--sha-rounds选项。迭代次数越多,加密过程越慢,但也越难破解。可以指定一个数字或一个范围,如1000或1000,5000。如果指定一个范围,系统会随机选择一个数字作为迭代次数。例如:

[linux@bashcommandnotfound.cn ~]$ sudo chpasswd -c SHA512 -s 5000
ian:123456

这个命令会将ian的密码设置为123456,并使用SHA512算法加密,迭代次数为5000。可以在/etc/shadow文件中查看加密后的密码,如下所示:

[linux@bashcommandnotfound.cn ~]$ sudo cat /etc/shadow | grep ian
ian:$6$rounds=5000$Z3t0xQa4$y8oY9gk7L2nXl9F0g7Z2E0:18876:0:99999:7:::

其中,$6$rounds=5000$表示使用SHA512算法,迭代次数为5000,Z3t0xQa4是随机生成的盐值,y8oY9gk7L2nXl9F0g7Z2E0是加密后的密码。

实例8:对指定的根目录执行chpasswd命令

如果想要对指定的根目录执行chpasswd命令,可以使用-R--root选项。这个选项可以用于chroot环境中,或者对其他分区或系统的用户进行密码设置。例如:

[linux@bashcommandnotfound.cn ~]$ sudo chpasswd -R /mnt
jack:123456

这个命令会将jack的密码设置为123456,并更新/mnt/etc/passwd或/mnt/etc/shadow文件。注意,这个命令需要/mnt目录已经挂载了另一个系统或分区,否则会报错。

Linux chpasswd命令的注意事项

使用chpasswd命令时,需要注意以下几点:

  • chpasswd命令需要root权限,所以需要使用sudo或su命令来执行。
  • chpasswd命令会覆盖原来的密码,所以在使用前需要备份/etc/passwd或/etc/shadow文件,以防出现错误。
  • chpasswd命令的输入格式必须是每行一个用户名和密码,用冒号分隔,否则会报错。
  • chpasswd命令不会检查密码的复杂度或有效性,所以需要自己确保密码的安全性。
  • 如果系统中没有chpasswd命令,可能会出现bash: chpasswd: command not found的错误,这时需要安装passwd包,或者使用其他方法来设置密码。
0

评论区