Apa tujuan dari / etc / shadow dan file cache shadow di sistem operasi Linux?

9

Apa tujuan dari file / etc / shadow di sistem operasi Linux? Juga, apakah sama untuk klien SUSE? Ada satu file shadow cache yang dipertahankan apa tujuannya itu?

Ashitosh
sumber

Jawaban:

16

Sejak awal, sistem operasi Unix dan Unix-style (termasuk Linux) selalu menyimpan kata sandi sebagai hash kriptografi (1). Hash ini awalnya disimpan /etc/passwd, tetapi file ini harus dapat dibaca di seluruh dunia untuk membuat informasi tersedia untuk tujuan lain - bahkan ls -lkebutuhan sederhana untuk membaca /etc/passwduntuk mengubah id pengguna numerik setiap pemilik file menjadi nama pengguna mereka untuk ditampilkan. Namun, memiliki kata sandi hash dalam file yang dapat dibaca dunia memungkinkan pengguna jahat untuk dengan mudah mendapatkan hash itu dan berupaya menghasilkan kata sandi yang dapat digunakan (2) untuk akun pengguna lain.

Untuk mencegah hal ini, kata sandi hash pada akhirnya dipindahkan ke file yang hanya dapat dibaca oleh root (dan kadang-kadang sekelompok administrator istimewa) /etc/shadow,. Ini menyembunyikan hash dari pengguna normal sistem sambil tetap tersedia untuk keperluan otentikasi pengguna.

Catatan :

  1. Pedantic, saya tahu, tetapi kata sandi yang disimpan tidak dienkripsi. Mereka hash menggunakan algoritma hashing kriptografis-aman (setidaknya pada saat itu ditulis). Perbedaan utama yang relevan di sini adalah bahwa hash adalah fixed-length (panjang teks terenkripsi bervariasi berdasarkan pada panjang teks yang dienkripsi) dan non-reversibel (teks terenkripsi dapat didekripsi, teks hash tidak bisa).

  2. Karena hash adalah panjang tetap, ada sejumlah input yang tak terbatas yang akan cocok dengan representasi hash yang diberikan. Oleh karena itu, seorang penyerang dapat menemukan kata sandi yang berfungsi yang tidak selalu sama dengan kata sandi pengguna yang memiliki - meskipun ini sangat tidak mungkin mengingat ukuran hash kripto modern.

Dave Sherohman
sumber
Saya pikir dalam paragraf terakhir Anda harus mengatakan "terbatas" bukan "tak terbatas".
phunehehe
4
@ phunehehe Tidak, set input (semua kata sandi yang mungkin) tidak terbatas, tetapi output (semua nilai hash yang mungkin) terbatas.
phihag
@ phihag Ah saya mengerti. Tapi hash akan lebih lama daripada kata sandi yang bisa diingat manusia :)
phunehehe
@ phunehehe - Dalam praktik umum, benar, tetapi masih mungkin terjadi tabrakan hash dalam ruang input yang dapat diingat manusia.
Dave Sherohman
Jumlah input yang mengarah ke setiap tabrakan yang diberikan tidak terbatas, karena panjang string yang dapat di hash oleh algoritma yang diberikan terbatas . Lihat misalnya stackoverflow.com/questions/17388177/…
MariusMatutiae
6

The /etc/shadowFile diciptakan untuk alasan keamanan, dan memegang password terenkripsi masing-masing pengguna.

Awalnya, kata sandi terenkripsi disimpan di /etc/passwd. /etc/passwdharus dapat dibaca oleh dunia sehingga sistem dapat memetakan userids ke nama pengguna, dan agar pengguna dapat mengetahui informasi tentang satu sama lain, misalnya direktori home pengguna lain, atau nomor telepon mereka, yang secara tradisional disimpan di bidang "gecos" dan ditampilkan oleh utilitas "jari".

Tetapi kemudian orang-orang menyadari bahwa ini adalah masalah keamanan. Siapa pun dengan waktu yang cukup dapat melakukan apa yang disebut serangan bruteforce , dengan secara sistematis menghasilkan kata sandi terenkripsi untuk setiap kata sandi yang mungkin. Jika penyerang melakukan itu tanpa benar-benar mencoba masuk melalui telnetatau ssh, sistem tidak dapat mengetahui bahwa ia sedang diserang.

Jadi kata sandi terenkripsi dipindahkan ke yang baru dibuat /etc/shadow, yang hanya dapat dibaca oleh root.

Ini juga berisi informasi lain yang /etc/passwdfile tidak mendukung terkait dengan akun dan kata sandi pengguna, misalnya kapan kata sandi terakhir diubah dan kapan akan kedaluwarsa.

Lihat man 5 shadow( versi web ) untuk detail lengkap dari format file.


Saya tidak bisa mengatakan apakah itu sama untuk SUSE, tanpa mengetahui versi SUSE yang Anda hadapi. Misalnya, sistem SUSE Anda mungkin menggunakan Blowfish daripada MD5.

Anda juga menyiratkan bahwa Anda sedang mencampur /etc/shadowfile Anda dengan sistem yang menjalankan distribusi Linux yang berbeda, tetapi tidak mengatakan apa itu distribusi lainnya.

Lihat Masalah migrasi file shadow dari SuSE 9.3 ke Ubuntu Server x86_64 misalnya.

