Zmień hasło programowo

12

W obecnej wersji Raspian wiem, że można zmienić hasło aktualnie zalogowanego użytkownika z wiersza poleceń w następujący sposób:

sudo passwd

co spowoduje wyświetlenie monitu o dwukrotne wprowadzenie nowego hasła. Spowoduje to wytworzenie danych wyjściowych w następujący sposób:

Changing password for pi.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

Zastanawiałem się, czy istnieje możliwość programowej zmiany hasła, na przykład ze skryptu powłoki.

Próbuję utworzyć skrypt konfiguracyjny do wdrożenia na moim Raspberry Pis i nie chcę ręcznie wpisywać dla nich nowych haseł.

James Taylor
źródło
1
Aby zmienić hasło bieżącego użytkownika, nie musisz używać prefiksu sudo. Jeśli go użyjesz sudo, możesz wymusić nowe hasło dla dowolnego użytkownika bez konieczności znajomości aktualnego hasła tego użytkownika.
roaima,
expect(1)może również pomóc.
SailorCire,
Pamiętaj, aby wziąć pod uwagę wpływ na bezpieczeństwo przy programowej zmianie haseł.
Josh Habdas

Odpowiedzi:

19

Szukasz chpasswdpolecenia. Zrobiłbyś coś takiego:

echo 'pi:newpassword' | chpasswd # change user pi password to newpassword

Pamiętaj, że należy go uruchomić jako root, przynajmniej z domyślną konfiguracją PAM. Ale prawdopodobnie uruchamiany jako root nie stanowi problemu dla skryptu wdrażania systemu.

Ponadto możesz wykonywać wielu użytkowników jednocześnie, zasilając je wieloma wierszami danych wejściowych.

derobert
źródło
9

Inną alternatywą jest użycie yespolecenia w skrypcie.

yes newpassword | passwd youruser

Spowoduje to wysłanie newpassworddo passwdpolecenia dla youruser.

Należy wspomnieć, że ustawianie / modyfikowanie haseł użytkowników za pomocą skryptów może stanowić zagrożenie bezpieczeństwa i należy tego unikać, gdy tylko jest to możliwe.

EDYTOWAĆ:

Ta odpowiedź wymaga dostępu do konta root. Przepraszamy za wcześniejsze wzmianki o tym. Jest to metoda, której używam podczas wykonywania zadań administracyjnych wymagających dostępu do konta root.

Timothy Martin
źródło
Próbowałeś tego?
roaima,
Tak. Z tej metody korzystam od lat. Przetestowałem to przed opublikowaniem mojej odpowiedzi i jeszcze teraz.
Timothy Martin,
Nawet zakładając, że passwdczyta się z stdinterminala, a nie z terminala (klawiatury), jak to może działać, gdy passwdnajpierw monituje o stare hasło użytkownika, a następnie monituje o nowe?
roaima,
@roaima prawdopodobnie Timothy uruchamia go jako root (co wyjaśniałoby, dlaczego potrzebuje youruserna końcu). Może gdzieś zadziała ...
derobert
1
@roaima passwdPolecenie z narzędzi cień Linuksa przyjmuje przekierowane dane wejściowe (w przeciwieństwie do np. OpenSSH ssh). Używanie yesnie jest jednak dobrym pomysłem: ujawnia hasło szpiegom, którzy patrzą na listę procesów w niewłaściwym czasie. Użycie echonie miałoby tej wady, ponieważ jest to wbudowana powłoka.
Gilles „SO- przestań być zły”