Mengapa izin file untuk / etc / shadow diatur ke 600?

25

Izin /etc/shadowadalah 600, yang berarti tidak dapat dibaca oleh siapa pun kecuali root.

Namun, karena semua kata sandi di dalamnya tidak disimpan dalam teks yang jelas tetapi sebagai hash (yang berarti tidak mungkin untuk menghitung kata sandi asli dari hash), mengapa tidak dapat dibaca oleh semua orang?

Shubhanshu Vishwakarma
sumber
Apakah Anda yakin izin untuk /etc/shadowitu 600?
edwinksl
4
Jika kata sandi akun Stackoverflow Anda di-hash, apakah Anda bersedia menunjukkan kata sandi hash Anda kepada orang lain?
Jeon
5
@ByteCommander. Kadang-kadang saya ingin cara untuk memperbaiki hasil edit.
TRiG

Jawaban:

60

Untuk mencegah serangan brute-force offline.

Meskipun Anda tidak dapat membalik hash, Anda masih dapat mencoba hashing setiap kata sandi yang mungkin sampai Anda menemukan kecocokan, dan Anda dapat melakukan jutaan percobaan per detik dengan perangkat keras yang baik dan akses lokal ke file.

Jika file memiliki 644izin, maka siapa pun yang masuk ke sistem Anda, bahkan dalam sesi tamu, akan dapat menyalin file ini dari komputer Anda (apakah ke stik USB atau melalui jarak jauh scp) dan mencoba serangan brute-force offline , tanpa meninggalkan bukti apa pun di komputer Anda .


Perhatikan bahwa izin pada Ubuntu sebenarnya 640, bukan 600:

$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1239 Jun 25 04:35 /etc/shadow

Ini tidak masalah, karena masih belum ada izin untuk orang lain, dan, secara default, tidak ada orang di shadowgrup.


Awalnya, hash disimpan di /etc/passwd(itulah sebabnya itu disebut passwd), seperti ketika Linux dibuat, cracking hash, bahkan tipe lemah yang digunakan saat itu, praktis tidak mungkin. Namun, pada akhirnya, kekuatan pemrosesan maju ke titik di mana crack hash, setidaknya kata sandi yang relatif lemah, menjadi layak.

Mengubah izin /etc/passwduntuk 640atau 600tidak berfungsi, karena ada banyak alasan sah untuk dapat membaca /etc/passwdsebagai pengguna biasa (mengonversi UID menjadi nama pengguna, mendapatkan nama lengkap pengguna, nomor telepon, dll.), Sehingga hash dipindahkan ke /etc/shadow, yang diberi 640izin. Di xtempat kata sandi hash untuk pengguna di /etc/passwddigunakan untuk menunjukkan bahwa hash untuk pengguna yang disimpan /etc/shadowsebagai gantinya.

masukkan_name_di sini
sumber
1
Panggilan bagus untuk menyalin file!
Rinzwind
1
dan saya tidak perlu rep ;-) edit: hmm dia meletakkannya di saya: P maaf: D edit2 dan sekarang kembali lagi. eh: D
Rinzwind
6
Terakhir saya memeriksa Anda bisa memasukkan kata sandi hash ke / etc / passwd dan menghapus baris dari / etc / shadow dan berharap dapat login. / Etc / shadow ada sehingga dapat diatur ke 600 karena alasan yang diberikan dalam jawaban ini.
Joshua
8
Perlu dicatat bahwa izin untuk / etc / passwd adalah 644. Saya percaya bahwa secara historis, hash kata sandi dulu disimpan di sini. Namun, mengubah file ini menjadi 640 akan menyebabkan semua jenis masalah kompatibilitas, jadi alih-alih hash kata sandi dipindahkan ke bayangan dan dihapus dari passwd - ini memungkinkan informasi lain di passwd tetap dapat dibaca dunia sementara password hashes dirahasiakan dalam file yang berbeda.
Rodney
4
@Rodney sebagai seseorang yang tumbuh di BSD 4.3, Anda benar. Hash disimpan di / etc / passwd. Kembali ketika Vax 11/780 adalah canggih, serangan brute force pada kata sandi dalam file dianggap mustahil. Mungkin yang lebih penting, Internet [Arpanet] sedikit terpencil, dan hal-hal seperti itu hampir tidak dipertimbangkan; tidak ada ssh- hanya rlogin / telnet. Menjaga file kata sandi 644 berarti bahwa utilitas seperti lstidak perlu setuid root untuk menerjemahkan dari uid ke nama.
Mike S
13

Sebenarnya, / etc / shadow dibuat untuk memungkinkan perpindahan dari daftar nama pengguna dan kata sandi yang dapat dibaca secara publik.

