Chapter 2 : SELinux Security
Published: 2024-04-02 02:32:39

**Pengertian**
**SELinux** adalah fitur keamanan penting di Linux. Akses ke file dan sumber daya lainnya dikontrol pada tingkat yang sangat terperinci. Proses hanya diizinkan 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 tersebut dengan cara apa pun yang dipilih pengguna, meskipun penggunaan tersebut bukanlah cara penggunaan file tersebut. 

**SELinux** terdiri dari serangkaian kebijakan, yang ditentukan oleh pengembang aplikasi, yang menyatakan dengan tepat tindakan dan akses apa yang tepat dan diperbolehkan untuk setiap biner yang dapat dieksekusi, file konfigurasi, dan file data yang digunakan oleh suatu aplikasi. Ini dikenal sebagai akebijakan yang ditargetkankarena satu kebijakan ditulis untuk mencakup aktivitas satu aplikasi. Kebijakan mendeklarasikan label yang telah ditentukan sebelumnya yang ditempatkan pada masing-masing program, file, dan port jaringan.

**Mengapa menggunakan Linux yang Ditingkatkan Keamanan?**
Tidak semua masalah keamanan dapat diprediksi sebelumnya. SELinux menerapkan seperangkat aturan akses yang mencegah kelemahan dalam satu aplikasi mempengaruhi aplikasi lain atau sistem yang mendasarinya. SELinux memberikan lapisan keamanan ekstra; hal ini juga menambah lapisan kompleksitas yang dapat membuat orang yang baru mengenal subsistem ini tidak nyaman. Belajar bekerja dengan SELinux mungkin memerlukan waktu tetapi kebijakan penegakan hukum berarti bahwa kelemahan di satu bagian sistem tidak menyebar ke bagian lain. Jika SELinux tidak berfungsi dengan baik pada subsistem tertentu, Anda dapat menonaktifkan penegakan untuk layanan khusus tersebut hingga Anda menemukan solusi untuk masalah mendasarnya.

<u>**SELinux memiliki tiga mode:**</u>
1. Penegakan: SELinux menerapkan aturan kontrol akses. Komputer umumnya berjalan dalam mode ini.
2. Permisif: SELinux aktif tetapi alih-alih menerapkan aturan kontrol akses, SELinux mencatat peringatan aturan yang telah dilanggar. Mode ini digunakan terutama untuk pengujian dan pemecahan masalah.
3. Dinonaktifkan: SELinux dimatikan seluruhnya: tidak ada pelanggaran SELinux yang ditolak, atau bahkan dicatat.

**Konsep dasar keamanan SELinux**
<u>**Security Enhanced Linux (SELinux)**</u> adalah lapisan keamanan sistem tambahan. Tujuan utama SELinux adalah untuk melindungi data pengguna dari layanan sistem yang telah disusupi. Sebagian besar administrator Linux akrab dengan model keamanan izin pengguna/grup/standar lainnya. Ini adalah model berbasis pengguna dan grup yang dikenal sebagai kontrol akses diskresioner. SELinux memberikan lapisan keamanan tambahan yang berbasis objek dan dikendalikan oleh aturan yang lebih canggih, yang dikenal sebagai kontrol akses wajib.

**<u>SELinux</u>** adalah seperangkat aturan keamanan yang menentukan proses mana yang dapat mengakses file, direktori, dan port mana. Setiap file, proses, direktori, dan port memiliki label keamanan khusus yang disebut SELinuxkonteks. Konteks adalah nama yang digunakan oleh kebijakan SELinux untuk menentukan apakah suatu proses dapat mengakses file, direktori, atau port. Secara default, kebijakan ini tidak mengizinkan interaksi apa pun kecuali aturan eksplisit memberikan akses. Jika tidak ada aturan izinkan, maka akses tidak diperbolehkan.

Label SELinux memiliki beberapa konteks: user, role, type, dan sensitivity. Kebijakan yang ditargetkan, yang merupakan kebijakan default yang diaktifkan di Red Hat Enterprise Linux, mendasarkan aturannya pada konteks ketiga: konteks tipe. Ketik nama konteks biasanya diakhiri dengan _t.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uasxbwunkx4qzv1ala0n.png)
Konteks tipe untuk server web adalah httpd_t. Konteks tipe untuk file dan direktori yang biasanya ditemukan /var/www/htmladalah httpd_sys_content_t. Konteks untuk file dan direktori yang biasanya ditemukan di /tmpdan /var/tmpadalah tmp_t. Konteks jenis untuk port server web adalah http_port_t.

Apache memiliki konteks tipe httpd_t. Ada aturan kebijakan yang mengizinkan akses Apache ke file dan direktori dengan httpd_sys_content_tkonteks tipe. Secara default, file yang ditemukan di /var/www/htmldan direktori server web lain memiliki httpd_sys_content_ttipe konteks. Tidak ada allowaturan dalam kebijakan untuk file yang biasanya ditemukan di /tmpdan /var/tmp, sehingga akses tidak diizinkan. Dengan mengaktifkan SELinux, pengguna jahat yang telah menyusupi proses server web tidak dapat mengakses /tmpdirektori.

Server MariaDBmemiliki konteks tipe mysqld_t. Secara default, file yang ditemukan /data/mysqlmemiliki mysqld_db_ttipe konteks. Konteks jenis ini mengizinkan MariaDBakses ke file tersebut tetapi menonaktifkan akses oleh layanan lain, seperti layanan web Apache.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s4a2z9uev3zy6p82w2pi.png)
Banyak perintah yang berhubungan dengan file menggunakan -Zopsi untuk menampilkan atau mengatur konteks SELinux. Misalnya, ps , ls , cp , dan mkdir semuanya menggunakan -Zopsi untuk menampilkan atau mengatur konteks SELinux.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p6wi53zu2xoeafjglpfp.png)
**Mengubah mode SELinux saat ini**
Subsistem SELinux menyediakan alat untuk menampilkan dan mengubah mode. Untuk menentukan mode SELinux saat ini, jalankan perintah getenforce . Untuk mengatur SELinux ke mode lain, gunakan perintah getenforce.

