Saya perlu mengedit secara manual /etc/shadow
untuk mengubah kata sandi root di dalam gambar mesin virtual.
Apakah ada alat baris perintah yang mengambil kata sandi dan menghasilkan /etc/shadow
hash kata sandi yang kompatibel pada standar keluar?
Saya perlu mengedit secara manual /etc/shadow
untuk mengubah kata sandi root di dalam gambar mesin virtual.
Apakah ada alat baris perintah yang mengambil kata sandi dan menghasilkan /etc/shadow
hash kata sandi yang kompatibel pada standar keluar?
Jawaban:
Anda dapat menggunakan perintah berikut untuk hal yang sama:
openssl passwd -6 -salt xyz yourpass
Catatan: passing -1
akan menghasilkan kata sandi MD5, -5
SHA256 dan -6
SHA512 (direkomendasikan)
mkpasswd --method=SHA-512 --stdin
Metode menerima md5
, sha-256
dansha-512
Seperti yang disarankan @tink, kami dapat memperbarui kata sandi chpasswd
menggunakan:
echo "username:password" | chpasswd
Atau Anda dapat menggunakan kata sandi terenkripsi dengan chpasswd
. Pertama buat menggunakan ini:
perl -e 'print crypt("YourPasswd", "salt", "sha512"),"\n"'
Kemudian, Anda dapat menggunakan kata sandi yang dihasilkan untuk memperbarui:
echo "username:encryptedPassWd" | chpasswd -e
Kata sandi terenkripsi ini dapat kita gunakan untuk membuat pengguna baru dengan kata sandi, misalnya:
useradd -p 'encryptedPassWd' username
openssl passwd -1
yang 1) tidak berakhir di sana dan 2) menghasilkan garam acak untuk Anda (yang tidak berakhir dalam sejarah shell, juga).
openssl passwd
dokumentasi untuk siapa pun yang mencoba mencari tahu apa yang dilakukan -1
opsi.
python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'
- dari pertanyaan terkait ServerFault
Di Ubuntu 12.04, ada mkpasswd (dari paket whois): Frontfender berlebih hingga crypt (3)
mkpasswd -m sha-512 -S saltsalt -s <<< YourPass
Dimana:
-m
= Hitung kata sandi menggunakan metode TYPE. Jika TYPE membantu, maka metode yang tersedia akan dicetak.-S
= garam yang digunakan.Misalnya
$ mkpasswd -m help
-s = Read password from stdin
Solusi ini memiliki manfaat sebagai berikut:
Meminta kembali kata sandi untuk menghindari kesalahan.
$ 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.')"
Bagi yang tanpa sistem berbasis Debian. Python3 juga berfungsi dengan baik.
python3 -c 'import crypt; print(crypt.crypt("test"))'
CATATAN: String "test" adalah kata sandi yang kami hasilkan sebagai string yang disandikan.
crypt.mksalt
tidak berfungsi saat membuat kata sandi untuk /etc/shadow
. Tapi metode @ Alex131089 berhasil!
openssl
merupakan alat yang cukup universal.
Tidak satu pun dari metode saat ini yang dapat diterima oleh saya - Mereka baik melewati kata sandi pada baris perintah (yang berakhir dalam sejarah shell saya), memerlukan instalasi utilitas tambahan ( python3
, makepasswd
), menggunakan garam kode keras atau menggunakan teknik hashing lama.
Metode ini akan menghasilkan hash SHA-512 setelah meminta kata sandi dan akan menggunakan garam acak.
Metode yang menggunakan Python 2 tanpa pustaka non-standar:
python2 -c 'import crypt, getpass,os,base64; print crypt.crypt(getpass.getpass(), "$6$"+base64.b64encode(os.urandom(16))+"$")'
Untuk melakukannya tanpa prompt: (Ini akan meninggalkan kata sandi Anda dalam sejarah perintah)
python2 -c 'import crypt, os,base64; print crypt.crypt("MyPassword", "$6$"+base64.b64encode(os.urandom(16))+"$")'
ps
output dalam sepersekian detik bahwa perintah sedang berjalan. (Tetap paling aman untuk menggunakan versi yang meminta kata sandi)
The openssl
dan chpasswd -e
pasangan tidak bekerja dalam kasus saya di RHEL6. Menggabungkan openssl passwd
dan usermod -p
memerintahkan melakukan pekerjaan.
Hasilkan nilai hash kata sandi bersama dengan nilai garam:
$ openssl passwd -1 -salt 5RPVAd clear-text-passwd43
$1$5RPVAd$vgsoSANybLDepv2ETcUH7.
Kemudian, salin string terenkripsi ke usermod. Pastikan untuk membungkusnya dengan tanda kutip tunggal.
$ usermod -p '$1$5RPVAd$vgsoSANybLDepv2ETcUH7.' root
Lihat dalam file bayangan.
$ grep root /etc/shadow
root:$1$5RPVAd$vgsoSANybLDepv2ETcUH7.:17774:0:99999:7:::
Namun metode lain untuk menghasilkan kata sandi, menggunakan openssl
alat.
Hasilkan kata sandi MD5
openssl passwd -1 -salt SaltSalt SecretPassword
# output: $1$SaltSalt$FSYmvnuDuSP883uWgYBXW/
Hasilkan kata sandi DES
openssl passwd -crypt -salt XR SuprScrt
# output: XR1dOp2EVMph2
Memperluas sedikit pada kritik u150825 dan Gert van den Berg, saya menemukan diri saya membutuhkan sesuatu yang relatif fleksibel untuk situasi yang berbeda dengan sistem otomasi yang berbeda. Saya memutuskan untuk menambah perpustakaan kecil saya yang berisi skrip yang berguna dan menulis ini. Hanya menggunakan pustaka asli dari python 2.7+, dan bekerja di python3 juga.
Anda dapat mengambilnya di sini jika mau. Sama mudahnya untuk menjatuhkan ini di lingkungan Anda jika Anda perlu sering menggunakannya, http-host atau apa pun, dan Anda dapat menjalankannya pada platform apa pun menggunakan apa pun penerjemah python default yang tersedia untuk Anda, cukup andal mengandalkannya bekerja.
Ini default untuk meminta menggunakan getpass dengan meminta pada stderr (memungkinkan penangkapan stdout mudah), tetapi jika Anda menyalurkan string ke sana, ia hanya akan menuai dari stdin. Bergantung pada bagaimana Anda melakukan ini, itu mungkin tidak muncul dalam sejarah perintah, jadi, sadarilah apa yang sedang Anda kerjakan. Saya suka memiliki alat yang fleksibel yang akan berperilaku dengan cara yang diharapkan, daripada harus bergantung pada paket atau python satu-baris cara saya untuk kemenangan 10 cara yang berbeda.
chpasswd
?
chpasswd -e
, pastikan untuk menggunakan tanda kutip tunggal pada string yang Anda gunakanecho
; jika tidak, jika ada$
atau karakter khusus lainnya, mereka tidak akan diperlakukan secara harfiah.