DEV Community

Cover image for Controlling Access to Files with ACLs | RH134 (Indonesia ver.)
Handika Putra Prasetya
Handika Putra Prasetya

Posted on

Controlling Access to Files with ACLs | RH134 (Indonesia ver.)

Konsep Access Control Lists

Izin file Linux standar sudah cukup ketika file hanya digunakan oleh satu pemilik, dan satu kelompok orang yang ditunjuk. Namun, beberapa kasus penggunaan mengharuskan file diakses dengan set izin file yang berbeda oleh beberapa pengguna dan grup bernama. Access Control Lists (ACLs) menyediakan fungsi ini.

Dengan ACLs, Anda dapat memberikan izin kepada beberapa pengguna dan grup, yang diidentifikasi dengan nama pengguna, nama grup, UID, atau GID, menggunakan flag izin yang sama yang digunakan dengan izin file biasa: baca(read), tulis(write), jalankan(execute). Pengguna dan grup yang dimaksud ini, di luar Owner/pemilik file dan afiliasi grup file, masing-masing disebut pengguna bernama dan grup bernama, karena mereka tidak diberi nama dalam daftar panjang, melainkan dalam ACL.

Pengguna dapat mengatur ACL pada file dan direktori yang mereka miliki. Pengguna yang memiliki hak istimewa, seperti root dan sudoers, dapat mengatur ACL pada file atau direktori apa pun. File dan subdirektori baru secara otomatis mewarisi pengaturan ACL dari ACL bawaan direktori induknya, jika telah ditetapkan. Mirip dengan aturan akses file normal, hirarki direktori induk membutuhkan setidaknya izin pencarian (execute) yang lain untuk memungkinkan pengguna bernama dan grup bernama memiliki akses.

Melihat dan Menafsirkan Izin ACL

Perintah ls -l hanya mengeluarkan detail pengaturan ACL minimal:

[user@host content]$ ls -l reports.txt
-rwxrw----+ 1 user operators 130 Mar 19 23:56 reports.txt
Enter fullscreen mode Exit fullscreen mode

Tanda plus (+) di akhir string izin karakter ke-10 menunjukkan bahwa struktur ACL yang diperluas dengan entri ada pada file ini.

Melihat ACLs Pada File
Untuk menampilkan pengaturan ACL pada file, gunakan getfacl file :

[user@host content]$ getfacl reports.txt
# file: reports.txt
# owner: user
# group: operators
user::rwx
user:consultant3:---
user:1005:rwx       #effective:rw-
group::rwx          #effective:rw-
group:consultant1:r--
group:2210:rwx      #effective:rw-
mask::rw-
other::---
Enter fullscreen mode Exit fullscreen mode

Berikut adalah tinjauan setiap bagian dari contoh diatas:

Entri Komen:

# file: reports.txt
# owner: user
# group: operators
Enter fullscreen mode Exit fullscreen mode

Tiga baris pertama adalah komentar yang mengidentifikasi nama file, pemilik(user), dan pemilik grup(operator). Jika ada flag file tambahan, seperti setuid atau setgid, maka baris komentar keempat akan muncul yang menunjukkan flag mana yang ditetapkan.

Entri User:

user::rwx                              1.
user:consultant3:---                   2.
user:1005:rwx       #effective:rw-     3.
Enter fullscreen mode Exit fullscreen mode
  1. Izin pemilik file. user memiliki rwx.
  2. Izin pengguna bernama. Satu entri untuk setiap nama pengguna yang terkait dengan file ini. consultant3 tidak memiliki izin.
  3. Izin pengguna bernama. UID 1005 memiliki rwx, tetapi mask membatasi izin efektif hanya untuk rw.

Entri Grup:

group::rwx          #effective:rw-     1.
group:consultant1:r--                  2.
group:2210:rwx      #effective:rw-     3.
Enter fullscreen mode Exit fullscreen mode
  1. Izin pemilik grup. operators memiliki rwx, tetapi mask membatasi izin efektif hanya untuk rw.
  2. Izin grup bernama. Satu entri untuk setiap grup bernama yang terkait dengan file ini. consultant1 hanya memiliki izin r.
  3. Izin grup bernama. GID 2210 memiliki rwx, tetapi mask membatasi izin efektif hanya untuk rw.

Entri Mask:

mask::rw
Enter fullscreen mode Exit fullscreen mode

Pengaturan mask menunjukkan izin maksimum yang memungkinkan untuk semua pengguna bernama, pemilik grup, dan grup bernama. UID 1005, operator, dan GID 2210 tidak dapat menjalankan file ini, meskipun setiap entri memiliki izin execute yang telah ditetapkan.

