Pengantar Konsep dan Manajemen Selinux

Pengantar Konsep dan Manajemen Selinux

Objektif

Pengantar Konsep dan Manajemen Selinux

Sistem Operasi dan Versi Perangkat Lunak

  • Sistem operasi: - Distribusi Linux Agnostik

Persyaratan

  • Akses root pada instalasi Linux yang berfungsi dengan kebijakan selinux yang valid
  • Paket PolicyCoreutils: menyediakan utilitas getsebool, setsebool, restorecon
  • Paket Coreutils: menyediakan utilitas chcon
  • Paket PolicyCoreutils-Python: Menyediakan perintah semanage
  • PolicyCoreutils-Newrole: Menyediakan Program Newrole
  • setools-console: menyediakan perintah seinfo

Kesulitan

SEDANG

Konvensi

  • # - mensyaratkan perintah linux yang diberikan untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
  • $ - mensyaratkan perintah Linux yang diberikan untuk dieksekusi sebagai pengguna biasa

Perkenalan

Selinux (Security Enhanced Linux) adalah implementasi dari Sistem Izin Kontrol Akses Wajib (MAC) di kernel Linux. Jenis kontrol akses ini berbeda dari Sistem Kontrol Akses Discretionary (DAC) seperti ACLS dan Izin UGO/RWX standar UGO/RWX, dalam bagaimana akses ke sumber daya disediakan. Dalam kasus Mac bukanlah pemilik sumber daya yang memutuskan siapa dan bagaimana dapat mengaksesnya: akses ini didasarkan pada hubungan antara domain dan label, ditentukan oleh kebijakan dan ditegakkan di tingkat kernel. Penting untuk mengatakan bahwa aturan yang ditegakkan Selinux dan izin sistem standar tidak saling eksklusif, dan yang pertama diimplementasikan setelah yang terakhir.

Kemungkinan status selinux

Ada tiga kemungkinan status selinux: dinonaktifkan, permisif dan menegakkan. Dalam kasus pertama Selinux benar -benar mati: tidak memiliki efek pada sistem yang sedang berjalan. Ketika dalam mode permisif selinux aktif: ia mencatat pelanggaran kebijakan, tetapi tidak ada yang memblokirnya. Akhirnya, saat dalam mode penegakan, Selinux sebenarnya menegakkan kebijakannya.

Ada banyak cara Anda dapat memeriksa status selinux di sistem Anda. Yang pertama menggunakan perintah yang disebut getenforce. Perintah ini hanya melaporkan apa dari tiga status yang disebutkan di atas selinux. Untuk memiliki output yang lebih verbose, Anda dapat menggunakan utilitas sesestatus. Ini adalah output dari perintah pada sistem saya (Centos 7):

Status Selinux: Diaktifkan selinuxfs mount:/sys/fs/selinux selinux direktori root:/etc/selinux Loaded Policy Name: Mode saat ini yang ditarget : 28 

Beberapa informasi berguna disediakan: pertama -tama Selinuxfs mountpoint, Dalam hal ini/sys/fs/selinux. Selinuxfs adalah sistem file pseudo, seperti /proc: diisi saat runtime oleh kernel linux dan berisi file yang berguna untuk mendokumentasikan status selinux. Itu Direktori Root Selinux adalah, sebaliknya, jalur yang digunakan untuk menyimpan file konfigurasi selinux, yang utama adalah/etc/selinux/config (tautan simbolik ke file ini juga ada di/etc/sysconfig/selinux). Mengubah file ini secara langsung adalah cara paling mudah untuk mengubah status dan mode Selinux. Mari kita lihat kontennya:

$ cat/etc/selinux/config # File ini mengontrol status selinux pada sistem. # Selinux = dapat mengambil salah satu dari tiga nilai ini: # penegakan - kebijakan keamanan selinux ditegakkan. # Permissive - Selinux mencetak peringatan alih -alih menegakkan. # Dinonaktifkan - Tidak ada kebijakan selinux yang dimuat. Selinux = penegakan # selinuxtype = dapat mengambil satu dari tiga nilai: # Proses yang ditargetkan - ditargetkan dilindungi, # minimum - modifikasi kebijakan yang ditargetkan. Hanya proses yang dipilih yang dilindungi. # MLS - Perlindungan Keamanan Multi Level. Selinuxtype = ditargetkan 