Bertahanlah, ini akan menjadi sedikit pelajaran sejarah, sebelum kita sampai pada jawaban yang sebenarnya. Jika Anda tidak peduli tentang sejarah, cukup gulirkan sedikit.

Di masa lalu, OS mirip Unix, termasuk Linux, umumnya semua menyimpan kata sandi di / etc / passwd. File itu dapat dibaca dunia, dan masih, karena mengandung informasi yang memungkinkan pemetaan misalnya antara ID pengguna numerik dan nama pengguna. Informasi itu sangat berguna bahkan bagi pengguna biasa untuk tujuan yang sah sepenuhnya, sehingga membuat dunia file dapat dibaca sangat bermanfaat bagi kegunaan.

Bahkan saat itu, orang-orang menyadari bahwa memiliki kata sandi dalam teks biasa dalam file di lokasi terkenal yang bisa dibaca siapa saja yang bisa masuk dengan bebas adalah ide yang buruk. Jadi kata sandi di-hash, dalam arti tertentu. Itulah mekanisme hashing kata sandi "crypt" lama, yang hampir tidak pernah digunakan pada sistem modern, tetapi sering didukung untuk tujuan warisan.

Lihatlah / etc / passwd di sistem Anda. Lihat bidang kedua itu, yang mengatakan di xmana-mana? Ini digunakan untuk menyimpan kata sandi hash untuk akun yang bersangkutan.

Masalahnya adalah orang-orang dapat mengunduh /etc/ passwd, atau bahkan tidak mengunduhnya, dan berusaha memecahkan kata sandi. Ini bukan masalah besar sementara komputer tidak terlalu kuat (Clifford Stoll, dalam The Cuckoo's Egg , memberikan, seingat saya, waktu untuk hash satu kata sandi pada sistem kelas PC IBM pada pertengahan 1980-an sekitar satu detik) ), tetapi itu menjadi masalah karena kekuatan pemrosesan meningkat. Pada titik tertentu, dengan daftar kata yang baik, meretas kata sandi itu menjadi terlalu mudah. Karena alasan teknis, skema ini juga tidak dapat mendukung kata sandi lebih dari delapan byte.

Dua hal dilakukan untuk mengatasi ini:

  • Pindah ke fungsi hash yang lebih kuat. Ruang bawah tanah yang lama () telah hidup lebih lama dari yang berguna, dan skema yang lebih modern dirancang yang baik di masa depan dan secara komputasi lebih kuat.
  • Pindahkan kata sandi hash ke file yang tidak dapat dibaca oleh sembarang orang. Dengan cara ini, bahkan jika fungsi hash kata sandi ternyata lebih lemah dari yang diharapkan, atau jika seseorang memiliki kata sandi yang lemah untuk memulai, ada hambatan lain bagi penyerang untuk mendapatkan akses ke nilai hash untuk memulai. Itu tidak lagi gratis untuk semua.

File itu adalah / etc / shadow.

Perangkat lunak yang bekerja dengan / etc / shadow umumnya sangat kecil, sangat fokus, dan cenderung menerima beberapa pemeriksaan ekstra dalam ulasan karena potensi masalah. Ini juga berjalan dengan izin khusus, yang memungkinkannya untuk membaca dan memodifikasi / etc / shadow, sambil menjaga pengguna biasa tidak dapat melihat file itu.

Jadi begitulah: Izin pada / etc / shadow bersifat restriktif (meskipun, sebagaimana telah disebutkan, tidak seketat yang Anda sebutkan) karena seluruh tujuan file tersebut adalah untuk membatasi akses ke data sensitif.

Kata sandi hash seharusnya kuat, tetapi jika kata sandi Anda ada di 500 Kata Sandi Top di daftar Internet , siapa pun yang memiliki akses ke hash masih akan dapat menemukan kata sandi dengan cepat. Melindungi hash mencegah serangan sederhana itu dan menaikkan standar serangan sukses dari mengintip sederhana menjadi mengharuskan seseorang untuk menjadi administrator sistem pada host, atau melalui serangan eskalasi hak istimewa terlebih dahulu. Terutama pada sistem multi-pengguna yang dikelola dengan benar, keduanya secara signifikan lebih sulit daripada hanya melihat file yang dapat dibaca dunia.

sebuah CVn
sumber
Saya sangat suka cara Anda menggambarkan setiap hal :) (y)
Shubhanshu Vishwakarma
Terminologi / etimologi: /etc/shadowtidak memiliki "kata sandi bayangan" (karena itu bukan suatu hal). Seluruh file adalah bayangan /etc/passwd. Lihat cara terminologi digunakan dalam Linux Shadow Password HOWTO : Mengapa membayangi file passwd Anda? . Tidak seperti beberapa penggunaan lain dari istilah "Bayangan" dalam komputasi, itu bukan salinan bayangan , meskipun (seperti membayangi kode BIOS ke dalam RAM daripada menjalankan dari ROM). Field di / etc / passwd adalah placeholder, berisi karakter khusus yang berarti "hash kata sandi asli ada di / etc / shadow".
Peter Cordes
Sejarah yang baik tetapi 1 detik. per kata sandi hampir tidak terbatas bahkan pada 1980-an, tidak ketika kata sandi teratas digunakan oleh lebih dari 1% orang.
Warren Dew
1
@ WarrenDew Tidak yakin apakah Anda membuat pernyataan fakta, atau pendapat. crypt () memiliki garam 12 bit dan output 12 + 64 bit untuk kata sandi delapan byte (kemudian biasanya base64 disandikan). Untuk password yang umum, ya, Anda mungkin bisa menyerang mereka dengan kekerasan, tetapi tidak mengambil bahwa banyak password untuk membuat retak dengan kekerasan tidak layak jika setiap pemeriksaan password mengambil kedua. Mempersiapkan tabel asin untuk satu kata sandi saja akan memakan waktu satu jam dengan laju satu enkripsi per detik, ditambah Anda harus bersaing dengan penyimpanan terbatas (40-80 MB banyak pada masa itu).
CVn
@PeterCordes Poin bagus. Saya menghapus bagian itu karena sebenarnya tidak terlalu relevan untuk menjawab pertanyaan OP.
CVn
10