**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 dari direktori induk, sehingga memastikan bahwa file tersebut memiliki konteks yang tepat.

Namun prosedur pewarisan ini dapat dirusak dengan dua cara berbeda. Pertama, jika Anda membuat file di lokasi yang berbeda dari lokasi akhir yang dituju 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 pada perintah cp -a , konteks SELinux mencerminkan lokasi file asli.

Contoh berikut menunjukkan warisan dan kendalanya. Pertimbangkan dua file yang dibuat di /tmp, satu dipindahkan ke /var/www/htmldan yang kedua disalin ke direktori yang sama. Perhatikan konteks SELinux pada file. File yang dipindahkan ke /var/www/htmldirektori mempertahankan konteks file untuk /tmpdirektori tersebut. File yang disalin ke /var/www/htmldirektori mewarisi konteks SELinux dari /var/www/htmldirektori tersebut.

1. Perintah ls -Z menampilkan konteks SELinux dari sebuah file. Perhatikan label filenya.
2. Dan perintah ls -Zd menampilkan konteks SELinux dari sebuah direktori.
3. Perhatikan bahwa /var/www/html/index.htmlmemiliki label yang sama dengan direktori induk /var/www/html/. Sekarang, buat file di luar direktori /var/www/htmldan catat konteks filenya
4. Pindahkan salah satu file berikut ke /var/www/html direktori menggunakan perintah mv, salin file lainnya, dan catat label masing-masing.
5.File yang dipindahkan mempertahankan label aslinya sementara file yang disalin mewarisi label dari /var/www/htmldirektori. unconfined_u:adalah pengguna, object_r:menunjukkan peran, dan s0merupakan level. Tingkat sensitivitas 0 adalah tingkat sensitivitas serendah mungkin.

**Mengubah konteks SELinux suatu file**
Perintah untuk mengubah konteks SELinux pada file termasuk semanage fcontext , recoverycon , dan chcon .

Metode pilihan untuk mengatur konteks SELinux untuk sebuah file adalah dengan mendeklarasikan pelabelan default untuk sebuah file menggunakan perintah semanage fcontext dan kemudian menerapkan konteks tersebut ke file menggunakan perintah restorasicon . Hal ini memastikan bahwa pelabelan akan sesuai keinginan bahkan setelah sistem file diberi label ulang secara menyeluruh.

Perintah chcon mengubah konteks SELinux. chcon mengatur konteks keamanan pada file, yang disimpan dalam sistem file. Ini berguna untuk menguji dan bereksperimen. Namun, ini tidak menyimpan perubahan konteks dalam database konteks SELinux. Ketika perintah restorasicon dijalankan, perubahan yang dilakukan oleh perintah chcon juga tidak bertahan. Selain itu, jika seluruh sistem file diberi label ulang, konteks SELinux untuk file yang diubah menggunakan chcon akan dikembalikan.

Layar berikut menunjukkan direktori yang sedang dibuat. Direktori memiliki nilai tipe default_t.

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

**Mendefinisikan Aturan Konteks File Default SELinux**
Perintah semanage fcontext menampilkan dan mengubah aturan yang digunakan restorasicon untuk mengatur konteks file default. Ia menggunakan ekspresi reguler yang diperluas untuk menentukan jalur dan nama file. Ekspresi reguler diperluas yang paling umum digunakan dalam fcontextaturan adalah (/.*)?, yang berarti “ secara opsional, cocokkan a / diikuti dengan sejumlah karakter berapa pun ” . Ini cocok dengan direktori yang terdaftar sebelum ekspresi dan semua yang ada di direktori itu secara rekursif.

**<u>Operasi Konteks File Dasar</u>**
Tabel berikut adalah referensi opsi semanage fcontext untuk menambah, menghapus, atau membuat daftar konteks file SELinux.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iedwal0k8feaaaqym1qw.png)
Untuk memastikan bahwa Anda memiliki alat untuk mengelola konteks SELinux, instal paket policycoreutilsdan policycoreutils-pythonpaketnya jika diperlukan. Ini masing-masing berisi perintah pemulihan dan perintah gemanage .
Untuk memastikan bahwa semua file dalam direktori memiliki konteks file yang benar, jalankan semanage fcontext -l diikuti dengan perintah restorasicon . Pada contoh berikut, perhatikan konteks file setiap file sebelum dan sesudah perintah semanage dan recoverycon dijalankan.

**boolean SELinux**
Boolean SELinux adalah saklar yang mengubah perilaku kebijakan SELinux. Boolean SELinux adalah aturan yang dapat diaktifkan atau dinonaktifkan. Mereka dapat digunakan oleh administrator keamanan untuk menyesuaikan kebijakan guna membuat penyesuaian selektif.

Halaman manual SELinux, yang dilengkapi dengan paket selinux-policy-doc , menjelaskan tujuan dari boolean yang tersedia. Perintah man -k '_selinux' mencantumkan halaman manual ini.

Perintah yang berguna untuk mengelola boolean SELinux termasuk getsebool , yang mencantumkan boolean dan statusnya, dan getsebool yang mengubah boolean. getsebool -P memodifikasi kebijakan SELinux agar modifikasi tetap ada. Dan semanage boolean -l melaporkan apakah suatu boolean persisten atau tidak, bersama dengan deskripsi singkat tentang boolean tersebut.

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