Ręcznie wygeneruj hasło do / etc / shadow


109

Muszę ręcznie edytować, /etc/shadowaby zmienić hasło roota w obrazie maszyny wirtualnej.

Czy istnieje narzędzie wiersza polecenia, które pobiera hasło i generuje /etc/shadowzgodny skrót hasła przy standardowym wyjściu?

Odpowiedzi:


126

Do tego samego możesz użyć następujących poleceń:

Metoda 1 (MD5, SHA256, SHA512)

openssl passwd -6 -salt xyz  yourpass

Uwaga: przekazanie -1wygeneruje hasło MD5, -5SHA256 i -6SHA512 (zalecane)

Metoda 2 (MD5, SHA256, SHA512)

mkpasswd --method=SHA-512 --stdin

Metody przyjmuje md5, sha-256isha-512

Metoda 3 (des, md5, sha256, sha512)

Zgodnie z sugestią @tink możemy zaktualizować hasło za chpasswdpomocą:

echo "username:password" | chpasswd 

Lub możesz użyć zaszyfrowanego hasła za pomocą chpasswd. Najpierw wygeneruj za pomocą:

perl -e 'print crypt("YourPasswd", "salt", "sha512"),"\n"'

Następnie możesz użyć wygenerowanego hasła do aktualizacji:

echo "username:encryptedPassWd"  | chpasswd -e

To zaszyfrowane hasło możemy wykorzystać do utworzenia nowego użytkownika z hasłem, na przykład:

useradd -p 'encryptedPassWd'  username

3
Podczas używania chpasswd -epamiętaj, aby używać pojedynczych cudzysłowów w ciągu echo; w przeciwnym razie, jeśli istnieją $lub inne znaki specjalne, nie zostaną potraktowane dosłownie.
Zags

4
Zauważ, że ich marka znajdzie się w twojej historii powłoki. Użyłbym, openssl passwd -1które 1) tam się nie kończy, a 2) generuje dla ciebie losową sól (która również nie trafia do historii muszli).
Ztyx,

1
openssl passwddokumentacja dla każdego, kto próbuje dowiedzieć się, co -1robi opcja.
CivFan

4
W przypadku skrótu SHA-512: python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'- z powiązanego pytania
ServerFault

9
Metoda 1) i 2) powyżej wykorzystuje MD5 do mieszania. MD5 nie jest już uważany za najlepszą praktykę, ponieważ doszło do kolizji haszujących. Użyj metody 3) lub tej opisanej w unix.stackexchange.com/a/198906/10911 .
Ztyx 11.01.16

36

W Ubuntu 12.04 jest mkpasswd (z pakietu whois): Nadmierny interfejs użytkownika do crypt (3)

mkpasswd  -m sha-512 -S saltsalt -s <<< YourPass

Gdzie:

  • -m= Oblicz hasło przy użyciu metody TYPE. Jeśli TYPE jest pomocne, drukowane są dostępne metody.
  • -S = użyta sól.

Na przykład

$ mkpasswd -m help

-s = Read password from stdin

8
Nie ma potrzeby określania soli, mkpasswd dba o wygenerowanie losowej.
Do 마 SE

1
Bez względu na to, wygenerowane hasła z mkpasswd skopiowane do / etc / passwd zawsze kończą się niepowodzeniem. Czy istnieje sposób sprawdzenia, czy skrót utworzony przez mkpasswd jest poprawny?
CMCDragonkai

@CMCDragonkai: Błędne pytanie. Musisz zapytać, czego oczekuje Twój system.
user3183018

1
@To 마 SE: Czasami przydatne jest kontrolowanie soli. Użyłem go podczas testowania generowania skrótów do aplikacji internetowej, w której przechowywałem sól w osobnym sklepie. Np. Zaszyfrowane hasło w MySQL DB i sól użytkownika w Redis.
user3183018

15

To rozwiązanie ma następujące zalety:

  • Nic dodatkowego do zainstalowania
  • Nie przechowuje hasła w historii powłoki
  • Generuje losową sól dla Ciebie
  • Wykorzystuje nowoczesny, silny algorytm mieszający SHA-512
  • Ponownie wyświetla monit o podanie hasła, aby uniknąć błędów.

    $ python3 -c "from getpass import getpass; from crypt import *; \
        p=getpass(); print('\n'+crypt(p, METHOD_SHA512)) \
        if p==getpass('Please repeat: ') else print('\nFailed repeating.')"
    

Bibliografia


3

Dla osób bez systemów opartych na Debianie. Python3 działa równie dobrze.

python3 -c 'import crypt; print(crypt.crypt("test"))'

UWAGA: Ciąg „test” to hasło, które generujemy jako zaszyfrowany ciąg.


Z jakiegoś powodu używanie crypt.mksaltnie działa podczas generowania haseł /etc/shadow. Ale metoda @ Alex131089 działa!
maulinglawns

Po prostu zmarnowałem 1,5 godziny na wypróbowanie tej metody, zanim zauważyłem komentarz. Czy ktoś może to usunąć? Nie mogę jeszcze przegłosować.
Michał F,

1
@ MichałF wygląda na to, że to nie działało, ponieważ solenie nie zostało wykonane poprawnie. Dzięki za zwrócenie na to uwagi. Usunąłem sól, ponieważ solenie zależy od systemu operacyjnego i nie jest praktyczne uwzględnianie wszystkich zakresów systemu operacyjnego w mojej odpowiedzi. Powinieneś używać metody 1 opisanej przez @RahulPatil, ponieważ pozwala ona na solenie i openssljest dość uniwersalnym narzędziem.
Greg