Mengapa izin untuk file / etc / shadow diatur menjadi 600?

Siapa yang memberitahumu itu?

$ls -l /etc/shadow
-rw-r----- 1 root shadow 1407 mei 18 10:05 /etc/shadow
  • itu adalah 640.

Jawaban sederhana: izin di Linux dianggap serius. Tidak ada alasan bagi "orang lain" untuk melakukan apa saja dengan /etc/shadow. Dan tidak ada alasan untuk grup "bayangan" untuk menulis padanya. Dan eksekusi di luar urutan.

Namun, karena semua kata sandi di dalamnya tidak disimpan dalam teks yang jelas tetapi sebagai hash (yang berarti tidak mungkin untuk menghitung kata sandi asli dari hash), mengapa tidak dapat dibaca oleh semua orang?

Karena tidak ada satu alasan pun untuk melakukannya.

Hash adalah satu arah. Memberi seseorang akses baca memungkinkannya menggunakan skrip untuk menyalahgunakan satu arah ini: cukup daftarkan kata apa saja yang dapat Anda bayangkan dan buat hash. Pada titik tertentu mungkin cocok dengan kata sandi. Mungkin butuh beberapa saat juga.

Ini jawabannya adalah menarik dan memiliki beberapa perkiraan pada kasar memaksa.

Rinzwind
sumber
640 untuk pengguna normal ?? pengguna grup dapat membaca file bayangan ??
Shubhanshu Vishwakarma
Maaf? File tersebut adalah 640. Jadi baca, tulis untuk pengguna "root" dan baca untuk grup "shadow". "shadow" adalah grup sistem yang dibuat istimewa untuk tujuan khusus ini.
Rinzwind
2

Latar belakang penting: /etc/shadowhanya ada untuk tujuan menyembunyikan hash kata sandi. Di Masa Awal Unix, hash kata sandi disimpan di /etc/passwd. Ketika komputer semakin kuat, koneksi jaringan semakin gigih dan eksploitasi keamanan semakin canggih, orang-orang menyadari bahwa menjaga kata sandi yang mudah dibaca dapat menimbulkan masalah. (Aku tidak akan merinci eksploitasi; sudah ada cukup jawaban bagus tentang itu.)

Tetapi /etc/passwdtidak dapat dibaca-dilindungi: Digunakan oleh semua jenis program untuk memetakan id angka pengguna ke nama pengguna, dan untuk mencari direktori home, shell default, nama lengkap pengguna (dan nomor kantor dll. - lihat man finger) . Jadi bagian yang sensitif, kata sandi hash, dipindahkan ke /etc/shadow, dan sisanya tetap seperti itu. Itu sebabnya /etc/passwd, abaikan namanya, berisi segalanya kecuali kata sandi (hash).

alexis
sumber
terima kasih atas balasan Anda pada pertanyaan saya, sekarang saya mendapat ide lengkap tentang / etc / passwd dan / etc / shadow file.
Shubhanshu Vishwakarma