Terjemahan artikel disiapkan untuk mahasiswa kursus
SELinux atau Security Enhanced Linux adalah mekanisme kontrol akses yang ditingkatkan yang dikembangkan oleh Badan Keamanan Nasional AS (NSA) untuk mencegah intrusi berbahaya. Ini menerapkan model kontrol akses yang dipaksakan (atau wajib) (Kontrol Akses Wajib Bahasa Inggris, MAC) di atas model kebijaksanaan (atau selektif) yang ada (Kontrol Akses Diskresioner Bahasa Inggris, DAC), yaitu izin untuk membaca, menulis, mengeksekusi.
SELinux memiliki tiga mode:
- Penegakan — penolakan akses berdasarkan aturan kebijakan.
- Permisif — menyimpan catatan tindakan yang melanggar kebijakan, yang akan dilarang dalam mode penegakan.
- Disabled — penonaktifan total SELinux.
Secara default pengaturannya sudah masuk /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 pada Menegakkan, jalankan
$ setenforce 1
Jika Anda perlu menonaktifkan SELinux sepenuhnya, ini hanya dapat dilakukan melalui file konfigurasi
$ vi /etc/selinux/config
Untuk menonaktifkan, ubah parameter SELINUX sebagai berikut:
SELINUX=disabled
Menyiapkan SELinux
Setiap file dan proses ditandai dengan konteks SELinux, yang berisi informasi tambahan seperti pengguna, peran, jenis, dll. Jika ini pertama kalinya Anda mengaktifkan SELinux, Anda harus mengonfigurasi konteks dan labelnya terlebih dahulu. Proses pemberian label dan konteks dikenal sebagai penandaan. Untuk mulai menandai, di file konfigurasi kita ubah modenya menjadi permisif.
$ vi /etc/selinux/config
SELINUX=permissive
Setelah mengatur mode permisif, buat file tersembunyi kosong di root dengan nama autorelabel
$ touch /.autorelabel
dan restart komputer
$ init 6
Catatan: Kami menggunakan mode permisif untuk menandai, sejak penggunaan mode Menegakkan dapat menyebabkan sistem crash saat reboot.
Jangan khawatir jika unduhan terhenti pada beberapa file, penandaannya memerlukan waktu cukup lama. Setelah penandaan selesai dan sistem Anda di-boot, Anda dapat membuka file konfigurasi dan mengatur modenya Menegakkandan juga menjalankan:
$ setenforce 1
Anda sekarang telah berhasil mengaktifkan SELinux di komputer Anda.
Memantau log
Anda mungkin mengalami beberapa kesalahan saat menandai atau saat sistem sedang berjalan. Untuk memeriksa apakah SELinux Anda berfungsi dengan benar dan apakah tidak memblokir akses ke port, aplikasi, dll., Anda perlu melihat lognya. Log SELinux terletak di /var/log/audit/audit.log
, tetapi Anda tidak perlu membaca keseluruhannya untuk menemukan kesalahan. Anda dapat menggunakan utilitas audit2why untuk menemukan kesalahan. Jalankan perintah berikut:
$ audit2why < /var/log/audit/audit.log
Akibatnya, Anda akan menerima daftar kesalahan. Jika tidak ada kesalahan dalam log, maka tidak ada pesan yang akan ditampilkan.
Mengonfigurasi Kebijakan SELinux
Kebijakan SELinux adalah seperangkat aturan yang mengatur mekanisme keamanan SELinux. Kebijakan mendefinisikan serangkaian aturan untuk lingkungan tertentu. Sekarang kita akan mempelajari cara mengonfigurasi kebijakan untuk mengizinkan akses ke layanan terlarang.
1. Nilai logika (saklar)
Sakelar (boolean) memungkinkan Anda mengubah bagian kebijakan saat runtime, tanpa harus membuat kebijakan baru. Mereka memungkinkan Anda membuat perubahan tanpa me-reboot atau mengkompilasi ulang kebijakan SELinux.
Contoh
Katakanlah kita ingin berbagi direktori home pengguna melalui baca/tulis FTP, dan kita telah membagikannya, namun ketika kita mencoba mengaksesnya, kita tidak melihat apa pun. Hal ini karena kebijakan SELinux mencegah server FTP membaca dan menulis ke direktori home pengguna. Kita perlu mengubah kebijakan agar server FTP dapat mengakses direktori home. Mari kita lihat apakah ada saklar untuk ini dengan melakukan
$ semanage boolean -l
Perintah ini akan mencantumkan sakelar yang tersedia dengan statusnya saat ini (hidup atau mati) dan deskripsinya. Anda dapat menyaring pencarian Anda dengan menambahkan grep untuk menemukan hasil hanya ftp:
$ semanage boolean -l | grep ftp
dan Anda akan menemukan yang berikut ini
ftp_home_dir -> off Allow ftp to read & write file in user home directory
Sakelar ini dinonaktifkan, jadi kami akan mengaktifkannya setsebool $ setsebool ftp_home_dir on
Sekarang daemon ftp kita 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, label disimpan sebagai atribut yang diperluas pada sistem file dan dapat dilihat dengan perintah berikut:
$ ls -Z /etc/httpd
- Untuk proses dan port, pelabelan dikelola oleh kernel, dan Anda dapat melihat label ini sebagai berikut:
proses
$ ps –auxZ | grep httpd
Pelabuhan
$ netstat -anpZ | grep httpd
Contoh
Sekarang mari kita lihat contoh untuk lebih memahami label dan konteks. Katakanlah kita memiliki server web yang bukan direktori /var/www/html/ использует /home/dan/html/
. SELinux akan menganggap ini sebagai pelanggaran kebijakan dan Anda tidak akan dapat melihat halaman web Anda. Ini karena kami belum menyetel 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/
Ini dia httpd_sys_content_t
sebagai konteks untuk file html. Kita perlu mengatur konteks keamanan ini untuk direktori kita saat ini, yang saat ini 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 benar. 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 restorasicon akan memuat konteks default untuk file dan direktori. Server web kami sekarang dapat membaca file dari folder tersebut /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 bagi Anda dan Anda mendapatkan kesalahan (avc/denial) di audit.log. Jika ini terjadi, Anda perlu membuat kebijakan lokal. Anda dapat menemukan semua kesalahan menggunakan audit2why, seperti dijelaskan di atas.
Anda dapat membuat kebijakan lokal untuk mengatasi kesalahan. Misalnya, kami mendapatkan kesalahan terkait dengan httpd (Apache) atau smbd (samba), kami menerima kesalahan tersebut dan membuat kebijakan untuk kesalahan tersebut:
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
и smb_policy
adalah nama kebijakan lokal yang kami buat. Sekarang kita perlu memuat kebijakan lokal yang dibuat ini ke dalam kebijakan SELinux saat ini. Hal ini dapat dilakukan sebagai berikut:
$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp
Kebijakan lokal kami telah diunduh dan kami tidak lagi menerima avc atau denail apa pun di audit.log.
Ini adalah upaya saya untuk membantu Anda memahami SELinux. Saya harap setelah membaca artikel ini Anda akan merasa lebih nyaman dengan SELinux.
Sumber: www.habr.com