Apa peran yang dimainkan DAC (izin file), ACL dan MAC (SELinux) dalam keamanan file Linux?

18

Saya perlu beberapa klarifikasi / konfirmasi / elaborasi tentang peran yang berbeda yang dimainkan DAC, ACL dan MAC dalam keamanan file Linux.

Setelah beberapa penelitian dari dokumentasi, ini adalah pemahaman saya tentang tumpukan:

  1. SELinux harus memberi Anda akses ke objek file.
  2. Jika file ACL (misalnya, setfacl, getfacluntuk ACL mount) secara eksplisit memungkinkan / menolak akses ke objek, maka pengolahan lagi diperlukan.
  3. Jika tidak, terserah izin file (model rwxrwxrwx DAC).

Apakah saya melewatkan sesuatu? Apakah ada situasi di mana ini bukan masalahnya?

Belmin Fernandez
sumber
2
Saya pikir Anda benar. Bisakah Anda memposting masalah yang Anda alami?
Kevin M
Saya minta maaf atas pertanyaan yang salah bentuk. Saya merasa seperti ini, saya masuk ke mode "coba-coba". Saya mencoba untuk menangkapnya dengan penuh percaya diri dan berharap seseorang dapat membagikan gambaran yang lebih jelas tentang peran yang dimainkan oleh setiap bagian tumpukan.
Belmin Fernandez
Mengedit pertanyaan untuk mengklarifikasi apa yang saya cari dalam jawaban.
Belmin Fernandez

Jawaban:

19

Ketika sebuah proses melakukan operasi ke file, kernel Linux melakukan pemeriksaan dalam urutan berikut:

  1. Discretionary Access Control (DAC) atau kontrol akses yang ditentukan pengguna. Ini mencakup pemeriksaan izin gaya UNIX klasik dan Daftar Kontrol Akses POSIX (ACL) . Pemeriksaan UNIX klasik membandingkan proses UID dan GID saat ini dengan UID dan GID dari file yang sedang diakses sehubungan dengan mode mana yang telah ditetapkan (Baca / Tulis / eXecute). Daftar Kontrol Akses memperpanjang pemeriksaan UNIX klasik untuk memungkinkan lebih banyak opsi mengenai kontrol izin.

  2. Mandatory Access Control (MAC) atau kontrol akses berbasis kebijakan. Ini diimplementasikan menggunakan Linux Security Modules (LSM) yang bukan modul nyata lagi (mereka dulu tetapi itu dijatuhkan). Mereka memungkinkan pemeriksaan tambahan berdasarkan pada model lain selain pemeriksaan keamanan gaya UNIX klasik. Semua model tersebut didasarkan pada kebijakan yang menggambarkan opeartions seperti apa yang diizinkan untuk proses mana dalam konteks mana.

Berikut adalah contoh untuk akses inode (yang mencakup akses file) untuk mendukung jawaban saya dengan tautan ke Referensi Silang Linux online . " function_name(Nama file: baris)" yang diberikan adalah untuk versi 3.14 dari kernel Linux.

Fungsi inode_permission( fs / namei.c: 449 ) pertama-tama memeriksa izin baca pada sistem file itu sendiri ( sb_permissiondalam fs / namei.c: 425 ), lalu memanggil __inode_permission( fs / namei.c: 394 ) untuk memeriksa baca / tulis / eksekusi izin dan POSIX ACL pada inode di do_inode_permission( fs / namei.c: 368 ) (DAC) dan kemudian izin terkait LSM (MAC) di security_inode_permission( security / security.c: 550 ).

Hanya ada satu pengecualian untuk pesanan ini (DAC kemudian MAC): itu untuk cek mmap. Tetapi ini telah diperbaiki dalam versi 3.15 dari kernel Linux ( commit yang relevan ).

Siosm
sumber
Jawaban yang sangat terperinci dengan sumber kanonik. Terima kasih!
Belmin Fernandez
15

DAC== Discretionary Access Control, http://en.wikipedia.org/wiki/Discretionary_access_control
MAC == Mandatory Access Control, http://en.wikipedia.org/wiki/Mandatory_access_control
ACL == Access Control List, http://en.wikipedia.org/wiki/Access_control_list

The ACLMenentukan kontrol yang akan diterapkan dengan metode kontrol, DACatau MAC. MACeksplisit, dikendalikan secara terpusat, dan tidak memungkinkan pengguna untuk memberikan wewenang kepada suatu objek kecuali mereka memiliki izin eksplisit untuk melakukannya, sedangkan DACmemungkinkan pengguna untuk memberikan pengguna lain akses ke objek yang dapat mereka akses.

MAC ACLs akan selalu diterapkan pada permintaan terlebih dahulu, dan jika akses ditolak, proses berhenti. Jika akses diizinkan maka DAC ACLs diterapkan, dan lagi jika akses ditolak pemrosesan berhenti. Hanya jika akses diberikan oleh keduanya MACdan DAC ACLs dapat pengguna mengakses objek yang mereka minta.

SELinuxadalah MACimplementasi untuk Linux (ada yang lain), sedangkan rwxizin file tradisional , dikombinasikan dengan pengguna yang dimiliki dan grup membentuk lengkap DAC ACL. The SELinux'kebijakan' pada dasarnya adalah MAC ACL.

Mike Insch
sumber
1
Di mana file ACL (misalnya, setfacl) masuk?
Belmin Fernandez
1
setaclmemperluas sistem file dasar ACLuntuk memungkinkan lebih dari satu pengguna atau grup untuk ditugaskan ke ACLuntuk file dan direktori. Ini juga merupakan DACimplementasi, dan karena itu diterapkan setelah SELinux MAC ACLs.
Mike Insch
Terima kasih Mike. Satu pertanyaan lagi: Sejauh yang saya tahu melalui pengujian saya, setfaclACL yang secara eksplisit mengesampingkan izin tradisional. Apakah ini benar dalam setiap kasus?
Belmin Fernandez
Sejauh yang saya tahu, ya, setacl/ setfacl ACLs akan menimpa tradisional 'sederhana' ACLpada file.
Mike Insch
1
Mike, catatanmu tentang setfaclmilik jawabannya.
Pavel Šimerda