Jaka jest różnica między „passwd” a „chpasswd”?

14

Przeczytałem opis tych poleceń z książki
passwd:

Zmienia hasło dla istniejącego użytkownika.

chpasswd:

Odczytuje plik par nazwy użytkownika i hasła oraz aktualizuje hasła.

Wygląda na to, że te polecenia wykonują te same zadania. Czy jest między nimi jakaś różnica?

EDYTOWAĆ:

Chcę się dowiedzieć, kiedy ich używamy, które pliki zmieniają się. Czy zmieniają ten sam plik czy inny plik? Jeśli zmieniają różne pliki, czym one są?

metaroza
źródło
2
/etc/passwordzawiera informacje o koncie użytkownika. /etc/shadowzawiera zaszyfrowane hasła. Uważam, że są to jedyne istotne pliki. Możesz zmienić hasło ręcznie edytując te pliki, ale byłoby to bardzo niewygodne.
SauceCode

Odpowiedzi:

18

Od man chpasswd:

„To polecenie jest przeznaczone do użycia w dużym środowisku systemowym, w którym wiele kont jest tworzonych jednocześnie”.

passwd jest (z mojego doświadczenia) zwykle używany interaktywnie dla jednego użytkownika.

SauceCode
źródło
7

Zobacz strony podręcznika dla obu z nich:

NAZWA

    chpasswd - aktualizuj hasła w trybie wsadowym

STRESZCZENIE

    chpasswd [opcje]

OPIS

    The chpasswdPolecenie odczytuje listę nazwa użytkownika i hasło parach ze standardowego wejścia i wykorzystuje te informacje do aktualizacji grupy istniejących użytkowników. Każda linia ma format:

       Nazwa użytkownika Hasło


NAZWA

    passwd - zmień hasło użytkownika

STRESZCZENIE

    passwd [opcje] [LOGOWANIE]

OPIS

    passwdPolecenie zmienia haseł do kont użytkowników. Normalny użytkownik może zmienić hasło tylko do swojego konta, a administrator może zmienić hasło do dowolnego konta.  passwdzmienia również konto lub powiązany okres ważności hasła.

MrRolling
źródło
7

W skrócie:

  • passwdsprawdza, czy STDIN (deskryptor pliku 0) jest dołączony do terminala, używając isatty(0). Jeśli nie, passwdwyskoczy, tzn. Możesz pracować tylko passwdinteraktywnie

  • chpasswd, z drugiej strony, jest przeznaczony do odczytu (nazwy użytkownika i) hasła ze STDIN i nazywa się trybem wsadowym (tworzy / aktualizuje wiele poświadczeń użytkownika jednocześnie). Odczytuje hasło (domyślnie zwykły tekst) i nazwy użytkownika ze STDIN, podane w formacie user_name:password, z nową linią oddzielającą wpisy

heemayl
źródło
0

Chociaż to znalazłem

echo user:password | chpasswd

działa dla niektórych systemów operacyjnych, ale niektóre systemy operacyjne, takie jak debian9,10, będą wyświetlać błąd, can not connect to /var/run/nscd/socketponieważ używają /etc/nsswitch.conf do określenia miejsca przechowywania hasła.

Z drugiej strony passwdwydaje się , że polecenie nie wymaga interaktywnej powłoki,

(echo user; echo password) | passwd

działa dla mnie zarówno w fizycznym hoście, jak i kontenerze, dla różnych systemów operacyjnych (ubuntu xenial-bionic, debian9-10, centos75-76, coreos1855-2135)

osexp2003
źródło