File ini dikomentari dengan sangat baik: Dengan mengubah nilai variabel selinux dan selinuxtype, kami dapat mengatur masing -masing status selinux dan mode selinux selinux. Mode yang mungkin adalah: ditargetkan (default), minimum dan MLS. Mode yang ditargetkan adalah default: Saat mode ini aktif, semua proses yang ditargetkan dilindungi. Mode minimum adalah subset dari yang pertama, di mana hanya proses spesifik yang dilindungi. Akhirnya kebijakan MLS yang paling canggih, berdasarkan konsep klasifikasi keamanan: Dari tidak diklasifikasi hingga rahasia: ia menggunakan model Bell-La Padula, yang dikembangkan untuk Departemen Pertahanan AS.

Mengubah status selinux

Untuk mengubah status selinux saat runtime Anda dapat menggunakan setenforce memerintah. Sintaksnya sangat sederhana: Anda menentukan status yang ingin Anda masukkan selinux, memilih antara penegakan atau permisif atau memberikan nilai boolean yang dirujuk ke status penegakan. Apa yang tidak dapat Anda lakukan dengan perintah ini adalah menonaktifkan Selinux sepenuhnya. Untuk mencapai ini (tidak disarankan) dan membuat perubahan gigih lainnya, Anda harus mengedit file konfigurasi utama, seperti yang terlihat di atas. Perubahan yang dilakukan pada file ini diterapkan setelah reboot.

Bagaimana cara kerja selinux?

Pada dasarnya Selinux bekerja pada konsep entitas: subjek, objek dan tindakan. Subjek adalah aplikasi atau proses (server HTTP misalnya), objek adalah sumber daya pada sistem, seperti file, soket, atau port. Akhirnya suatu tindakan adalah apa yang dapat dilakukan oleh subjek spesifik itu pada objek. Subjek berjalan di bawah domain tertentu, yang, misalnya, dalam kasus daemon httpd adalah httpd_t. Ini mudah diverifikasi dengan memeriksa proses berjalan dengan perintah ps: yang perlu kita lakukan adalah menambahkan sakelar -z (-z sakelar sering dikaitkan dengan selinux pada perintah yang mendukungnya, seperti ls misalnya):

$ PS -AUXZ | grep httpd 

Perintah di atas memberikan hasil berikut (output terpotong):

System_u: System_r: httpd_t: s0 Apache 2340 0.0 0.2 221940 2956 ? S 14:20 0:00/USR/SBIN/HTTPD -DFOREGROUND 

Berlari di bawah domain httpd_t, layanan httpd (subjek) hanya dapat mengakses sumber daya (tindakan) (objek) dalam jenis selinux yang terkait. Cara yang sangat sederhana untuk memverifikasi ini adalah dengan memeriksa direktori /var /www. Daemon httpd harus dapat mengaksesnya, jadi mari kita periksa jenis apa yang dimiliki direktori ini. Kita dapat melakukannya dengan menggunakan perintah LS dengan sakelar -z:

$ ls -dz /var /www 

Perintah memberi kita hasil ini:

System_u: Object_r: httpd_sys_content_t: s0 /var /www 

Output menunjukkan kepada kita konteks selinux lengkap, dan direktori /var /www diberi label dengan tipe ttpd_sys_content_t. Ini masuk akal: Kebijakan Selinux yang ditargetkan memungkinkan proses yang berjalan di bawah domain httpd_t untuk mengakses (dalam mode hanya baca) semua file yang diberi label dengan tipe httpd_sys_content_t, apa pun izin DAC yang diatur pada file tersebut. Jika proses akan mencoba tindakan apa pun yang tidak diharapkan oleh kebijakan, Selinux akan mencatat kesalahan, dan, jika dalam mode penegakan, memblokir tindakan itu sendiri.

Pengguna Selinux

Kami melihat di atas bagaimana representasi konteks Selinux lengkap tampaknya disusun:

System_u: Object_r: httpd_sys_content_t: s0 

Mari kita analisis struktur ini dengan mempertimbangkan tiga bagian pertama (yang keempat dirujuk ke mode MLS). Bagian pertama adalah tentang pengguna Selinux: Setiap pengguna Selinux memiliki serangkaian pembatasan yang berbeda dan diizinkan
Untuk memainkan hanya satu set peran selinux tertentu yang memberikan akses ke domain selinux tertentu, yang, pada gilirannya, hanya dapat mengakses jenis Selinux yang menghubungkan.

Pengguna Selinux dapat memainkan peran selinux dapat pergi ke domain selinux memiliki akses ke jenis selinux 

Untuk memiliki gagasan yang jelas tentang pengguna Selinux yang tersedia, kami dapat menjalankan:

# Sarganage User -l

