Securing Files with ACLs Objectives
Tags: ramadhanbersamaredhat, rh134, cloudcomputing
Published: 2024-04-02 02:49:18

Setelah menyelesaikan bagian ini, kita seharusnya dapat:
- Mengubah izin file ACL biasa menggunakan **setfacl.**
- Mengontrol izin file ACL default untuk file dan direktori baru.

**Mengubah Izin File ACL**
Gunakan **setfacl** untuk menambah, memodifikasi, atau menghapus ACL standar pada file dan direktori.
ACL menggunakan representasi izin sistem file normal, **"r"** untuk izin baca, **"w"** untuk izin tulis, dan **"x"** untuk izin eksekusi. Tanda **"-"** (tanda pisah) menunjukkan bahwa izin yang bersangkutan tidak ada. Ketika (secara rekursif) mengatur ACL, huruf besar **"X"** dapat digunakan untuk mengindikasikan bahwa izin eksekusi hanya boleh diatur pada direktori dan bukan berkas biasa, kecuali berkas tersebut sudah memiliki izin eksekusi yang relevan. Ini adalah perilaku yang sama dengan **chmod.**

**Menambah atau Memodifikasi ACL**
ACL dapat diatur melalui baris perintah dengan menggunakan opsi **-m**, atau dimasukkan melalui berkas dengan menggunakan opsi -M (gunakan "-" (tanda pisah) sebagai pengganti nama berkas untuk `stdin`). Kedua opsi ini adalah opsi **"modify"**; opsi ini menambahkan entri ACL baru atau mengganti entri ACL tertentu yang sudah ada pada file atau direktori. Entri ACL lain yang sudah ada pada berkas atau direktori tetap tidak tersentuh.
**Catatan** 
Gunakan opsi `--set` atau `--set-file` untuk mengganti sepenuhnya pengaturan ACL pada file.

Saat pertama kali mendefinisikan ACL pada file, jika operasi tambah tidak menyertakan pengaturan untuk _pemilik file, pemilik grup, atau izin lainnya_, maka ini akan ditetapkan berdasarkan izin file standar saat ini (ini juga dikenal sebagai entri _ACL dasar_ dan tidak dapat dihapus), dan _nilai mask baru_ akan dihitung dan ditambahkan juga.
Untuk menambah atau memodifikasi pengguna atau ACL pengguna bernama:

```
[user@host ~]$ setfacl -m u:name:rX file
```
Jika _nama_ dibiarkan kosong, maka itu berlaku untuk _pemilik berkas_, jika tidak, nama dapat berupa _nama_ pengguna atau nilai UID. Pada contoh ini, izin yang diberikan adalah hanya-baca, dan jika sudah ditetapkan, eksekusi (kecuali _berkas_ adalah direktori, dalam hal ini direktori akan mendapatkan izin eksekusi yang ditetapkan untuk mengizinkan pencarian direktori).
Izin _pemilik berkas ACL_ dan izin _pemilik berkas_ standar adalah sama; oleh karena itu, menggunakan **chmod** pada izin pemilik berkas sama dengan menggunakan **setfacl** pada izin _pemilik berkas_. **chmod** tidak berpengaruh pada pengguna bernama.
Untuk menambahkan atau memodifikasi grup atau nama grub ACL: 

```
[user@host ~]$ setfacl -m g:name:rw file
```
Ini mengikuti pola yang sama untuk menambahkan atau memodifikasi entri ACL pengguna. Jika nama dibiarkan kosong, maka nama tersebut berlaku untuk pemilik grup. Jika tidak, tentukan nama grup atau nilai GID untuk grup bernama. Perizinan akan dibaca dan ditulis dalam contoh ini.
**chmod** tidak berpengaruh pada perizinan grup untuk berkas dengan pengaturan ACL, namun akan memperbarui mask ACL.
Untuk menambah atau memodifikasi ACL lainnya:

```
[user@host ~]$ setfacl -m o::- file
```
_lainnya_ hanya menerima pengaturan izin. Pengaturan izin yang umum untuk other adalah: tidak ada izin sama sekali, diatur dengan tanda pisah(-); dan izin hanya-baca yang diatur seperti biasa dengan r. Tentu saja, Anda dapat mengatur salah satu izin standar.
ACL other dan izin standar lainnya adalah setara, sehingga menggunakan chmod pada izin lainnya setara dengan menggunakan **setfacl** pada izin _lainnya_.
Anda dapat menambahkan beberapa entri dengan perintah yang sama; gunakan daftar entri yang dipisahkan dengan koma:

```
[user@host ~]$ setfacl -m u::rwx,g:consultants:rX,o::- file
```
Ini mengatur _pemilik file_ untuk membaca, menulis, dan menjalankan, mengatur `konsultan` grup bernama menjadi hanya-baca dan menjalankan bersyarat, dan membatasi semua `pengguna lain` untuk tidak memiliki izin. Pemilik grup mempertahankan izin file atau ACL yang ada dan entri "bernama" lainnya tetap tidak berubah.

**Menggunakan getfacl sebagai Input**
Anda dapat menggunakan keluaran dari **getfacl** sebagai masukan ke **setfacl**:

```
[user@host ~]$ getfacl file-A | setfacl --set-file=- file-B
```
Opsi `--set-file` menerima input dari sebuah file atau dari _stdin_. Karakter tanda pisah (-) menentukan penggunaan stdin. Dalam kasus ini, `_file-B_` akan memiliki pengaturan ACL yang sama dengan `_file-A_`.

