В чем разница между «passwd» и «chpasswd»?

14

Я прочитал описание этих команд из книги,
passwd:

Изменяет пароль для существующего пользователя.

chpasswd:

Читает файл пар имени пользователя и пароля и обновляет пароли.

Кажется, эти команды выполняют одну и ту же работу. Есть ли разница между ними?

РЕДАКТИРОВАТЬ:

Я хочу узнать, когда мы их используем, какие файлы меняются. Они меняют один и тот же файл или другой файл? Если они меняют разные файлы, что они?

metarose
источник
2
/etc/passwordсодержит информацию об учетной записи пользователя. /etc/shadowсодержит зашифрованные пароли. Я считаю, что это единственные файлы, которые имеют отношение к делу. Вы можете изменить пароль, отредактировав эти файлы вручную, но это будет очень неудобно.
SauceCode

Ответы:

18

От man chpasswd:

«Эта команда предназначена для использования в большой системной среде, где одновременно создается много учетных записей».

passwd (по моему опыту) обычно используется в интерактивном режиме для одного пользователя.

SauceCode
источник
7

Смотрите справочные страницы для них обоих:

ИМЯ

    chpasswd - обновить пароли в пакетном режиме

СИНТАКСИС

    chpasswd [параметры]

ОПИСАНИЕ

    Команда chpasswdчитает список пар имени пользователя и пароля из стандартного ввода и использует эту информацию для обновления группы существующих пользователей. Каждая строка имеет формат:

       имя пользователя Пароль


ИМЯ

    passwd - изменить пароль пользователя

СИНТАКСИС

    passwd [опции] [ВХОД]

ОПИСАНИЕ

    Команда passwdменяет пароли для учетных записей пользователей. Обычный пользователь может изменить пароль только для своей учетной записи, в то время как суперпользователь может изменить пароль для любой учетной записи.  passwdтакже меняет учетную запись или связанный срок действия пароля.

MrRolling
источник
7

В двух словах:

  • passwdпроверяет, подключен ли STDIN (дескриптор файла 0) к терминалу, используя isatty(0). Если нет, passwdвыручил бы, т.е. вы можете работать только в passwdинтерактивном режиме.

  • chpasswdс другой стороны, он предназначен для чтения (имя пользователя и) пароля из STDIN и называется пакетным режимом (создает / обновляет несколько учетных данных пользователя одновременно). Он считывает пароль (и) (по умолчанию в открытом тексте) и имя пользователя (ов) из STDIN, заданные в формате user_name:password, с новой строкой, разделяющей записи

heemayl
источник
0

Я обнаружил, что хотя

echo user:password | chpasswd

работает для некоторых ОС, но некоторые ОС, такие как debian9,10, будут показывать ошибку, can not connect to /var/run/nscd/socketтак как они используют /etc/nsswitch.conf, чтобы определить, где хранится пароль.

С другой стороны, passwdкоманда, кажется, не нуждается в интерактивной оболочке,

(echo user; echo password) | passwd

у меня работает как на физическом хосте, так и в контейнере, для разных ОС (ubuntu xenial-bionic, debian9-10, centos75-76, coreos1855-2135)

osexp2003
источник