Nie jest wskazane, ponieważ pozostawia twoje hasło w historii powłoki.
Mark Stosberg

To znaczy, zawsze możesz wyczyścić cmd ze swojej historii powłoki
Greg

3

Żadna z obecnych metod nie jest dla mnie do zaakceptowania - albo przekazują hasło w wierszu poleceń (co kończy się w historii mojej powłoki), wymagają instalacji dodatkowych narzędzi ( python3, makepasswd), używają zakodowanych soli lub starych technik mieszania.

Ta metoda generowałaby skróty SHA-512 po wyświetleniu zapytania o hasło i używałaby losowej soli.

Metoda wykorzystująca Python 2 bez żadnych niestandardowych bibliotek:

python2 -c 'import crypt, getpass,os,base64; print crypt.crypt(getpass.getpass(), "$6$"+base64.b64encode(os.urandom(16))+"$")'

Aby to zrobić bez pytania: (Zostawi to twoje hasło w historii poleceń)

python2 -c 'import crypt, os,base64; print crypt.crypt("MyPassword", "$6$"+base64.b64encode(os.urandom(16))+"$")'

2
Aby uniknąć pozostawiania hasła w historii poleceń, możesz ustawić (przynajmniej dla bash) zmienną środowiskową HISTCONTROL na „ignorowanie”, a następnie dodać spację wiodącą przed poleceniem.
adam820

@ adam820: To jest jeden sposób ... W psułamku sekundy nadal działałoby. (Najbezpieczniejsze pozostaje użycie wersji, która wymaga podania hasła)
Gert van den Berg

2

I openssli chpasswd -epara nie działały w moim przypadku w RHEL6. Łączenie openssl passwdi usermod -pdowodzenie wykonało pracę.

Wygeneruj wartość skrótu hasła wraz z wartością soli:

$ openssl passwd -1  -salt 5RPVAd clear-text-passwd43

$1$5RPVAd$vgsoSANybLDepv2ETcUH7.

Następnie skopiuj zaszyfrowany ciąg do usermod. Pamiętaj, aby owinąć go pojedynczymi cudzysłowami.

$ usermod -p '$1$5RPVAd$vgsoSANybLDepv2ETcUH7.' root

Sprawdź to w pliku cienia.

$ grep root /etc/shadow

root:$1$5RPVAd$vgsoSANybLDepv2ETcUH7.:17774:0:99999:7:::

1

Jeszcze inną metodą generowania haseł jest użycie tego opensslnarzędzia.

Wygeneruj hasła MD5

openssl passwd -1 -salt SaltSalt SecretPassword
# output: $1$SaltSalt$FSYmvnuDuSP883uWgYBXW/

Wygeneruj hasła DES

openssl passwd -crypt -salt XR SuprScrt
# output: XR1dOp2EVMph2

3
Czym różni się to od metody 1 w odpowiedzi Rahula Patila ? Zauważ, że stary algorytm mieszania hasła oparty na DES zdecydowanie nie powinien być używany! Po pierwsze, obsługuje tylko hasła do ośmiu bajtów, co w dzisiejszych czasach jest bardzo nieodpowiednie.
CVn

3
Cytując Snowdena: „Załóżmy, że twój przeciwnik potrafi zgadywać jeden trylion zgadnięć na sekundę”. Z niezupełnie nierozsądnym zestawem znaków składającym się z 70 znaków i całkowicie losowym hasłem, to 576 sekund - mniej niż dziesięć minut. Nawet w stosunku do mniej zdolnego, ale zdeterminowanego przeciwnika, jest on żałośnie nieodpowiedni .
CVn

Nie jest to zbyt bezpieczne, ponieważ MD5 i DES ...
AdamKalisz

Dziękujemy za bycie jedyną odpowiedzią pokazującą, jak szyfrować hasła DES! Bardzo przydatny do próby zastąpienia hasła roota oprogramowania układowego kamery IP.
Malvineous

1

Rozwijając nieco krytykę u150825 i Gert van den Berg, odkryłem, że potrzebuję czegoś stosunkowo elastycznego w różnych sytuacjach z różnymi systemami automatyki. Postanowiłem dodać do mojej małej biblioteki przydatnych skryptów i napisać to. Używa tylko rodzimych bibliotek z Python 2.7+ i działa równie dobrze na Python3.

Możesz go tutaj odebrać, jeśli chcesz. Równie łatwo jest upuścić to w swoim środowisku, jeśli potrzebujesz go często używać, hostowanego HTTP lub cokolwiek innego, i możesz uruchomić go na dowolnej platformie, używając dowolnego domyślnego interpretera Pythona, jaki masz, całkiem ładny niezawodnie liczę na to, że zadziała.

Domyślnie monituje za pomocą getpass z monitami na stderr (umożliwiając łatwe przechwytywanie standardowego wyjścia), ale jeśli podłączysz do niego łańcuch, zacznie on zbierać ze standardowego wejścia. W zależności od tego, jak sobie z tym poradzisz, może również nie pojawiać się w historii poleceń, więc bądź świadomy tego, nad czym pracujesz. Lubię mieć elastyczne narzędzie, które będzie się zachowywało w oczekiwany sposób, zamiast polegać na pakietach lub pytaniu w jednej linii na drodze do zwycięstwa na 10 różnych sposobów.


To, czy python w jakiejkolwiek wersji jest już zainstalowany, zależy od systemu. Z czym dokładnie jest problem chpasswd?
RalfFriedl
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.