Perintah ini memberi kami tampilan keseluruhan yang jelas dari pengguna - Peran Hubungan:

PREFIX Pengguna Selinux MCS Level MCS Range Selinux Peran Guest_u Pengguna S0 S0 Guest_R Root User S0 S0-S0: C0.c1023 staff_r sysadm_r system_r unconfined_r staff_u user s0-s0: c0.c1023 staff_r sysadm_r system_r unconfined_r sysadm_u user s0-s0: c0.C1023 SYSADM_R System_U Pengguna S0 S0-S0: C0.C1023 System_R unconfined_r unconfined_u user s0 s0-s0: c0.C1023 System_R unconfined_r user_u user s0 s0 user_r xguest_u user s0 s0 xguest_r 

Mari kita lihat secara singkat apa yang dilakukan oleh beberapa pengguna Selinux yang dijelaskan untuk dilakukan:

  • Guest_u: Jenis pengguna ini tidak memiliki akses ke jaringan, tidak ada hak eksekusi skrip di /rumah, juga tidak dapat menggunakan perintah sudo atau su untuk mendapatkan hak istimewa yang lebih tinggi. Itu hanya bisa menggunakan peran tamu
  • staff_u: Pengguna sistem yang dipetakan ke pengguna selinux ini memiliki akses ke GUI, ke jaringan, dan untuk penggunaan perintah sudo untuk mendapatkan hak istimewa. Itu dapat beralih di antara peran stuff_r, sysadm_r, system_r dan unconfined_r
  • sysadmin_u: Sama seperti di atas, plus dapat menggunakan juga perintah su. Itu hanya bisa memainkan peran sysadm_r
  • System_u: Ini adalah pengguna yang ditugaskan untuk layanan sistem, tidak ada pengguna sistem yang harus dipetakan padanya
  • unconfined_u: Jenis pengguna ini tidak memiliki batasan. Itu memiliki peran unconfined_r dan system_r yang terkait dengannya
  • xguest_u: Pengguna Selinux ini memiliki akses ke GUI dan ke jaringan, tetapi hanya melalui browser Firefox. Itu tidak memiliki hak eksekusi untuk file di bawah /rumah dan hanya memiliki peran xguest_r yang terkait dengannya

Seperti yang Anda lihat, pengguna Selinux dapat diidentifikasi, dalam konteksnya, memiliki akhiran _u. Seharusnya jelas bahwa mereka adalah hal yang sama sekali berbeda dari pengguna sistem. Ada peta antara keduanya, dan mungkin untuk melihatnya dengan berlari SANMANAGE LOGIN -L memerintah:

# semanage -l login

Yang memberi kita output berikut:

Nama Login Selinux Pengguna MLS/MCS Range Service __Default__ unconfined_u S0-S0: C0.C1023 * root unconfined_u s0-s0: c0.C1023 * 

Root pengguna sistem dipetakan ke pengguna selinux unconfined_u, oleh karena itu tidak memiliki batasan. Tidak ada pengguna lain yang secara eksplisit dipetakan, jadi mereka, secara default, terkait dengan pengguna Selinux yang tidak terkontrol.

Mengubah pengguna Selinux

Pada titik ini Anda dapat bertanya bagaimana mungkin untuk mengatur peta antara pengguna sistem dan selinux. Kami menyelesaikan tugas ini dengan menggunakan perintah login semanage. Dalam contoh berikut saya mengubah pemetaan default, mengaitkan pengguna dummy di sistem saya ke pengguna Guest_u Selinux:

# Sarganage Login -A -S Guest_u Dummy 

Sakelar -a adalah kependekan dari -add dan digunakan untuk menambahkan catatan, sedangkan -s satu (pendek untuk -seuser) menentukan pengguna selinux yang harus dipetakan oleh pengguna sistem. Sekarang mari kita jalankan lagi login semanage -l untuk melihat apakah ada yang berubah:

Nama Login Selinux Pengguna MLS/MCS Range Service __Default__ unconfined_u S0-S0: C0.C1023 * Dummy Guest_u S0 * root unconfined_u s0-s0: c0.C1023 * System_U System_U S0-S0: C0.C1023 * 

Seperti yang diharapkan, pengguna boneka sistem sekarang dikaitkan dengan pengguna Guest_u Selinux yang, seperti yang dikatakan sebelumnya, tidak memiliki akses ke jaringan. Mari kita verifikasi dengan cara yang paling sederhana: kami mencoba untuk melakukan ping google dan melihat apa hasilnya:

