1. Pembukaan
Security-Enhanced Linux (SELinux) adalah modul kernel Linux dan subsistem keamanan Linux.
SELinux terutama dikembangkan oleh NSA. Kernel Linux 2.6 dan di atasnya sudah mengintegrasikan modul SELinux.
SELinux sangat kompleks dan memiliki banyak hal konseptual yang sulit dipelajari. Banyak administrator sistem Linux telah mematikan SELinux karena mereka menganggapnya merepotkan.
Jika Anda dapat menguasai SELinux dan menggunakannya dengan benar, saya pikir seluruh sistem pada dasarnya dapat mencapai titik "tidak dapat dihancurkan" (selalu ingat bahwa tidak ada keamanan mutlak).
Menguasai konsep dasar SELinux serta metode konfigurasi sederhana adalah kursus wajib bagi setiap administrator sistem Linux.
Artikel ini didasarkan pada CentOS 7.4.1708.
Artikel ini murni berbagi dan bertukar pengalaman belajar pribadi, kesalahan tidak dapat dihindari, hanya untuk referensi! Jika Anda menemukan kesalahan, harap tunjukkan, terima kasih banyak!
2. Peran SELinux dan mekanisme manajemen izin
2.1 Peran SELinux
Fungsi utama SELinux adalah untuk meminimalkan sumber daya yang dapat diakses oleh proses layanan dalam sistem (prinsip hak istimewa paling rendah).
Bayangkan jika layanan jaringan yang berjalan sebagai root memiliki kerentanan 0day, peretas dapat mengeksploitasi kerentanan ini untuk melakukan apa pun yang mereka inginkan di server Anda sebagai root. Bukankah itu menakutkan?
SELinux hadir untuk memecahkan masalah ini.
2.2 DAC
Dalam sistem operasi yang tidak menggunakan SELinux, faktor yang menentukan apakah sumber daya dapat diakses adalah apakah sumber daya memiliki izin dari pengguna yang sesuai (baca, tulis, jalankan).
Selama proses mengakses sumber daya ini memenuhi persyaratan di atas, maka dapat diakses.
Masalah yang paling fatal adalah bahwa pengguna root tidak tunduk pada peraturan apa pun, dan sumber daya apa pun pada sistem dapat diakses tanpa batasan.
Badan utama dari mekanisme manajemen izin ini adalah pengguna, juga dikenal sebagai kontrol akses otonom (DAC).
2.3 MAC
Dalam sistem operasi yang menggunakan SELinux, faktor-faktor yang menentukan apakah sumber daya dapat diakses tidak hanya faktor-faktor di atas, tetapi juga apakah setiap jenis proses memiliki akses ke jenis sumber daya tertentu.
Dengan cara ini, meskipun proses berjalan sebagai root, perlu untuk menentukan jenis proses dan jenis sumber daya yang diizinkan untuk diakses sebelum memutuskan apakah akan mengizinkan akses ke sumber daya. Ruang aktif proses juga dapat dikompresi seminimal mungkin.
Bahkan proses layanan yang berjalan sebagai root umumnya hanya memiliki akses ke sumber daya yang dibutuhkannya. Bahkan jika suatu program rentan, ruang lingkup dampaknya terbatas pada sumber daya yang diizinkan untuk diakses. Keamanan sangat meningkat.
Tubuh utama dari mekanisme manajemen izin ini adalah proses, juga dikenal sebagai kontrol akses wajib (MAC).
MAC dibagi lagi menjadi dua cara, satu disebut mode Keamanan Kategori (MCS), dan yang lainnya disebut mode Keamanan Multi-Level (MLS).
Tindakan berikut dalam mode MCS.
2.4 Perbandingan DAC dan MAC
Berikut adalah gambar untuk diilustrasikan.
Seperti yang Anda lihat, dalam mode DAC, selama direktori yang sesuai memiliki izin dari pengguna yang sesuai, direktori tersebut dapat diakses. Dalam mode MAC, itu juga dibatasi oleh rentang direktori yang diizinkan untuk diakses oleh proses.
3. Konsep dasar SELinux
3.1 Subjek
Ini dapat sepenuhnya disamakan dengan sebuah proses.
Catatan: Untuk kemudahan pemahaman, kecuali ditentukan lain, proses ini dianggap sebagai badan utama di bawah ini.
3.2 Objek
Sumber daya yang diakses oleh kepala sekolah. Ini bisa berupa file, direktori, port, perangkat, dll.
Catatan: Untuk memudahkan pemahaman, kecuali ditentukan lain, dokumen atau direktori berikut dianggap sebagai objek.
3.3 Kebijakan & Aturan
Biasanya ada sejumlah besar file dan proses dalam sistem, dan untuk menghemat waktu dan overhead, kami biasanya hanya mengatur proses tertentu secara selektif.
Dan proses mana yang perlu diatur dan bagaimana mengendalikannya ditentukan oleh kebijakan.
Ada beberapa aturan dalam kebijakan. Beberapa aturan dapat diaktifkan atau dinonaktifkan sesuai kebutuhan (selanjutnya disebut sebagai aturan Boolean).
Aturannya modular dan dapat diperluas. Saat menginstal aplikasi baru, aplikasi dapat menambahkan aturan dengan menambahkan modul baru. Pengguna juga dapat menambahkan atau mengurangi aturan secara manual.
Dalam sistem CentOS 7, ada tiga set kebijakan, yaitu:
1. ditargetkan: Mengontrol sebagian besar proses layanan jaringan. Ini adalah kebijakan yang digunakan oleh sistem secara default (semua di bawah ini digunakan).
2. Minimum: Berdasarkan target, hanya proses layanan jaringan yang dipilih yang diatur. Umumnya tidak.
3. MLS: Perlindungan keamanan multi-level. Atur semua proses. Ini adalah kebijakan yang paling ketat, dan konfigurasinya sangat sulit. Umumnya, tidak digunakan kecuali ada persyaratan keamanan yang sangat tinggi.
Kebijakan dapat diatur di /etc/selinux/config.
3.4 Konteks Keamanan
Konteks keamanan adalah inti dari SELinux.
Konteks keamanan Saya membaginya menjadi "konteks keamanan proses" dan "konteks keamanan dokumen".
Konteks Keamanan Proses biasanya sesuai dengan beberapa Konteks Keamanan Dokumen.
Hanya ketika konteks keamanan keduanya sesuai, proses dapat mengakses file. Korespondensi mereka ditentukan oleh aturan dalam polis.
Konteks keamanan file ditentukan oleh tempat file dibuat dan proses yang membuatnya. Dan sistem memiliki serangkaian nilai default, dan pengguna juga dapat mengatur nilai default.
Penting untuk dicatat bahwa hanya memindahkan file tidak mengubah konteks keamanan file Anda.
Struktur dan makna konteks keamanan
Konteks keamanan memiliki empat bidang, dipisahkan oleh titik dua. Bentuk seperti: system_u:object_r:admin_home_t:s0.
3.5 Mode Kerja SELinux
SELinux memiliki tiga mode operasi, yaitu:
1. menegakkan: Mode yang diberlakukan. Pelanggaran aturan SELinux akan diblokir dan dicatat ke log.
2. Permisif: Mode toleransi. Pelanggaran aturan SELinux hanya dicatat dalam log. Umumnya untuk debugging.
3. dinonaktifkan: Matikan SELinux.
Mode kerja SELinux dapat diatur di /etc/selinux/config.
Jika Anda ingin beralih dari dinonaktifkan ke menegakkan atau permisif, Anda harus memulai ulang sistem. Dan sebaliknya.
Mode Penegakan dan Permisif dapat dengan cepat dialihkan dengan perintah Setenforce 1|0.
Penting untuk dicatat bahwa jika sistem telah berjalan dengan SELinux dimatikan untuk sementara waktu, restart pertama setelah SELinux dihidupkan mungkin lebih lambat. Karena sistem harus membuat konteks yang aman untuk file di disk (saya bilang saya memulai ulang selama sekitar 10 menit dan mengira itu mati...... )。
Log SELinux perlu dicatat dengan bantuan auditd.service, harap jangan nonaktifkan.
3.6 Alur Kerja SELinux
Berikut adalah kutipan dari sebuah gambar, tanpa banyak penjelasan.
Catatan: Teks keamanan di atas mengacu pada konteks keamanan.
4. Operasi SELinux dasar
4.1 Mengkueri konteks keamanan file atau direktori
Penggunaan dasar perintah
ls -Z
Contoh penggunaan
Mengkueri konteks keamanan /etc/hosts.
ls -Z /etc/host
Hasil eksekusi
-rw-r--r--. root root system_u:object_r:net_conf_t:s0 /etc/hosts
4.2 Kueri konteks keamanan proses
Penggunaan dasar perintah
ps auxZ | grep -v grep | grep
Contoh penggunaan
Tanyakan konteks keamanan proses terkait Nginx.
ps auxZ | grep -v grep | grep nginx
Hasil eksekusi
system_u:system_r:httpd_t:s0 root 7997 0.0 0.0 122784 2156 ? Ss 14:31 0:00 nginx: proses master /usr/sbin/nginx
system_u:system_r:httpd_t:s0 nginx 7998 0,0 0,0 125332 7560 ? S 14:31 0:00 nginx: proses pekerja
4.3 Ubah konteks keamanan file atau direktori secara manual
Penggunaan dasar perintah
chcon [...]
Fungsi opsi -u Ubah bidang pengguna konteks keamanan -r Ubah bidang peran konteks keamanan -t Ubah bidang jenis konteks keamanan -l Ubah bidang tingkat konteks keamanan --referensi Ubah konteks keamanan yang konsisten dengan file atau direktori yang ditentukan -R Operasi rekursif -h Ubah konteks keamanan tautan lunak (ubah file tautan lunak yang sesuai tanpa opsi ini)
Contoh penggunaan
Ubah konteks keamanan pengujian ke aaa_u:bbb_r:ccc_t:s0.
Uji ccc_t CHCON -U aaa_u -R bbb_r -T
4.4 Mengembalikan konteks keamanan file atau direktori ke nilai defaultnya
Penggunaan dasar perintah
Restorecon [opsi] [...]
Fungsi Opsi - Prosedur Operasi Cetak V - Operasi Rekursif R
Contoh penggunaan
Setelah Anda menambahkan beberapa file web ke direktori server Nginx Anda, atur konteks keamanan yang benar untuk file baru ini.
restorecon -R /usr/share/nginx/html/
4.5 Kueri aturan Boolean dan statusnya dalam sistem
Penggunaan dasar perintah
getsebool -a
Karena perintah mengkueri semua aturan atau hanya satu aturan, biasanya perintah mengkueri semua aturan terlebih dahulu dan kemudian memfilter dengan grep.
Contoh penggunaan
Meminta aturan Boolean yang terkait dengan httpd.
getsebool -a | grep httpd
Hasil eksekusi
httpd_anon_write --> mati
httpd_builtin_scripting --> aktif
httpd_can_check_spam --> mati
httpd_can_connect_ftp --> mati
#以下省略
4.6 Mengganti aturan Boolean
Penggunaan dasar perintah
setsebool [opsi]
Fungsi opsi -P restart masih berlaku
Contoh penggunaan
Aktifkan aturan httpd_anon_write.
setsebool -P httpd_anon_write aktif
4.7 Menambahkan Konteks Keamanan Default untuk Direktori
Penggunaan dasar perintah
semanage fcontext -a -t "(/.*)?"
Catatan: Konteks keamanan default direktori atau file dapat dilihat dengan menggunakan perintah semanage fcontext -l bersama dengan pemfilteran grep.
Contoh penggunaan
Setelah Anda menambahkan direktori situs baru /usr/share/nginx/html2 ke Nginx, Anda perlu mengatur konteks keamanan default yang sama untuk direktori aslinya.
semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"
4.8 Tambahkan port yang diizinkan oleh jenis proses tertentu
Penggunaan dasar perintah
semanage port -a -t -p
Catatan: Nomor port yang diizinkan untuk berbagai jenis layanan dapat dilihat dengan menggunakan perintah semanage port -l dengan pemfilteran grep.
Contoh penggunaan
Untuk Nginx, Anda perlu menggunakan port 10080 untuk layanan HTTP.
Semanage Port -a -t http_port_t -p tcp 10080
5. Analisis dan resolusi kesalahan SELinux
5.1 Memahami Log SELinux
Ketika SELinux diaktifkan, beberapa perilaku normal dari banyak layanan dianggap sebagai pelanggaran (baik dalam judul maupun dalam kesalahan di bawah ini).
Saat ini, kita perlu menggunakan log pelanggaran SELinux untuk menganalisis dan menyelesaikannya.
Log pelanggaran SELinux disimpan di /var/log/audit/audit.log.
/var/log/audit/audit.log 的内容大概是这样的。
type=LOGIN msg=audit(1507898701.391:515): pid=8523 uid=0 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 old-auid=4294967295 auid=0 tty=(none) old-ses=4294967295 ses=25 res=1
type=USER_START msg=audit(1507898701.421:516): pid=8523 uid=0 auid=0 ses=25 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_open grantors=pam_loginuid,pam_ keyinit,pam_limits,pam_systemd acct="root" exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=success'
...
File ini banyak konten, dan dicampur dengan banyak log audit sistem yang tidak ada hubungannya dengan kesalahan SELinux. Kita akan menggunakan utilitas sealert untuk membantu analisis (jika prompt tidak dapat menemukan perintah, instal paket setroubleshoot).
5.2 Analisis kesalahan dengan sealert
Penggunaan dasar perintah
sealert -a /var/log/audit/audit.log
Setelah menjalankan perintah, sistem perlu meluangkan waktu untuk menganalisis pelanggaran dalam log dan memberikan laporan analisis. |