Managing SELinux Security (Mengelola Keamanan SELinux)
Published: 2022-10-26 05:26:28

  SELinux adalah fitur keamanan penting dari Linux. SELinux memberikan akses kepada administrator sistem untuk mengontrol "kebijakan keamanan" sehingga administrator sistem akan lebih efisien dalam mengatur dan memonitor sistem keamanan pada OS. Proses hanya diizinkan untuk mengakses sumber daya yang ditentukan oleh kebijakannya, atau pengaturan boolean SELinux.
  Izin file mengontrol pengguna atau grup pengguna mana yang dapat mengakses file tertentu. Namun, pengguna yang diberi akses baca atau tulis ke file tertentu dapat menggunakan file itu dengan cara apa pun yang dipilih pengguna, meskipun penggunaan itu bukan cara file tersebut seharusnya digunakan.
Izin file tidak dapat menghentikan akses yang tidak diinginkan. Mereka tidak pernah dirancang untuk mengontrol bagaimana file digunakan, tetapi hanya siapa yang diizinkan untuk membaca, menulis, atau menjalankan file.
  SELinux terdiri dari kumpulan kebijakan, yang ditentukan oleh pengembang aplikasi, yang menyatakan dengan tepat tindakan dan akses apa yang tepat dan diizinkan untuk setiap biner yang dapat dieksekusi, file konfigurasi, dan file data yang digunakan oleh aplikasi. Kebijakan mendeklarasikan label yang telah ditentukan sebelumnya yang ditempatkan pada masing-masing program, file, dan port jaringan.

  SELinux memberlakukan seperangkat aturan akses yang mencegah kelemahan dalam satu aplikasi mempengaruhi aplikasi lain atau sistem yang mendasarinya. SELinux menyediakan lapisan keamanan ekstra. Itu juga menambahkan lapisan kompleksitas yang dapat membuat orang baru mengenal subsistem ini. Jika SELinux tidak berfungsi dengan baik dengan subsistem tertentu, Anda dapat menonaktifkan penegakan untuk layanan khusus tersebut hingga Anda menemukan solusi untuk masalah yang mendasarinya.SELinux memiliki tiga mode yaitu:

- Enforcing: SELinux menerapkan aturan kontrol akses. Komputer umumnya berjalan dalam mode ini.

- Permissive: SELinux aktif tetapi alih-alih menegakkan aturan kontrol akses, ia mencatat peringatan aturan yang telah dilanggar. Mode ini digunakan terutama untuk pengujian dan _pemecahan masalah(troubleshooting)._

- Disabled: SELinux dimatikan seluruhnya.

  SELinux menyediakan lapisan keamanan tambahan yang berbasis objek dan dikendalikan oleh aturan yang lebih canggih, yang dikenal sebagai kontrol akses wajib.Untuk mengizinkan akses anonim jarak jauh ke server web, port firewall harus dibuka. Namun, ini memberi orang jahat kesempatan untuk berkompromi dengan sistem melalui kerentanan. Jika mereka berhasil mengkompromikan proses server web, mereka mendapatkan izinnya. Secara khusus, izin pengguna apache dan grup apache. Pengguna dan grup tersebut memiliki akses baca ke root dokumen, /var/www/html. Ia juga memiliki akses ke /tmp, dan /var/tmp, dan file dan direktori lain yang dapat ditulis world. Label SELinux memiliki beberapa konteks yaitu: pengguna, peran, jenis, dan sensitivitas.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/slfkuiptn3ljedfbjdb7.png)

nama konteks biasanya diakhiri dengan _t. seperti jenis konteks dibawah ini:
1. Konteks jenis untuk server web adalah_ _httpd_t._
2. Jenis konteks untuk file dan direktori yang biasa ditemukan di /var/www/html adalah _httpd_sys_content_t.
3. Konteks untuk file dan direktori yang biasanya ditemukan di /tmp dan /var/tmp adalah _tmp_t_. 
4. Konteks jenis untuk port server web adalah _http_port_t
_
Apache memiliki konteks tipe httpd_t. Secara default, file yang ditemukan di /var/www/html dan direktori server web lainnya memiliki konteks tipe httpd_sys_content_t.

**Konteks SELinux awal**
  Pada sistem yang menjalankan SELinux, semua proses dan file diberi label. Label mewakili informasi keamanan yang relevan, yang dikenal sebagai konteks SELinux.
  File baru biasanya mewarisi konteks SELinux mereka dari direktori induk, sehingga memastikan bahwa mereka memiliki konteks yang tepat.
  
beberapa perintah(command):

- Perintah _ls -Z_ menampilkan konteks SELinux dari sebuah file.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hmlq9v51ixwcosx0zzyr.png)

- dan perintah ls -Zd menampilkan konteks SELinux dari sebuah direktori.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z6hg5gmnkvvkm41e44bh.png)

prosedur pewarisan file baru dapat dirusak dengan dua cara yang berbeda. Pertama, jika Anda membuat file di lokasi yang berbeda dari lokasi tujuan utama dan kemudian memindahkan file tersebut, file tersebut masih memiliki konteks SELinux dari direktori tempat file tersebut dibuat, bukan direktori tujuan. Kedua, jika Anda menyalin file yang mempertahankan konteks SELinux, seperti dengan perintah cp -a, konteks SELinux mencerminkan lokasi file asli. contohnya :

1. buat file di luar direktori /var/www/html dan perhatikan konteks filenya:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4a4i251e7qr3jvd282ye.png)

2. Pindahkan salah satu file ini ke direktori /var/www/html, dan salin yang lainnya, setelah itu lihat label masing-masing:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e57080tqgquieo6y6p2i.png)