Entri Other:

other::---
Enter fullscreen mode Exit fullscreen mode

Izin other atau "dunia". Semua UID dan GID lainnya yang tidak termasuk ke dalam daftar user dan grup TIDAK memiliki izin sama sekali.

Melihat ACLs Pada Direktori
Untuk menampilkan pengaturan ACL pada direktori, gunakan perintah getfacl directory:

[user@host content]$ getfacl .
# file: .
# owner: user
# group: operators
# flags: -s-
user::rwx
user:consultant3:---
user:1005:rwx
group::rwx
group:consultant1:r-x
group:2210:rwx
mask::rwx
other::---
default:user::rwx
default:user:consultant3:---
default:group::rwx
default:group:consultant1:r-x
default:mask::rwx
default:other::---
Enter fullscreen mode Exit fullscreen mode

Berikut adalah tinjauan setiap bagian dari contoh diatas:

Entri Komen:

# file: .
# owner: user
# group: operators
# flags: -s-
Enter fullscreen mode Exit fullscreen mode

Tiga baris pertama adalah komentar yang mengidentifikasi nama direktori, pemilik(user), dan pemilik grup(operators). Jika ada flag direktori tambahan(setuid, setgid, sticky), maka baris komentar keempat menunjukkan flag mana yang ditetapkan; dalam kasus ini, setgid.

Entri standar ACLs:

user::rwx
user:consultant3:---
user:1005:rwx
group::rwx
group:consultant1:r-x
group:2210:rwx
mask::rwx
other::---
Enter fullscreen mode Exit fullscreen mode

Izin ACL pada direktori ini sama dengan contoh file yang ditunjukkan sebelumnya, tetapi berlaku untuk direktori tersebut. Perbedaan utamanya adalah penyertaan izin execute pada entri ini (jika sesuai) untuk mengizinkan izin pencarian direktori.

Entri Default User:

default:user::rwx                   1.
default:user:consultant3:---        2.
Enter fullscreen mode Exit fullscreen mode
  1. Izin ACL pemilik file default. Pemilik file akan mendapatkan rwx, membaca/menulis pada file baru dan mengeksekusi pada subdirektori baru.
  2. Izin ACL pengguna bernama default. Satu entri untuk setiap pengguna bernama yang secara otomatis akan mendapatkan ACL default yang diterapkan pada file atau subdirektori baru. consultant3 selalu secara default tidak memiliki izin.

Entri Default Grup:

default:group::rwx                  1.
default:group:consultant1:r-x       2.
Enter fullscreen mode Exit fullscreen mode
  1. Izin ACL pemilik grup default. Pemilik grup file akan mendapatkan rwx, membaca/menulis pada file baru dan mengeksekusi pada subdirektori baru.
  2. Izin ACL grup bernama default. Satu entri untuk setiap grup bernama yang secara otomatis akan mendapatkan ACL default. consultant1 akan mendapatkan rx, hanya-baca pada file baru, dan mengeksekusi pada subdirektori baru.

Entri Default Mask:

default:mask::rwx
Enter fullscreen mode Exit fullscreen mode

Pengaturan mask default menunjukkan izin maksimum awal yang mungkin untuk semua file atau direktori baru yang dibuat yang memiliki ACL pengguna bernama, ACL pemilik grup, atau ACL grup bernama: baca dan tulis untuk file baru dan izin eksekusi pada subdirektori baru. File baru tidak pernah mendapatkan izin eksekusi.

Entri Default Other:

default:other::---
Enter fullscreen mode Exit fullscreen mode

Izin default other atau "dunia". Semua UID dan GID lain yang tidak termasuk ke dalam daftar user dan grup TIDAK memiliki izin ke file baru atau subdirektori baru.

Entri default pada contoh sebelumnya tidak menyertakan pengguna bernama (UID 1005) dan grup bernama (GID 2210); akibatnya, entri tersebut tidak akan secara otomatis ditambahkan entri ACL awal untuk mereka pada file atau subdirektori baru. Hal ini secara efektif membatasi mereka pada file dan subdirektori yang telah memiliki ACL, atau jika pemilik file yang bersangkutan menambahkan ACL kemudian menggunakan setfacl. Mereka masih dapat membuat file dan subdirektori mereka sendiri.

Mask ACL

Mask ACL mendefinisikan izin maksimum yang dapat Anda berikan kepada pengguna bernama, pemilik grup, dan grup bernama. Ini tidak membatasi izin pemilik file atau pengguna lain (other). Semua file dan direktori yang menerapkan ACL akan memiliki mask ACL.

