Saya ingin memeriksa, dari baris perintah linux, apakah kata sandi cleartext yang diberikan sama dengan kata sandi yang di-crypted pada / etc / shadow
(Saya perlu ini untuk mengautentikasi pengguna web. Saya menjalankan linux tertanam.)
Saya memiliki akses ke file / etc / shadow itu sendiri.
linux
command-line
password
embedded
michelemarcon
sumber
sumber
Jawaban:
Anda dapat dengan mudah mengekstrak kata sandi terenkripsi dengan awk. Anda kemudian perlu mengekstrak awalan
$algorithm$salt$
(dengan anggapan bahwa sistem ini tidak menggunakan DES tradisional, yang sangat tidak digunakan lagi karena dapat menjadi kasar sekarang ini).Untuk pemeriksaan kata sandi, fungsi C yang mendasarinya adalah
crypt
, tetapi tidak ada perintah shell standar untuk mengaksesnya.Pada baris perintah, Anda dapat menggunakan Perl satu-liner untuk memanggil
crypt
kata sandi.Karena ini tidak dapat dilakukan dalam alat shell murni, jika Anda memiliki Perl tersedia, Anda mungkin juga melakukan semuanya di Perl. (Atau Python, Ruby, ... apa pun yang Anda miliki yang dapat memanggil
crypt
fungsi.) Peringatan, kode yang belum diuji.Pada sistem tertanam tanpa Perl, saya akan menggunakan program C kecil yang berdedikasi. Peringatan, mengetik langsung ke browser, saya bahkan belum mencoba untuk mengkompilasi. Ini dimaksudkan untuk menggambarkan langkah-langkah yang diperlukan, bukan sebagai implementasi yang kuat!
Pendekatan yang berbeda adalah dengan menggunakan program yang ada seperti
su
ataulogin
. Bahkan, jika Anda bisa, itu akan ideal untuk mengatur aplikasi web untuk melakukan apa pun yang dibutuhkan melaluisu -c somecommand username
. Kesulitan di sini adalah untuk memberi makan kata sandisu
; ini membutuhkan terminal. Alat yang biasa untuk meniru terminal adalah yang diharapkan , tetapi itu adalah ketergantungan besar untuk sistem embedded. Selain itu, saatsu
berada di BusyBox, sering kali dihilangkan karena banyak penggunaannya membutuhkan biner BusyBox untuk menjadi setuid root. Namun, jika Anda bisa melakukannya, ini adalah pendekatan yang paling kuat dari sudut pandang keamanan.sumber
su
pendekatannya.Lihatlah
man 5 shadow
danman 3 crypt
. Dari yang terakhir, Anda dapat mengetahui bahwa hash dalam kata sandi/etc/shadow
memiliki formulir berikut:di mana
id
mendefinisikan jenis enkripsi dan, membaca lebih lanjut, bisa menjadi salah satunyaBergantung pada jenis hash, Anda perlu menggunakan fungsi / alat yang sesuai untuk membuat dan memverifikasi kata sandi "dengan tangan". Jika sistem berisi
mkpasswd
program, Anda dapat menggunakannya seperti yang disarankan di sini . (Anda mengambil garam dari file bayangan, jika itu tidak jelas.) Misalnya, denganmd5
kata sandi:akan menghasilkan string yang harus cocok dengan
/etc/shadow
entri.sumber
mkpasswd
, yang harus saya instal menggunakanapt-get install whois
. Baris perintah untuk garis bayangan<user>:$6$<salt>$<pwd>:
adalahmkpasswd -msha-512 <password> <salt>
Ada pertanyaan serupa yang diajukan pada Stack Overflow . cluelessCoder menyediakan skrip menggunakan ekspektasi , yang mungkin atau mungkin tidak Anda miliki pada sistem embedded Anda.
sumber
Ingatlah bahwa, dengan asumsi sistem dikonfigurasikan dengan benar, program harus dijalankan sebagai root.
Solusi yang lebih baik daripada membaca file shadow secara langsung dan menulis kode Anda sendiri di sekitar crypt adalah dengan hanya menggunakan pam bindings.
The squid tarbal digunakan untuk datang dengan alat CLI sederhana untuk memverifikasi username / password menggunakan stdio - begitu sederhana untuk beradaptasi dengan menggunakan argumen - meskipun versi saya hack sebelumnya hampir tidak poster pin-up untuk pemrograman terstruktur. Google cepat dan sepertinya versi yang lebih baru telah dibersihkan secara signifikan tetapi masih ada beberapa yang ada di sana.
sumber
sumber
line 61: :: syntax error: operand expected (error token is ":")