File yang dipindahkan mempertahankan label aslinya sementara file yang disalin mewarisi label dari direktori /var/www/html. unconfined_u: adalah user, object_r:  adalah role, dan s0 adalah level. 

**Mengubah konteks SELinux dari sebuah file**
  Perintah untuk mengubah konteks SELinux pada file antara lain **semanage fcontext, restorecon, dan chcon.** 
  Metode yang lebih disukai untuk mengatur konteks SELinux untuk file adalah dengan mendeklarasikan pelabelan default untuk file menggunakan perintah **semanage fcontext** dan kemudian menerapkan konteks itu ke file menggunakan perintah restorecon. Ini memastikan bahwa pelabelan akan seperti yang diinginkan bahkan setelah pelabelan ulang lengkap dari sistem file.
  Perintah **chcon** mengubah konteks SELinux. chcon mengatur konteks keamanan pada file, disimpan dalam sistem file. Ini berguna untuk menguji dan bereksperimen. Namun, itu tidak menyimpan perubahan konteks dalam database konteks SELinux. Saat perintah restorecon dijalankan, perubahan yang dilakukan oleh perintah chcon juga tidak bertahan. Juga, jika seluruh sistem file diberi label ulang, konteks SELinux untuk file yang diubah menggunakan chcon akan dikembalikan.

- berikut menunjukkan direktori yang sedang dibuat. Direktori  yang telah dibuat memiliki nilai tipe_ default_t_.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4vdjsspthm0mub43b36d.png)

- Perintah chcon mengubah konteks file direktori /virtual.Nilai tipe berubah menjadi _httpd_sys_content_t.
_
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dx301cykbxp0tcnvv1j9.png)

- Ketika perintah restorecon berjalan, nilai tipe kembali ke nilai_ default_t._
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n4lwnvbowikee63bfvyd.png)

**Mendefinisikan Aturan Konteks File Default SELinux**

  Perintah semanage fcontext menampilkan dan memodifikasi aturan yang digunakan restorecon untuk mengatur konteks file default. Ini menggunakan ekspresi reguler yang diperluas untuk menentukan jalur dan nama file. Ekspresi reguler diperpanjang yang paling umum digunakan dalam aturan fcontext adalah **(/.*)?**, yang berarti **"secara opsional, cocokkan dengan / diikuti oleh sejumlah karakter"**. Itu cocok dengan direktori yang terdaftar sebelum ekspresi dan semua yang ada di direktori itu secara rekursif.
Berikut adalah tabel referensi untuk opsi semanage fcontext untuk menambah, menghapus, atau membuat daftar konteks file SELinux:

1. -a, --add    :Tambahkan catatan dari jenis objek yang ditentukan.
2. -d, --delete :Menghapus catatan dari tipe objek yang ditentukan.
3. -l, --list   : Daftar record dari tipe objek yang ditentukan.
  untuk memastikan bahwa Anda memiliki alat untuk mengelola konteks SELinux, instal paket policycoreutils dan paket policycoreutils-python jika diperlukan. Ini berisi perintah restorecon dan perintah semanage, masing-masing.

**SELinux boolean**

  Boolean SELinux adalah sakelar yang mengubah perilaku kebijakan SELinux. Boolean SELinux adalah aturan yang dapat diaktifkan atau dinonaktifkan. Mereka dapat digunakan oleh administrator keamanan untuk menyesuaikan kebijakan untuk membuat penyesuaian selektif.
Perintah yang berguna untuk mengelola boolean SELinux diantaranya adalah :

- getsebool           : untuk mencantumkan boolean dan statusnya.
- setsebool           : untuk memodifikasi boolean. 
- setsebool -P        : untuk memodifikasi kebijakan SELinux untuk
  membuat modifikasi tetap ada.
- semanage boolean -l : untuk melaporkan apakah boolean persisten 
  atau tidak, bersama dengan deskripsi singkat tentang boolean.

  Pengguna yang tidak memiliki hak istimewa dapat menjalankan perintah getsebool , tetapi Anda harus menjadi pengguna super untuk menjalankan semanage boolean -l dan setsebool -P .

**Memantau Pelanggaran SELinux**

  Instal paket **setroubleshoot-server** untuk mengirim pesan SELinux ke /var/log/messages. **setroubleshoot-server** mendengarkan pesan audit /var/log/audit/audit.log dan mengirimkan ringkasan singkat ke /var/log/messages. Ringkasan ini mencakup pengenal unik (UUID)untuk pelanggaran SELinux yang dapat digunakan untuk mengumpulkan informasi lebih lanjut. **Sealert -lUUID** perintah digunakan untuk menghasilkan laporan untuk insiden tertentu. Gunakan **sealert -a /var/log/audit/audit.log** untuk menghasilkan laporan untuk semua insiden dalam file itu.

 Jika **Web Console** diinstal, itu juga dapat digunakan untuk memecahkan masalah SELinux. Masuk ke Konsol Web dan pilih SELinux dari menu di sebelah kiri. Jendela Kebijakan SELinux memberi tahu Anda tentang status penegakan saat ini. Setiap masalah dirinci di bagian Kesalahan Kontrol Akses SELinux.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0duogic5hclq69luka30.jpeg)

Klik pada karakter > untuk menampilkan detail kesalahan. Klik pada detail solusi untuk menampilkan semua detail dan solusi yang mungkin.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0mjwa8u2mhmppd5jg4lb.jpeg)

Setelah masalah terpecahkan, bagian SELinux Access Control Errors seharusnya tidak lagi menampilkan kesalahan. Jika pesan No SELinux alertsmuncul, maka semua masalah telah diperbaiki.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vg0nu3goy96lcqeknw8e.jpeg)

cara lain untuk mengecek apakah SELinux memiliki masalah adalah dengan perintah **curl**  contonya : curl http://servera/index.html