Cara Mudah Mengatur Access Control List (ACL) di Linux
Tags: linux, acl
Published: 2021-01-23 03:17:57

Ada banyak tantangan dalam mengelola Linux di lingkungan bisnis modern, diantaranya bahwa kita harus bisa mengelola siapa yang memiliki akses ke suatu informasi atau biasa yang disebut Access Control List. Untuk melakukan hal itu, dapat menggunakan *basic linux filesystem permissions*.

# Review Basic Linux Permissions
Ada 3 jenis permissions di Linux filesystem, berikut penjelasan sederhananya:

* **U**ser atau user owner
* **G**roup atau owner group
* **O**ther atau orang lain selain diatas

Dari ketiga jenis permissions diatas, masing-masing dapat diberikan 3 jenis akses yaitu:

* **R**ead
* **W**rite
* e **X** ecute

Sebagai contoh terdapat direktori berisi file dari departemen development dengan permissions sebagai berikut:

```
drwxrwxr-x  2 development development 6 Jan  8 15:13
```

Dari contoh diatas, user development (user pemilik) dapat membaca dan menulis ke direktori. Anggota dari group development (atau owner group) juga dapat membaca dan menulis direktori, sedangkan orang lain atau other tidak bisa menulis. Sebagai catatan, contoh diatas mengizinkan other dapat membaca atau melihat isi direktori.

# Linux Access Control List (ACL)

Pada situasi tertentu, basic permissions dapat menjadi rumit karena tiap file dan direktori hanya dapat memiliki satu user dan satu group owner pada satu waktu. Jenis situasi ini dapat diatasi oleh Linux Access Control List (ACLs).

ACL memungkinkan untuk menerapkan sekumpulan izin yang lebih spesifik ke file atau direktori tanpa mengubah ownership dan permissions.

# Mengatur ACL

Bagian ini membahas penggunaan Access Control List atau ACL di Linux. Hal ini memungkinkan waktu yang lebih mudah untuk menyiapkan izin untuk tugas-tugas otomatis seperti menerapkan aplikasi web.

Pastikan ACL telah terinstal, jika belum jalankan perintah `sudo apt install acl`.

Dalam kasus ini akan menunjukkan pengaturan ACL pada direktori. permissions ACL ini dapat diwarisi oleh direktori induk (parent directories). Mengatur ACL default untuk suatu lokasi sangat efektif, karena mengabaikan kebutuhan untuk selalu mengatur ulang permissions user/group setelah operasi file apa pun (misalnya membuat file baru).

## Melihat ACL

Untuk dapat melihat ACL saat ini di direktori tertentu dapat menggunakan perintah `getfacl`:

```
# getfacl /var/www
```

## Memasang ACL

Syntax untuk menyetel ACL terlihat seperti ini:

```
setfacl [option] [action/specification] file
```

Mengatur ACL untuk user dan direktori tertentu:

```
# setfacl -R -m u:johndoe:rwx /var/www
```

Keterangan syntax diatas:

* `setfacl` : Set ACL
* `-R` : Rekursif ke dalam file dan direktori
* `-m` : Modifying ACL’s (-x untuk removing)
* `u:johndoe:rwx` : User johndoe akan mendapatkan permissions `rwx`
* `/var/www` : Memberikan permissions ke direktori `/var/www`

Mengatur ACL untuk group pada direktori tertentu:

```
# setfacl -R -m g:www-data:rwx /var/www
```

Keterangan syntax diatas:

* `g:www-data:rwx` : Anggota group `www-data` mendapatkan permissions `rwx`

## Mengahapus ACL

```
# setfacl -x g:www-data /var/www
```

Keterangan syntax diatas:

* `-x` : Hapus ACL’s untuk `g:www-data` di `/var/www`

# Contoh Kasus

Untuk lebih memahami, dibawah ini merupakan contoh kasus dalam menerapkan aplikasi web. Terdapat 2 user dengan beda permissions. Baca juga bagaimana konfigurasi awal server untuk deploy aplikasi web [disini](https://dev.to/adityacprtm/konfigurasi-awal-untuk-mengamankan-server-baru-24mk).

## Buat User

Buat user pertama dengan nama jane dan tambahkan ke group sudo agar dapat melakukan perintah `sudo`.

```
# adduser jane
# usermod -a -G sudo jane
```

User kedua beri nama `bob`, `bob` merupakan user yang dapat melakukan deploy website dan merupakan anggota dari group `www-data`.

```
# adduser bob
# usermod -a -G www-data bob
```

Untuk memastikan file di root web merupakan grup dari `www-data`, jalankan perintah dibawah. Ini tidak diperlukan untuk ACL permissions, namun tetap dilakukan untuk menjaga konsistensi.

```
# chown -R www-data:www-data /var/www
```

## Penggunaan ACL

User akan diberikan permission untuk `read/write/execute` file dan direktori menggunakan ACL sebagai pengganti dari basic Linux permissions.

Lihat set ACL secara default, ini terpisah dari basic permission user/group.

```
# getfacl /var/www
```

Selanjutnya berikan permission user jane untuk mengubah file web di direktori `/var/www`. Secara teknis jane tidak membutuhkan ini, karena dia bisa menggunakan perintah `sudo`.

```
# setfacl -R -m u:jane:rwx /var/www
```

Di atas menetapkan ACL untuk file atau direktori yang ada, di sini akan secara rekursif (-R) menetapkan default (-d flag) untuk file atau direktori mendatang.

```
# setfacl -Rd -m u:jane:rwx /var/www
```

Cek perintah diatas telah berhasil ditambahkan

```
# getfacl /var/www
```

> Dua perintah sebelumnya dapat digabungkan untuk mengatur default dan izin: `setfacl -R -m u:jane:rwx,d:u:jane:rwx /var/www`

Selanjutnya memberikan permission berbasis grup melalui ACL ke file web. Cara ini lebih efisien untuk user memungkinkan mengedit file web, terlepas dari siapa pemilik file tersebut selama menjadi anggota group.

```
# setfacl -R -m g:www-data:rwx /var/www
```

Atau menggunakan default (-d) untuk kedepannya

```
# setfacl -Rd -m g:www-data:rwx /var/www
```

Jika sudah, sekarang TIAP USER yang menjadi anggota dari grup `www-data` dapat mengedit file di direktori `/var/www`. Untuk memastikan cek ACL dengan menjalankan perintah berikut:

```
# getfacl /var/www
```

That’s it! Kita bisa juga membaca artikel dari website Redhat mengenai ACL [disini](https://www.redhat.com/sysadmin/linux-access-control-lists).

---

Credits:

* icon: designed by [Smashicons](https://smashicons.com/) from Flaticon