Untuk mencoba mengetahuinya, buka /etc/shadowdan lihat apakah bidang kata sandi terenkripsi dimulai dengan $1$atau $2$. Jika mengandung $1$, maka itu MD5, dan kompatibel dengan sebagian besar distribusi lainnya. Jika mengandung $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.

Mikel
sumber
3

Pengguna terdaftar dalam /etc/passwdfile. File ini berisi banyak informasi yang digunakan oleh systemm tidak hanya untuk memungkinkan pengguna untuk masuk.

Setiap baris sesuai dengan entri pengguna dan bidang yang berbeda dipisahkan oleh titik dua. Yang pertama diajukan adalah login, diikuti oleh kata sandi yang sesuai.

Kata sandi terenkripsi dulu disimpan di bidang ini. Namun, /etc/passwdfile tersebut harus dapat dibaca oleh semua orang di sistem, sehingga enkripsi tidak mencegah dari serangan brute force, seperti yang telah dikatakan oleh @Mikel. Solusinya adalah untuk memindahkan password terenkripsi di akar-hanya file yang dapat dibaca: /etc/shadow.

Dengan demikian, /etc/shadowberisi kata sandi terenkripsi dari pengguna sistem. Sistem tahu itu harus memeriksa kata sandi dalam file ini ketika bidang kata sandi di /etc/passwdmengandung x saja (yang berarti " menyeberang ke / etc / shadow")

jopasserat
sumber
1
Perhatikan bahwa kata sandi yang disimpan di /etc/passwd/ masih hash dengan cara yang sama persis jika mereka berada di /etc/shadow. Anda tidak benar-benar mengatakan bahwa kata sandi di dalam /etc/passwdakan menjadi teks biasa, tetapi akan mudah bagi seseorang yang tidak terbiasa dengan * nix penanganan kata sandi untuk salah menafsirkan jawaban Anda sebagai menyiratkan hal itu.
Dave Sherohman
Terima kasih atas komentar Anda yang membantu saya meningkatkan jawaban saya.
Saya tidak berpikir yang xsebenarnya berarti apa-apa. Itu ada di sana hanya sebagai hash yang tidak valid (yang tidak cocok dengan kata sandi apa pun). Beberapa sistem menggunakan !.
grawity
2

Mari kita lihat apakah saya bisa mendapatkan semua suara di dunia, karena saya menulis apa yang menjadi Linux Shadow Password Suite di '87;)

File asli /etc/passwdberisi hash kata sandi cleartext berbasis DES yang dimodifikasi. Pada saat crypt()fungsi itu dibuat, diyakini (dan ini dinyatakan oleh pencipta sistem operasi UNIX) bahwa serangan terhadap hash kata sandi tidak akan mungkin, karena jumlah kata sandi yang mungkin dan penggunaan 12-bit (4,096 nilai yang memungkinkan) "garam". Setiap password cleartext yang mungkin memiliki 4.096 nilai hash yang mungkin, dan dengan 64-bit hasil hash, yang memberikan total 2 ^ 72 kemungkinan hash password.

Seperti poster lain yang disebutkan, /etc/passwdjuga digunakan oleh berbagai utilitas untuk memetakan antara nama pengguna dan nilai-nilai UID ( /etc/groupfile menyediakan fungsi analog untuk grup) dan yang mengharuskannya dapat dibaca dunia.

Pada 1980-an menjadi jelas bahwa serangan kamus terhadap hash kata sandi yang disimpan dalam /etc/passwdfile menjadi layak dan /etc/shadowdiperkenalkan ke AT&T UNIX dalam rilis awal Sistem V. Saya mendokumentasikan halaman manual yang saya gunakan untuk menulis perpustakaan Shadow asli, dan saya sudah sejak dilupakan, tapi itu pasti rilis System V awal, mungkin SVR3.2.

Apa yang dilakukan AT&T, dan apa yang saya terapkan untuk SCO Xenix (SCO Xenix asli, bukan SCen Xenix jahat kemudian) pada tahun '87 yang akhirnya mulai digunakan di Linux, hanya memindahkan kata sandi hash ke /etc/shadow. Ini mencegah serangan drive-by, di mana pengguna yang tidak memiliki hak memperoleh salinan /etc/passwddan menjalankan serangan terhadapnya. Jika Anda terbiasa dengan mengapa saya menulis Shadow di tempat pertama, saya memiliki pengguna mengunduh /etc/passwdfile saya melalui UUCP di masa ketika kami masih menggunakan UUCP untuk hampir semuanya.

Pada saat Linux dibuat dan digunakan secara luas, ada banyak alat untuk menyerang hash kata sandi. Implementasi ulang berkinerja tinggi crypt()adalah satu jalan, dan serangan berbasis kamus melalui alat seperti Crack dan libcrack adalah yang lain. Pelabuhan awal dilakukan oleh Nate Holloway dan Floria La Roche (Saya memberi mereka kredit, saya tidak tahu apakah ada yang melakukan pekerjaan sebelum mereka).

Akhirnya penggunaan crypt()hash berbasis, bahkan dalam file yang dilindungi, tidak lagi aman dan MD5perubahan hash berbasis asli dibuat. MD5akhirnya dianggap terlalu lemah, dan hash yang lebih baru digunakan.

Secara teori, hash yang cukup kuat dapat disimpan /etc/passwd. Keamanan operasional yang buruk berarti bahwa banyak sistem memiliki /etc/shadowfile mereka tersedia melalui berbagai vektor serangan - "Saya mencuri file cadangan" mungkin yang paling mudah.

Julie di Austin
sumber