Kami tahu bahwa kata sandi pengguna disimpan /etc/passwd
, tetapi dengan cara terenkripsi, sehingga bahkan root tidak dapat melihatnya:
jane:x:501:501::/home/jane:/bin/bash
fred:x:502:502::/home/fred:/bin/bash
Seperti yang ditunjukkan di atas, :x:
mewakili kata sandi.
Apakah ada cara (konfigurasi mungkin) untuk menyimpan kata sandi dalam /etc/passwd
teks yang jelas dan agar root dapat melihatnya?
Jawaban:
Dua jawaban lain telah memberi tahu Anda — dengan benar! —Bahwa ini adalah Ide Buruk ™ . Tetapi mereka juga mengatakan kepada Anda hal itu sulit dilakukan, membutuhkan perubahan banyak program.
Itu tidak benar. Sangat mudah. Anda hanya perlu mengubah satu atau dua file konfigurasi. Saya merasa penting untuk menunjukkan ini, karena Anda harus menyadarinya ketika masuk ke sistem yang tidak Anda kontrol. Ini tidak akan benar-benar memasukkan kata sandi teks biasa
/etc/passwd
atau/etc/shadow
, itu akan masuk ke file yang berbeda. Catatan saya belum menguji ini, karena saya lebih suka tidak memiliki kata sandi saya dalam teks biasa.Edit
/etc/pam.d/common-password
(untuk mendapatkan kata sandi yang diubah) atau/etc/pam.d/common-auth
(untuk mendapatkan info masuk) dan tambahkan… pam_exec expose_authtok log=/root/passwords /bin/cat
Edit keduanya, dan beralih dari pam_unix ke pam_userdb dengan
crypt=none
. Sebagai alternatif, Anda dapat memasukkannya hanya dengan kata sandi umum (meninggalkan pam_unix juga) untuk hanya merekam kata sandi ketika kata sandi tersebut diubah.Anda dapat menghapus opsi
shadow
(dan juga opsi hash yang kuat) dari pam_unix untuk menonaktifkan file shadow, dan kembali ke password crypt tradisional. Bukan teks biasa, tetapi John the Ripper akan memperbaikinya untuk Anda.Untuk perincian lebih lanjut, lihat Panduan Admin Sistem PAM .
Anda juga dapat mengedit kode sumber PAM, atau menulis modul Anda sendiri. Anda hanya perlu mengkompilasi PAM (atau modul Anda), tidak ada yang lain.
sumber
/root/passwords
.Oh sayang, oke, mari kita mulai dari awal ...
Tidak, mereka telah disimpan di
/etc/passwd
, dan itu beberapa waktu lalu. Kata sandi hari ini disimpan dalam file bayangan yang disebut , sebagian besar waktu/etc/shadow
.Saya tahu ini kadang-kadang digunakan secara bergantian, tetapi hashing bukan enkripsi . Enkripsi pada dasarnya adalah reversibel, artinya Anda dapat menerjemahkan kembali hal yang dienkripsi ke dalam bentuk teksnya. Hashing dirancang agar tidak dapat dibalik dengan cara apa pun (kecuali kekerasan). Bentuk cleartext asli dari sesuatu yang di-hash tidak seharusnya dapat dipulihkan.
Kata sandi dalam file bayangan disimpan sebagai hash.
Dalam
x
hal ini hanya placeholder untuk bidang kata sandi lawas. Thex
berarti bahwa password dapat ditemukan dalam file shadow.Ya, ini memang mungkin, tetapi bukan ide yang bagus untuk beberapa alasan. Jawaban Derobert menjelaskan cara yang agak sederhana untuk melakukannya .
Tapi mengapa itu bukan ide yang bagus? Ya, untuk alasan sederhana namun sangat penting: keamanan. Saya sarankan untuk membaca pertanyaan-pertanyaan ini:
Tetapi untuk menyimpulkannya, anggap sebagai berikut: Ada server di perusahaan, semua akun pengguna diamankan dengan kata sandi mereka dan data di akun pengguna ini dienkripsi dengan kata sandi yang sama. Seorang cracker dari luar mendapatkan akses ke server, tetapi mereka tidak dapat mengakses data penting apa pun karena itu masih dienkripsi dalam akun pengguna.
Sekarang anggap kata sandi akan disimpan dalam teks biasa. Cracker tiba-tiba akan memiliki akses ke semuanya , karena kata sandi dapat dibaca. Tetapi jika mereka disimpan sebagai nilai hash, mereka hampir tidak berguna bagi siapa pun kecuali orang-orang dengan banyak sumber daya untuk melakukan serangan brute-force.
sumber
"$id$"
diikuti oleh string yang diakhiri oleh"$"
:$id$salt$encrypted
kemudian alih-alih menggunakan mesin DES,id
identifikasi metode enkripsi yang digunakan dan kemudian menentukan bagaimana sisa string ditafsirkan ».Pertama-tama kata sandi yang dienkripsi tidak ada
/etc/passwd
, tetapi ada di/etc/shadow
. Salah satu alasan untuk ini adalah yang/etc/passwd
dapat dibaca oleh publik (jadi Anda dapat mis. Menemukan informasi bidang GECOS untuk pengguna lain), dan, terutama dengan skema enkripsi yang lebih lama dapat memungkinkan serangan brute force terhadap kata sandi terenkripsi.Untuk hanya menyimpan kata sandi dalam teks biasa, tidak perlu dan akan memerlukan pembaruan untuk program kata sandi dan perpustakaan membaca
/etc/shadow
informasi untuk memeriksa kata sandi yang valid. Dan kemudian Anda harus berharap bahwa semua utilitas menggunakan pustaka bersama untuk mengakses informasi itu alih-alih terkait secara statis dengan sesuatu yang tidak memahami penyimpanan kata sandi teks biasa.Jika ini akan menjadi opsi dalam konfigurasi pengaturan, maka akan selalu ada orang bodoh yang akan mengaktifkannya secara tidak tepat. Dan sementara mereka masih bekerja di layar CRT dan menyiarkan ini dengan cara yang dapat dengan mudah diambil dari luar gedung mereka, sementara mereka melihat informasi.
Selain itu, orang-orang cenderung menggunakan kata sandi yang sama atau serupa pada banyak sistem, jadi itu bukan ide yang baik untuk kata sandi yang dapat dibaca manusia. Karena beberapa sysadmin dapat mencoba ulang sistem mereka di sistem lain, ia tahu pengguna memiliki akun.
Pasti ada hal yang lebih menarik, cara kerjanya dapat diselidiki pada sistem Anda.
sumber
/etc/shadow
tidak menyimpan kata sandi terenkripsi, ia menyimpan hash kata sandi. Ya, fungsinya disebutcrypt
, dan halaman manual mengatakan "terenkripsi", tetapi jika Anda menyebut ikan sebagai sepeda, itu tidak berarti roda. Perhatikan bahwa membuat/etc/shadow
kata sandi penyimpanan dalam format yang berbeda dimungkinkan tanpa mengkompilasi ulang program apa pun (setidaknya di Linux dan Solaris): metode otentikasi selalu ditautkan secara dinamis. Menyimpan kata sandi sebagai teks biasa akan menjadi ide yang buruk tetapi mungkin dilakukan dengan sedikit pekerjaan .Alasan dasar (mengapa ini adalah ide yang buruk) adalah bahwa tidak ada pengguna (root, admin atau lainnya) yang boleh memiliki akses ke kata sandi pengguna orang lain.
Sederhananya karena kata sandi adalah sarana otentikasi. Jika saya tahu kata sandi pengguna lain, saya tahu kredensial mereka (nama pengguna + kata sandi), jadi saya bisa masuk sebagai pengguna itu , menyamar sebagai dia (atau dia).
Tindakan apa pun yang saya lakukan saat masuk sebagai pengguna itu, pengguna lain akan bertanggung jawab. Dan bukan itu cara otentikasi seharusnya bekerja.
Tindakan tersebut dapat menjadi bencana, seperti menghapus sejumlah besar file penting, menghapus hard disk, menghapus cadangan, mematikan rencana tenaga nuklir, dll.
Atau hanya ilegal. Bayangkan sebuah institusi bank tempat saya (admin) memiliki akses ke semua kata sandi. Dengan menggunakan kata sandi kasir, saya dapat memesan satu juta dolar dari rekening bank presiden ke rekening bank pembersih jendela. Kemudian gunakan kata sandi superior kasir untuk menyetujui transaksi. Kemudian setujui cek dari akun pembersih jendela ke rekening bank luar negeri saya sendiri.
Lalu aku pergi untuk liburan panjang di Bahama ...
Dalam pandangan itu, hashing dari kata sandi dan penggunaan file bayangan yang terpisah dapat dilihat sebagai sarana untuk menegakkan aturan ini (tidak ada pengguna yang bisa meniru identitas lainnya).
Dan seperti yang dikomentari @ Miral * , ada pengecualian
su
yang memungkinkan peniruan identitas (dan jenis argumen yang dilontarkan di atas), juga menyimpan log penggunaannya (sehingga mengubah aturan menjadi "hanya admin yang dapat menyamar sebagai orang lain tetapi log disimpan ").* Contoh bank mungkin bukan yang terbaik. Di lingkungan mana pun di mana keamanan sangat penting, lebih banyak cara otentikasi dan otorisasi biasanya diperlukan daripada hanya satu kata sandi.
sumber
su otheruser
.su
dicatat, su tidak menyimpan catatan tentang apa yang sebenarnya dilakukan sementara pengguna meniru yang lain. Dan root jahat selalu dapat mengubah log untuk menyembunyikan tindakan dari penyelidik masa depan.