Sejak awal, sistem operasi Unix dan Unix-style (termasuk Linux) selalu menyimpan kata sandi sebagai hash kriptografi (1). Hash ini awalnya disimpan di /etc/passwd
, tetapi file ini harus dapat dibaca dunia agar informasi tersedia untuk tujuan lain - bahkan ls -l
sederhana perlu membaca /etc/passwd
untuk mengonversi id pengguna numerik setiap pemilik file menjadi nama pengguna mereka untuk ditampilkan. Namun, memiliki kata sandi yang di-hash dalam file yang dapat dibaca dunia memungkinkan pengguna jahat untuk mendapatkan hash tersebut dengan mudah dan mencoba membuat kata sandi yang dapat digunakan(2) untuk akun pengguna lain.
Untuk mencegah hal ini, kata sandi hash akhirnya dipindahkan ke file yang hanya dapat dibaca oleh root (dan terkadang grup administrator yang memiliki hak istimewa), /etc/shadow
. Ini menyembunyikan hash dari pengguna normal sistem sambil tetap menyediakannya untuk tujuan autentikasi pengguna.
Catatan :
-
Bertele-tele, saya tahu, tetapi kata sandi yang disimpan tidak terenkripsi. Mereka di-hash menggunakan algoritma hashing yang aman secara kriptografis (setidaknya pada saat ditulis). Perbedaan utama yang relevan di sini adalah hash memiliki panjang tetap (panjang teks terenkripsi bervariasi berdasarkan panjang teks yang dienkripsi) dan tidak dapat dibalik (teks terenkripsi dapat didekripsi; teks hash tidak dapat).
-
Karena panjang hash adalah tetap, ada input dalam jumlah tak terbatas yang akan cocok dengan representasi hash yang diberikan. Oleh karena itu, seorang penyerang dapat menemukan kata sandi yang berfungsi yang belum tentu sama dengan kata sandi pengguna pemilik - meskipun ini sangat tidak mungkin mengingat ukuran hash crypto modern.
/etc/shadow
file dibuat untuk alasan keamanan, dan menyimpan kata sandi terenkripsi setiap pengguna.
Awalnya, kata sandi terenkripsi disimpan di /etc/passwd
. /etc/passwd
harus dapat dibaca dunia sehingga sistem dapat memetakan userid ke nama pengguna, dan agar pengguna dapat mengetahui informasi tentang satu sama lain, mis. direktori beranda pengguna lain, atau nomor telepon mereka, yang biasanya disimpan di kolom "gecos" dan ditampilkan oleh utilitas "finger".
Tetapi kemudian orang menyadari bahwa ini adalah masalah keamanan. Siapa pun dengan waktu yang cukup dapat melakukan apa yang disebut serangan bruteforce, dengan membuat kata sandi terenkripsi secara terprogram untuk setiap kemungkinan kata sandi. Jika penyerang melakukannya tanpa benar-benar mencoba masuk melalui telnet
atau ssh
, sistem tidak dapat mengetahui bahwa ia sedang diserang.
Jadi kata sandi terenkripsi dipindahkan ke /etc/shadow
yang baru dibuat , yang hanya dapat dibaca oleh root.
Itu juga berisi informasi lain yang /etc/passwd
file tidak mendukung terkait dengan akun dan kata sandi pengguna, mis. kapan kata sandi terakhir diubah dan kapan akan kedaluwarsa.
Lihat man 5 shadow
(versi web) untuk detail lengkap tentang format file.
Saya tidak bisa mengatakan apakah itu sama untuk SUSE, tanpa mengetahui versi SUSE mana yang Anda hadapi. Misalnya, sistem SUSE Anda mungkin menggunakan Blowfish daripada MD5.
Anda juga menyiratkan bahwa Anda mencampur /etc/shadow
Anda file dengan sistem yang menjalankan distribusi Linux yang berbeda, tetapi tidak menyebutkan distribusi lainnya.
Lihat Masalah memigrasi file bayangan dari SuSE 9.3 ke Server Ubuntu x86_64 misalnya.
Untuk mencoba mengetahuinya, buka /etc/shadow
dan lihat apakah bidang kata sandi terenkripsi dimulai dengan $1$
atau $2$
. Jika berisi $1$
, maka MD5, dan kompatibel dengan sebagian besar distribusi lainnya. Jika berisi $2$
, maka itu mungkin Blowfish menurut file bayangan Blowfish di Debian.
Jika Anda menggunakan Ubuntu, hasil pencarian Google pertama untuk Ubuntu blowfish mungkin merupakan tempat awal yang baik.
Pengguna terdaftar di /etc/passwd
mengajukan. File ini berisi banyak informasi yang digunakan oleh sistem tidak hanya untuk memungkinkan pengguna masuk.
Setiap baris sesuai dengan entri pengguna dan bidang yang berbeda dipisahkan oleh titik dua. File pertama adalah login, diikuti dengan kata sandi yang sesuai.
Kata sandi terenkripsi biasanya disimpan di bidang ini. Namun, /etc/passwd
file harus dapat dibaca oleh semua orang di sistem, jadi enkripsi tidak mencegah serangan brute force, seperti yang dikatakan oleh @Mikel. Solusinya adalah memindahkan kata sandi terenkripsi ini ke file yang hanya dapat dibaca oleh root:/etc/shadow
.
Jadi, /etc/shadow
berisi kata sandi terenkripsi dari pengguna sistem. Sistem mengetahui bahwa ia harus memeriksa kata sandi dalam file ini saat bidang kata sandi di /etc/passwd
mengandung x saja (artinya "silang ke /etc/shadow")