
Terjemahan artikel disiapkan untuk siswa kursus Keamanan Linux.
SELinux atau Security Enhanced Linux adalah mekanisme kontrol akses canggih yang dikembangkan oleh Badan Keamanan Nasional AS (NSA) untuk mencegah intrusi berbahaya. Ini mengimplementasikan model kontrol akses paksa (atau wajib) (Eng. Mandatory Access Control, MAC) di atas model discretionary (atau selektif) yang ada (Eng. Discretionary Access Control, DAC), yaitu izin untuk membaca, menulis, mengeksekusi.
SELinux memiliki tiga mode:
- Penegakan - Penolakan akses berdasarkan aturan kebijakan.
- Tindakan penebangan permisif yang melanggar kebijakan, yang dalam mode penegakan akan dilarang.
- Dinonaktifkan - Nonaktifkan SELinux sepenuhnya.
Secara default, pengaturannya ada di /etc/selinux/config
Mengubah Mode SELinux
Untuk mengetahui mode saat ini, jalankan
$ getenforce
Untuk mengubah mode menjadi permisif, jalankan perintah berikut
$ setenforce 0
atau, untuk mengubah mode dari permisif ke menegakkan , lakukan
$ setenforce 1
Jika Anda perlu menonaktifkan SELinux sepenuhnya, maka ini hanya dapat dilakukan melalui file konfigurasi
$ vi /etc/selinux/config
Untuk menonaktifkan, ubah parameter SELINUX sebagai berikut:
SELINUX=disabled
Pengaturan SELinux
Setiap file dan proses ditandai dengan konteks SELinux, yang berisi informasi tambahan seperti pengguna, peran, jenis, dll. Jika ini adalah pertama kalinya Anda mengaktifkan SELinux, Anda harus terlebih dahulu mengkonfigurasi konteks dan label. Proses pelabelan dan konteks dikenal sebagai pelabelan. Untuk mulai menandai, dalam file konfigurasi, ubah mode menjadi permisif .
$ vi /etc/selinux/config SELINUX=permissive
Setelah mengatur mode permisif , buat file tersembunyi kosong bernama autorelabel
di root
$ touch /.autorelabel
dan nyalakan kembali komputer
$ init 6
Catatan: kami menggunakan mode permisif untuk menandai, karena menggunakan mode penegakan dapat menyebabkan sistem crash saat reboot.
Jangan khawatir jika unduhan macet pada beberapa file, penandaan membutuhkan waktu. Setelah menandai dan mem-boot sistem Anda, Anda dapat pergi ke file konfigurasi dan mengatur mode penegakan , serta menjalankan:
$ setenforce 1
Anda sekarang telah berhasil mengaktifkan SELinux di komputer Anda.
Monitor log
Anda mungkin memiliki beberapa jenis kesalahan saat menandai atau saat sistem sedang berjalan. Untuk memeriksa apakah SELinux Anda berfungsi dengan benar dan jika ia tidak memblokir akses ke port, aplikasi, dll., Anda perlu melihat log. Log SELinux terletak di /var/log/audit/audit.log
, tetapi Anda tidak perlu membacanya secara keseluruhan untuk menemukan kesalahan. Anda dapat menggunakan audit2why untuk menemukan kesalahan. Jalankan perintah berikut:
$ audit2why < /var/log/audit/audit.log
Hasilnya, Anda mendapatkan daftar kesalahan. Jika tidak ada kesalahan dalam log, maka tidak ada pesan yang akan ditampilkan.
Mengkonfigurasi Kebijakan SELinux
Kebijakan SELinux adalah seperangkat aturan yang memandu keamanan SELinux. Suatu kebijakan mendefinisikan seperangkat aturan untuk lingkungan tertentu. Kami sekarang akan belajar cara mengonfigurasi kebijakan untuk memungkinkan akses ke layanan terbatas.
1. Nilai logis (switch)
Switch (booleans) memungkinkan Anda mengubah bagian kebijakan saat Anda bekerja, tanpa perlu membuat kebijakan baru. Mereka memungkinkan Anda untuk membuat perubahan tanpa me-reboot atau mengkompilasi ulang kebijakan SELinux.
Contoh
Misalkan kita ingin membagikan direktori home pengguna melalui FTP untuk membaca dan menulis, dan kita telah membagikannya, tetapi ketika kita mencoba mengakses, kita tidak melihat apa-apa. Ini karena kebijakan SELinux melarang server FTP membaca dan menulis ke direktori home pengguna. Kami perlu mengubah kebijakan sehingga server FTP dapat mengakses direktori home. Mari kita lihat apakah ada switch untuk melakukan ini
$ semanage boolean -l
Perintah ini akan menampilkan daftar sakelar yang tersedia dengan statusnya saat ini (on / on atau off / off) dan deskripsi. Anda dapat mempersempit pencarian Anda dengan menambahkan grep untuk menemukan hanya hasil yang terkait ftp:
$ semanage boolean -l | grep ftp
dan temukan yang berikut ini
ftp_home_dir -> off Allow ftp to read & write file in user home directory
Switch ini tidak aktif, jadi kami akan mengaktifkannya dengan setsebool $ setsebool ftp_home_dir on
Sekarang daemon ftp kami akan dapat mengakses direktori home pengguna.
Catatan: Anda juga bisa mendapatkan daftar sakelar yang tersedia tanpa deskripsi dengan melakukan getsebool -a
2. Label dan konteks
Ini adalah cara paling umum untuk menerapkan kebijakan SELinux. Setiap file, folder, proses dan port ditandai dengan konteks SELinux:
- Untuk file dan folder, tag disimpan sebagai atribut yang diperluas dalam sistem file dan dapat dilihat dengan perintah berikut:
$ ls -Z /etc/httpd
- Untuk proses dan port, inti mengontrol penandaan, dan Anda dapat melihat label ini sebagai berikut:
prosesnya
$ ps βauxZ | grep httpd
pelabuhan
$ netstat -anpZ | grep httpd
Contoh
Sekarang mari kita lihat contoh untuk lebih memahami label dan konteks. Misalkan kita memiliki server web yang /var/www/html/ /home/dan/html/
bukan direktori /var/www/html/ /home/dan/html/
. SELinux akan menganggap ini sebagai pelanggaran kebijakan dan Anda mungkin tidak dapat menjelajahi halaman web Anda. Ini karena kami belum mengatur konteks keamanan yang terkait dengan file HTML. Untuk melihat konteks keamanan default, gunakan perintah berikut:
$ ls βlz /var/www/html -rw-rβrβ. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/
Di sini kita mendapatkan httpd_sys_content_t
sebagai konteks untuk file html. Kita perlu mengatur konteks keamanan ini untuk direktori kita saat ini, yang sekarang memiliki konteks berikut:
-rw-rβrβ. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/
Perintah alternatif untuk memeriksa konteks keamanan file atau direktori:
$ semanage fcontext -l | grep '/var/www'
Kami juga akan menggunakan semanage untuk mengubah konteks setelah kami menemukan konteks keamanan yang tepat. Untuk mengubah konteks / home / dan / html, jalankan perintah berikut:
$ semanage fcontext -a -t httpd_sys_content_t '/home/dan/html(/.*)?' $ semanage fcontext -l | grep '/home/dan/html' /home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0 $ restorecon -Rv /home/dan/html
Setelah konteks diubah menggunakan semanage, perintah restorecon akan memuat konteks default untuk file dan direktori. Server web kami sekarang dapat membaca file dari folder /home/dan/html
, karena konteks keamanan untuk folder ini telah diubah menjadi httpd_sys_content_t
.
3. Membuat kebijakan lokal
Mungkin ada situasi di mana metode di atas tidak berguna untuk Anda, dan Anda mendapatkan kesalahan (penolakan / penolakan) di audit.log. Ketika ini terjadi, Anda perlu membuat kebijakan lokal. Anda dapat menemukan semua kesalahan dengan audit2why, seperti dijelaskan di atas.
Untuk mengatasi kesalahan, Anda dapat membuat kebijakan lokal. Misalnya, kami mendapatkan kesalahan yang terkait dengan httpd (apache) atau smbd (samba), kami menangkap kesalahan dan membuat kebijakan untuk mereka:
apache $ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy samba $ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy
Di sini http_policy
dan smb_policy
adalah nama-nama kebijakan lokal yang kami buat. Sekarang kita perlu memuat kebijakan lokal yang dibuat ini ke dalam kebijakan SELinux saat ini. Ini dapat dilakukan sebagai berikut:
$ semodule βI http_policy.pp $ semodule βI smb_policy.pp
Kebijakan lokal kami dimuat, dan kami seharusnya tidak lagi menerima AVC atau denail di audit.log.
Itu adalah upaya saya untuk membantu Anda memahami SELinux. Saya harap setelah membaca artikel ini Anda akan merasa lebih nyaman dengan SELinux.