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?
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:
Do tego samego możesz użyć następujących poleceń:
openssl passwd -6 -salt xyz yourpass
Uwaga: przekazanie -1wygeneruje hasło MD5, -5SHA256 i -6SHA512 (zalecane)
mkpasswd --method=SHA-512 --stdin
Metody przyjmuje md5, sha-256isha-512
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
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).
openssl passwddokumentacja dla każdego, kto próbuje dowiedzieć się, co -1robi opcja.
python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'- z powiązanego pytania
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
To rozwiązanie ma następujące zalety:
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.')"
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.
crypt.mksaltnie działa podczas generowania haseł /etc/shadow. Ale metoda @ Alex131089 działa!
openssljest dość uniwersalnym narzędziem.
Ż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))+"$")'
psułamku sekundy nadal działałoby. (Najbezpieczniejsze pozostaje użycie wersji, która wymaga podania hasła)
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:::
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
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.
chpasswd?
chpasswd -epamiętaj, aby używać pojedynczych cudzysłowów w ciąguecho; w przeciwnym razie, jeśli istnieją$lub inne znaki specjalne, nie zostaną potraktowane dosłownie.