**Setting an Explicit ACL Mask**
Anda dapat mengatur ACL mask secara eksplisit pada file atau direktori untuk membatasi izin efektif maksimum untuk pengguna bernama, pemilik grup, dan grup bernama. Ini akan membatasi semua izin yang ada yang melebihi topeng, tetapi tidak memengaruhi izin yang kurang permisif dari mask.

```
[user@host ~]$ setfacl -m m::r file
```
Ini menambahkan nilai mask yang membatasi setiap _pengguna bernama_, _pemilik grup_, dan _grup bernama_ ke izin hanya-baca, terlepas dari pengaturan yang ada. Pemilik file dan pengguna lain tidak terpengaruh oleh pengaturan mask.

**getfacl** menampilkan komentar `efektif` di samping entri yang dibatasi oleh pengaturan mask.

**Penting**
Secara default, setiap kali salah satu pengaturan ACL yang terpengaruh (pengguna bernama, pemilik grup, atau grup bernama) dimodifikasi atau dihapus, mask ACL dihitung ulang, sehingga berpotensi mengatur ulang pengaturan mask eksplisit sebelumnya.
Untuk menghindari penghitungan ulang topeng, gunakan opsi -n atau sertakan pengaturan mask `(-m m::perms)` dengan operasi **setfacl** apa pun yang memodifikasi mask akan berpengaruh pada pengaturan ACL.

**Modifikasi ACL Rekursif**
Saat menetapkan ACL pada direktori, gunakan opsi -R untuk menerapkan ACL secara rekursif. Ingatlah bahwa Anda mungkin ingin menggunakan izin "X" (huruf besar X) dengan rekursi sehingga file dengan set izin eksekusi mempertahankan pengaturan dan direktori mendapatkan set izin eksekusi untuk mengizinkan pencarian direktori. Praktik yang baik adalah menggunakan huruf besar "X" saat menetapkan ACL secara non-rekursif karena hal ini mencegah administrator secara tidak sengaja menambahkan izin eksekusi ke file biasa.

```
[user@host ~]$ setfacl -R -m u:name:rX directory
```
Ini menambahkan `nama` pengguna ke `direktori` direktori dan semua file dan subdirektori yang ada, mengatur izin hanya-baca dan eksekusi bersyarat.
**Menghapus ACL**
Menghapus entri ACL tertentu mengikuti format dasar yang sama dengan operasi memodifikasi, kecuali_":perms"_ tidak ditentukan.

```
[user@host ~]$ setfacl -x u:name,g:name file
```
Ini hanya menghapus pengguna bernama dan grup bernama dari file atau direktori ACL. Entri ACL lain yang ada tetap aktif.
Anda dapat menyertakan operasi hapus`(-x)` dan modifikasi`(-m)` dalam operasi setfacl yang sama.
Topeng hanya dapat dihapus jika tidak ada ACL lain yang ditetapkan (tidak termasuk ACL dasar yang tidak dapat dihapus), sehingga harus dihapus terakhir. File tidak akan lagi memiliki ACL dan `ls -l` tidak akan menampilkan tanda plus `(+)` di samping string izin. Atau, untuk menghapus semua entri ACL pada berkas atau direktori (termasuk ACL default pada direktori), gunakan perintah berikut:

```
[user@host ~]$ setfacl -b file
```
**Mengontrol Izin File ACL Default**
Untuk memastikan bahwa file dan direktori yang dibuat di dalam direktori mewarisi ACL tertentu, gunakan ACL default pada direktori. Anda dapat mengatur ACL default dan pengaturan ACL standar mana pun, termasuk mask default.
Direktori itu sendiri masih memerlukan ACL standar untuk kontrol akses karena ACL default tidak mengimplementasikan kontrol akses untuk direktori tersebut; mereka hanya menyediakan dukungan pewarisan izin ACL. Sebagai contoh:

```
[user@host ~]$ setfacl -m d:u:name:rx directory
```
Perintah ini menambahkan pengguna bernama default`(d:u:name)` dengan izin hanya-baca dan izin eksekusi pada subdirektori.

Perintah **setfacl** untuk menambahkan ACL default untuk setiap jenis ACL sama persis dengan ACL standar, tetapi diawali dengan `d:`. Atau, gunakan opsi `-d` pada baris perintah.

**Penting**
Saat menetapkan ACL default pada direktori, pastikan bahwa pengguna dapat mengakses konten subdirektori baru yang dibuat di dalamnya dengan menyertakan izin execute pada ACL default.

Pengguna tidak akan secara otomatis mendapatkan izin eksekusi yang ditetapkan pada file biasa yang baru dibuat karena tidak seperti direktori baru, mask ACL dari file biasa yang baru adalah `rw-`.

**Catatan**
File baru dan subdirektori baru akan terus mendapatkan nilai UID pemiliknya dan nilai GID grup utama yang ditetapkan dari pengguna yang membuat, kecuali bila flag `setgid` direktori induk diaktifkan, dalam hal ini GID grup utama sama dengan GID direktori induk.

**Menghapus Entri ACL Default**
Hapus ACL _default_ dengan cara yang sama seperti Anda menghapus ACL standar, awali dengan `d:`, atau gunakan opsi `-d`.

```
[user@host ~]$ setfacl -x d:u:name directory
```
Ini akan menghapus entri ACL `default` yang telah ditambahkan pada contoh sebelumnya.
Untuk menghapus semua entri ACL default pada direktori, gunakan **setfacl-k** direktori.