Mask ini dapat dilihat dengan getfacl dan secara eksplisit diatur dengan setfacl. Mask ini akan dihitung dan ditambahkan secara otomatis jika tidak diatur secara eksplisit, tetapi juga dapat diwarisi dari pengaturan mask default direktori induk. Secara default, mask akan dihitung ulang setiap kali ada ACL yang terpengaruh ditambahkan, dimodifikasi, atau dihapus.

Mengamankan File dengan ACL

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 strip) 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.

Menambahkan atau Memodifikasi ACL
ACL dapat diatur melalui baris perintah dengan menggunakan opsi -m, atau dimasukkan melalui file dengan menggunakan opsi -M (gunakan "-" (tanda strip) sebagai pengganti nama file 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.

Untuk menambah atau memodifikasi pengguna atau ACL pengguna bernama:

[user@host ~]$ setfacl -m u:_name_:rX file
Enter fullscreen mode Exit fullscreen mode

Jika name 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 diatur, eksekusi (kecuali file adalah direktori, dalam hal ini direktori akan mendapatkan izin eksekusi yang diatur untuk mengizinkan pencarian direktori).

Izin pemilik berkas ACL dan izin pemilik berkas standar adalah setara; akibatnya, menggunakan chmod pada izin pemilik berkas setara dengan menggunakan setfacl pada izin pemilik berkas. chmod tidak berpengaruh pada pengguna bernama.

Untuk menambah atau memodifikasi grup atau ACL grup bernama:

[user@host ~]$ setfacl -m g:name:rw file
Enter fullscreen mode Exit fullscreen mode

Ini mengikuti pola yang sama untuk menambahkan atau memodifikasi entri ACL pengguna. Jika name dibiarkan kosong, maka nama tersebut berlaku untuk pemilik grup. Jika tidak, tentukan nama grup atau nilai GID untuk grup bernama. Pada contoh kali ini adalah izin baca(read) dan tulis(write).

chmod tidak berpengaruh pada perizinan grup apa pun untuk berkas dengan pengaturan ACL, tetapi akan memperbarui mask ACL.

Untuk menambah atau memodifikasi ACL other:

[user@host ~]$ setfacl -m o::- file
Enter fullscreen mode Exit fullscreen mode

other hanya menerima pengaturan izin. Pengaturan izin yang umum untuk other adalah: tidak ada izin sama sekali, diatur dengan tanda strip(-); 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 other setara dengan menggunakan setfacl pada izin other.

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
Enter fullscreen mode Exit fullscreen mode

Ini mengatur pemilik file untuk membaca(read), menulis(write), dan mengeksekusi(execute), mengatur grup consultants menjadi hanya-baca dan megeksekusi, dan membatasi semua pengguna lain(other)untuk tidak memiliki izin. Pemilik grup mempertahankan izin file atau ACL yang ada dan entri other "bernama" tetap tidak berubah.

Menggunakan getfacl sebagai Input
Anda dapat menggunakan output dari getfacl sebagai input ke setfacl:

[user@host ~]$ getfacl file-A | setfacl --set-file=- file-B
Enter fullscreen mode Exit fullscreen mode

Opsi --set-file menerima input dari sebuah file atau dari stdin. Karakter tanda strip (-) menentukan penggunaan stdin. Dalam kasus ini, file-B akan memiliki pengaturan ACL yang sama dengan file-A.

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
Enter fullscreen mode Exit fullscreen mode

Ini menambahkan pengguna name ke direktori directory dan semua file dan subdirektori yang ada, mengatur izin hanya-baca dan eksekusi bersyarat.

Menghapus ACLs
Menghapus entri ACL tertentu mengikuti format dasar yang sama dengan operasi modifikasi, kecuali":izin" tidak ditentukan.

[user@host ~]$ setfacl -x u:name,g:name file
Enter fullscreen mode Exit fullscreen mode

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.

Mask 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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Ini menambahkan pengguna bernama default(d:u:name) dengan izin hanya-baca dan izin eksekusi pada subdirektori.

Menghapus Entri ACL Default
Hapus ACL default dengan cara yang sama seperti Anda menghapus ACL standar, diawali dengan d:, atau gunakan opsi -d.

[user@host ~]$ setfacl -x d:u:name directory
Enter fullscreen mode Exit fullscreen mode

Ini akan menghapus entri ACL default yang telah ditambahkan pada contoh sebelumnya.

Untuk menghapus semua entri ACL default pada direktori, gunakan setfacl -k directory.

Top comments (0)