Managing SELinux is easy v:(Indonesian Version)
Tags: redhat, ramadhanbersamaredhat, linux, webdev
Published: 2024-03-22 11:56:46

# **A. Controlling SELinux File Contexts**

Ketika suatu system menjalankan **SELinux**, semua proses dan file diberi label. Hal itu untuk mewakili keamanan yang relevan, biasanya dikenal dengan _konteks_ **SELinux**. File baru yang dibuat pada direktori biasanya labelnya akan mengikuti direktory induknya, untuk memastikan file itu memiliki konteks yang tepat. 

Pada umumnya konsep tersebut dapat dirusak. 
**Pertama**, ketika kita membuat suatu file dalm direktory kemudian labelnya akan mengikuti directory induknya, namun ketika kita _memindahkannya_ ke directory yang berbedadengan comand **_mov_** file yang dipindahkan tetap akan memiliki _label yang sama dengan directory dimana ia dibuat_ bukan directory di mana ia dipindahkan. 
**Dua**, dengan **menyalin** file dari directory asalnya kedirectory _tujuan dengan mempertahankan konteks SELinuxnya_, misalnya dengan comand **_cp -a_**, konteks **SELinuk** akan _mempertahankan file asli dari file yang di copy_. Namun jika kita hanya menggunakan perintah **_cp_** file yang kita copy labelnya akan _mengikuti di directory mana file tersebut ditujukan_. Gunakan comand **_ls -Z_** melihat konteks **SELinux** pada sebuah file dan ls -Zd  untuk melihat konteks **SELinux** sebuah directory. **Semoga mudah dipahami 😊.**

### **Changing the SELinux context of a file**
Beberapa cara untuk mengubah konteks  sebuah file pada Linux. **Gass kita oprek-oprek!**.

**1. semanage fcontext**. _Adalah suatu metode untuk mendeklarasikan label default untuk sebuah file yang kemudian menerapkan konteks tersebut ke file dengan command  restorasicon_. Hal ini dapat memastikan bahwa pelabelan akan sesuai dengan keinginan bahkan setelah system diberi **relabled**/pelabelan ulang secara menyeluruh.

```
[root@host ~]# ls -Z /var/www/html/file*
unconfined_u:object_r: user_tmp_t:s0 /var/www/html/file1  unconfined_u:object_r: httpd_sys_content_t:s0/var/www/html/file2
[root@host ~]# semanage fcontext -l
...keluaran dihilangkan...
/var/www(/.*)? semua file system_u:object_r:httpd_sys_content_t:s0
...keluaran dihilangkan... 
[root@host; ~]# restorecon -Rv /var/www/
Relabeled/var/www/html/ file1dari unconfined_u:object_r: user_tmp_t:s0 ke unconfined_u:object_r: : httpd_sys_content_ts0
 [root@host ~]# ls -Z /var/www/html/file*
unconfined_u:object_r: httpd_sys_content_t:s0 /var/www/html/ file1  unconfined_u:object_r: httpd_sys_content_t:s0 /var/www/html/file2

```
**2. _chorn_**. Adalah comand untuk _mengubah konteks Linux dan mengatur konteks keamanan pada sebuah file, yang disimpan pada system file_. Gunanya untuk menguji dan bereksperimen. Akan tetapi, hal ini tidak menyimpan perubahan konteks dalam database **SELinux**. Ketika perintah restorecron  dijalankan, perubahan yang dilakukan **_chron_**  akan dipulihkan seperti sebelumnya. Selain itu, jika seluruh file system di **relabled**/di pelabelan ulang maka, pengubahan konteks dengan **_chron_** **akan dikembalikan**.  

```
[root@host ~]# chcon -t httpd_sys_content_t /virtual
[root@host ~]# ls -Zd /virtual
drwxr-xr-x. root root unconfined_u:object_r: httpd_sys_content_t:s0 /virtual
[root@host ~]# restorecon -v /virtual
Relabeled/virtual dari unconfined_u:object_r: httpd_sys_content_t:s0 ke unconfined_u:object_r: default_t:s0
[root@host ~]# ls -Zd /virtual
drwxr-xr-x. root root unconfined_u:object_r: default_t:s0 /virtual

```
### **Defining SELinux Default File Context Rules**

**_semanage fcontext_** command untuk _melihat _dan **_restorecon_** untuk _mengatur konteks kedefaultnya_. Ia menggunakan ekspresi reguler yang diperluas untuk menentukan jalur dan nama file. Untuk expresi reguler yang diperluas umumnya menggunakan **_fcontext_** aturan yaitu (/.*)?, maksudnya “opsional, / untuk banyak angka atau karakter”.
Opsi **_semanage fcontext_** adalah **_-a, --add , -d, --delete , -l, --list._**
Untuk mengontrol **SELinux** konteks intall terlebih dahulu _policycoreutils_ package dan _policycoreutils-python_, yang akan berisi command **_restorecon_** dan **_semanage_**. Untuk melihat _konteks yang berjalan_ gunakan **_semanage fconteks -l_** di ikuti dengan  **_restorecon_**.  

# **B. Adjusting SELinux Policy with Booleans**
### **SELinux booleans**
**SELinux booleans** adalah saklar yang _mengubah perilaku kebijakan SELinux_ atau dengan kata lain _aturan yang dapat diaktifkan atau dinonaktifkan_. Biasanya digunakan oleh administrator keamanan untuk menyesuaikan kebijakan untuk membuat penyesuaian yang selektif.

**_Command getsebool_** digunakan untuk mencantumkan _boolean dan statusnya_. **_setsebool_** untuk mengubah _boolean_. **_setsebool -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 tanpa hak istimewa hanya bisa menggunakan command **_getsebool_**, selain command itu untuk menjalankanya harus _supper user_.

```
[user@host ~]$ getsebool -a
abrt_anon_write --> off
abrt_handle_event --> off
abrt_upload_watch_anon_write --> on
antivirus_can_scan_system --> off
antivirus_use_jit --> off
...output omitted...
[user@host ~]$ getsebool httpd_enable_homedirs
httpd_enable_homedirs --> off
[user@host ~]$ setsebool httpd_enable_homedirs on
Could not change active booleans. Please try as root: Permission denied
[user@host ~]$ sudo setsebool httpd_enable_homedirs on
[user@host ~]$ sudo semanage boolean -l | grep httpd_enable_homedirs
httpd_enable_homedirs          (on   ,  off)  Allow httpd to enable homedirs
[user@host ~]$ getsebool httpd_enable_homedirs
httpd_enable_homedirs --> on
```
Gunakan opsi **_-P_** untuk membuatnya menulis nilai yang tertunda ke kebijakan dan _tetap ada_ setelah di **reboot**.

```
[user@host ~]$ setsebool -P httpd_enable_homedirs on
[user@host ~]$ sudo semanage boolean -l | grep httpd_enable_homedirs
httpd_enable_homedirs          (on   ,   on)  Allow httpd to enable homedirs 
```

Untuk melihat list boolean yang dalam keaddan _default_ gunakan **_semanage boolean -l -C_** .

```
[user@host ~]$ sudo semanage boolean -l -C
SELinux boolean                State  Default Description

cron_can_relabel               (off   ,   on)  Allow cron to can relabel
```