[dummy@linuxconfig ~] $ ping google.com ping: soket: izin ditolak 

Seperti yang diharapkan, pengguna dummy tidak diizinkan menggunakan jaringan, sehingga perintah ping gagal. Untuk menghapus pemetaan, kami menggunakan sakelar -D (pendek untuk -delete):

# Sarganage Login -D -S Guest_u Dummy 

Tidak memiliki pemetaan tertentu, pengguna dummy akan mundur ke pengguna SELINUX yang tidak terkontrol. Karena yang terakhir tidak memiliki batasan, jika kita mencoba lagi perintah di atas, sekarang seharusnya berhasil:

[dummy@linuxconfig ~] $ ping google.com ping google.com (216.58.205.206) 56 (84) byte data. 64 byte dari mil04s29-in-f14.1E100.net (216.58.205.206): icmp_seq = 1 ttl = 52 waktu = 29.2 ms [] 

Perlu diingat bahwa perubahan dalam pemetaan antara pengguna dan pengguna Selinux akan efektif hanya setelah login baru.

Peran Selinux

Bagian kedua dalam konteks Selinux adalah tentang peran. Seperti yang dapat Anda lihat dari output Semanage User -l Di atas, setiap pengguna Selinux dapat memainkan satu set peran selinux yang ditentukan: ketika ada beberapa peran untuk pengguna Selinux, pengguna juga dapat beralih di antara mereka menggunakan Newrole Perintah, menggunakan sintaks berikut:

$ newrole -r newrole 

Untuk memeriksa domain apa yang dapat diakses oleh peran tertentu, Anda harus menjalankan seinfo memerintah. Ini disediakan oleh setools-console kemasan. Misalnya untuk memeriksa domain apa yang dapat diakses dari peran stuff_r, kami menjalankan:

# seinfo -rstuff_r -x 
$ seinfo -rstaff_r -x (output terpotong) Staff_r Peran yang Didominasi: Staff_R Jenis: ABRT_HELPER_T ALSA_HOME_T ANTIVIRUS_HOME_T httpd_user_content_t httpd_user_htaccess_t [...] 

Domain dan tipe

Bagian ketiga dari konteks selinux adalah tentang domain dan jenis, dan dapat diidentifikasi dengan memiliki akhiran _t dalam representasi konteks. Kami menyebutnya sebagai tipe jika kami berbicara tentang suatu objek, atau sebagai domain jika kami berbicara tentang suatu proses. Mari lihat.

Saya telah membuat yang sederhana .file html di dalam apache virtualhost default pada mesin centos 7 saya: seperti yang Anda dapat melihat file mewarisi konteks selinux dari direktori yang dibuat di:

-RW-R-R--. root root unconfined_u: object_r: httpd_sys_content_t: s0 tes.html 

Dengan httpd_sys_content_t, File dapat dibaca dengan proses httpd, sebagaimana dikonfirmasi dengan menavigasi ke dalamnya di browser.

Sekarang mari kita coba mengubah jenis file dan melihat efek perubahan ini. Untuk memanipulasi konteks selinux, kami menggunakan chcon memerintah:

# chcon -t user_home_t/var/www/html/test.html 

Kami mengubah jenis file selinux menjadi user_home_t: Ini adalah jenis yang digunakan oleh file yang terletak di pengguna
direktori rumah secara default. Menjalankan LS -Z pada file memberi kami konfirmasi:

unconfined_u: object_r: user_home_t: s0/var/www/html/test.html 

Jika kita sekarang mencoba menjangkau file dari browser, seperti yang diharapkan.

Itu chcon Perintah dapat digunakan tidak hanya untuk mengubah jenis file, tetapi juga pengguna dan peran peran dari konteks Selinux. Saat menggunakannya untuk mengubah konteks direktori, ia juga dapat berjalan secara rekursif dengan sakelar -r, dan dapat menetapkan konteks juga dengan referensi: dalam hal ini kami tidak menentukan bagian -bagian konteks yang akan diubah secara langsung, tetapi kami memberikan referensi untuk file atau direktori konteksnya harus sesuai. Misalnya, mari kita tes.File html di atas, memperoleh konteks direktori/var/www/html:

# chcon --referensi/var/www/html/var/www/html/test.html && ls -z/var/www/html/test.html 

Kita dapat melihat dari output perintah di atas, bahwa sekarang konteks file telah berubah lagi, dan sekarang sama dengan salah satu dari direktori/var/www/html:

System_u: Object_r: httpd_sys_content_t: s0/var/www/html/test.html 

