“ passwd”和“ chpasswd”有什么区别?


14

我从一本书passwd中阅读了这些命令的描述

更改现有用户的密码。

chpasswd:

读取登录名和密码对的文件,并更新密码。

看来这些命令执行相同的工作。它们之间有区别吗?

编辑:

我想学习何时使用它们更改哪个文件。他们更改相同文件还是不同文件?如果他们更改了不同的文件,它们是什么?


2
/etc/password包含用户帐户信息。/etc/shadow包含加密的密码。我相信这些是唯一相关的文件。您可以通过手动编辑这些文件来更改密码,但这很麻烦。
SauceCode '17

Answers:


18

来自man chpasswd

“此命令旨在用于大型系统环境,在该环境中一次创建多个帐户。”

passwd (以我的经验)通常是单个用户交互使用的。


7

参见两个手册页:

名称

    chpasswd-以批处理方式更新密码

概要

    chpasswd [选项]

描述

    chpasswd命令从标准输入中读取用户名和密码对的列表,并使用此信息来更新一组现有用户。每行的格式为:

       用户名密码


名称

    passwd-更改用户密码

概要

    passwd [选项] [登录]

描述

    passwd命令更改用户帐户的密码。普通用户只能更改自己帐户的密码,而超级用户可以更改任何帐户的密码。  passwd还更改了帐户或关联的密码有效期。


7

简而言之:

  • passwd使用来检查STDIN(文件描述符0)是否已连接到终端isatty(0)。如果没有,passwd将纾困,即您只能以passwd交互方式工作

  • chpasswd另一方面,被设计为从STDIN读取(用户名和)密码,并且被称为批处理模式(一次创建/更新多个用户凭据)。它从STDIN读取密码(默认情况下为明文)和用户名,格式为user_name:password,用换行符分隔条目


0

我发现虽然

echo user:password | chpasswd

适用于某些操作系统,但是某些操作系统(例如debian9,10)将显示错误,can not connect to /var/run/nscd/socket因为它使用/etc/nsswitch.conf来确定密码的存储位置。

另一方面,该passwd命令似乎不需要交互式shell,

(echo user; echo password) | passwd

适用于我在物理主机和容器中使用的各种操作系统(ubuntu xenial-bionic,debian9-10,centos75-76,coreos1855-2135)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.