Perhatikan bahwa perubahan yang dilakukan dengan perintah CHCON, akan bertahan dari reboot tetapi tidak relabel dengan file: dalam hal ini file akan diatur sesuai dengan kebijakan asli Selinux, dan perubahan akan hilang. Jadi bagaimana kita bisa membuat perubahan gigih? Kita harus menambahkan aturan baru ke kebijakan selinux menggunakan perintah semanage.

Katakanlah kami ingin menambahkan aturan yang menentukan bahwa semua file yang dibuat di direktori/home/egdoc/tes harus dimiliki, secara default Jenis httpd_sys_content_t. Inilah perintah yang harus kita jalankan:

Semanage fcontext -a -t httpd_sys_content_t/home/egdoc/test (/.*)? 

Pertama, kami meminta perintah Semanage yang menentukan fcontext Untuk memodifikasi konteks file, maka kami menambahkan -A Beralih untuk menambahkan catatan dan -T satu, untuk menentukan kami ingin mengubah bagian jenis konteks menjadi yang segera terjadi.

Akhirnya, kami menyediakan jalur direktori bersama dengan ekspresi reguler yang berarti: /home /egdoc /uji jalur diikuti oleh /karakter, diikuti oleh sejumlah karakter apa pun, seluruh ekspresi yang cocok 0 atau 1 kali. Ekspresi reguler ini akan cocok dengan semua nama file.

Kami sekarang menjalankan restorecon Perintah dengan -R Opsi (rekursif) di direktori, untuk menerapkan kebijakan. Karena sekarang aturan yang kami tambahkan di atas adalah bagian dari kebijakan itu sendiri, semua file yang terkandung dalam direktori, dan juga yang baru dibuat, akan memiliki konteks yang kami tentukan dalam aturan.

Pengaturan Selinux Boolean

Pengaturan selinux booleans dapat mengubah perilaku selinux, dan dikelola dengan penggunaan nilai boolean. Kita dapat berinteraksi dengan mereka dengan menggunakan dua perintah: getsebool Dan setSebool, yang pertama digunakan untuk menanyakan keadaan opsi dan yang kedua untuk mengubahnya.

Jika kami melewati opsi yang ingin kami periksa ke GetSebool, itu akan memberi kami keadaan opsi itu, jika kami menyediakannya dengan -A Beralih itu malah akan menunjukkan kepada kita semua pengaturan yang tersedia dan negara bagian Boolean masing -masing. Misalnya jika kami ingin memeriksa status opsi yang terkait dengan httpd kami dapat menjalankan:

$ getsebool -a | grep httpd 

Berikut adalah kutipan output yang sangat singkat:

[[email protected] ~] $ getsebool -a | grep httpd httpd_anon_write -> off httpd_builtin_scripting -> on [...] 

Sekarang mari kita coba mengubah status opsi httpd_anon_write, dan aktifkan. Seperti disebutkan di atas, kami menggunakan SetSebool untuk tugas tersebut:

# SetSebool httpd_anon_write 1 

Jika kita sekarang memeriksa nilai opsi, itu seharusnya diaktifkan:

[[email protected] ~] $ getsebool -a | grep httpd_anon_write httpd_anon_write -> on 

Semua berjalan seperti yang diharapkan. Namun, perubahan yang dibuat dengan cara ini tidak akan bertahan dari reboot. Untuk menyelesaikan tugas ini, kita harus menggunakan perintah yang sama, tetapi menambahkan -P Switch: Saat menggunakannya, perubahan akan ditulis ke kebijakan dan mereka akan bertahan.

Ada banyak hal yang harus dipertimbangkan ketika menggunakan Selinux, dan menyempurnakannya untuk mendapatkan perilaku tertentu, sambil mempertahankan izin yang lebih sedikit mungkin menjadi tugas yang memakan waktu. Meskipun demikian bukanlah ide yang bagus, dalam miopinion, untuk mematikannya sepenuhnya. Terus bereksperimen sampai Anda puas dengan hasilnya dan Anda mencapai pengaturan yang diinginkan:
Anda akan mendapatkan keamanan dan pengetahuan.

Tutorial Linux Terkait:

  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
  • Perintah Linux: 20 perintah terpenting teratas yang Anda butuhkan untuk…
  • File Konfigurasi Linux: 30 Teratas Paling Penting
  • Perintah Linux Dasar
  • Unduh Linux
  • Instal Arch Linux di VMware Workstation
  • Can Linux mendapatkan virus? Menjelajahi kerentanan Linux…
  • Pencatatan dan audit lanjutan di Linux