Beberapa minggu lalu, setelah saya migrasi ArchLinux ke perangkat baru ternyata mengalami beberapa kendala seperti merasakan kerusakan yang hakiki. Dimulai dari semua paket nya terkendala sampai saya tidak bisa login menggunakan kredensial root ataupun user dan juga hal lain setelah melakukan rsync.
Setelah melalui waktu yang cukup lama untuk mencari tahu masalah yang terjadi, akhirnya saya bertemu dengan log journalctl yang mengatakan bahwa service-service tidak dapat berjalan dikarenakan permission yang dibutuhkan tidak sesuai.
What? kok bisa? Padahal pas rsync sudah melakukan penyalinan atribut seperti permission, group, dan ownership. Ini membuat saya kehilangan waktu senggang dan lebih memilih untuk memperbaiki masalah yang terjadi. Sepertinya proses mounting hdd external mengakibatkan atribut tersebut hilang dan diganti dengan atribut baru pada saat mounting perangkat. Doooh!
Loooh? kok marked as executable? terus aku mesti gimana? Masalahnya, saya yakin nggak cuman berkas-berkas itu saja yang terkena imbas dari kesalahan pada saat mounting. Setelah coba mencari referensi, saya menemukan pencerahan yang di mana menjelaskan bahwa ada utilitas bernama ACL(Access Control List)
Hm… ACL itu apa?
Secara sederhana, ACL atau yang merupakan singkatan dari Access Control List adalah sebuah utilitas yang memberikan fleksibilitas terhadap mekanisme perizininan untuk file system. Dirancang untuk membantu mengatur izin file di UNIX. ACL memungkinkan kita memberi izin untuk setiap pengguna atau grup ke sumber disk apa pun.
Terus, kenapa ACL?
Jadi gini, dengan bantuan ACL ini kita bisa melakukan backup terhadap file permission yang ada dalam sistem linux dengan menyimpan data seperti ownership dan juga struktur folder yang kita simpan. Yang di mana utilitas ini sangatlah cocok untuk kondisi yang saya alami, karena saya masih memiliki perangkat lama yang bisa disalin izin-izin setiap berkas dan juga kepemilikan penggunanya serta struktur folder.
ACL dibekali dengan dua utilitas, yaitu getfacl dan juga setfacl. Masing-masing utilitas tersebut sudah tersedia sebagai depedensi pada sistem operasi yang menggunakan systemd.
Untuk bisa menggunakan ACL, file system yang digunakan haruslah mendukung acl pada saat melakukan mounting. Bisa dilakukan cek terhadap mode dengan menggunakan:
# tune2fs -l /dev/sd<em>XY</em> | grep "Default mount options:"
Default mount options: user_xattr acl
Pada contoh di atas, file system sudah mendukung untuk acl, adapun kemungkinan bahwa acl sudah aktif sebagai default pada saat mounting file system.
Berikut tampilan help untuk getfacl dan juga setfacl
Jadi, getfacl digunakan untuk backup permission yang ada, sedangkan setfacl untuk melakukan restore permission dari hasil getfacl. Dipastikan bahwa struktur folder yang dibackup dan restore haruslah sama. Berikut contoh sederhana dalam penggunaan utilitas tersebut:
[root@segfault-box ~]# touch test.txt && getfacl test.txt
# file: test.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
Dari output tersebut, bisa kita lihat bahwa getfacl menghasilkan informasi seputar hak akses dan juga struktur dari masing-masing akses seperti owner, group dan juga tipe akses yang dimiliki.
Jadi, bagaimana kita bisa melakukan backup linux permission dengan ACL?
Sangat mudah, kita hanya cukup melakukan getfacl pada dasar direktori yang ingin kita lakukan backup. Contoh saya mempunyai struktur direktori seperti ini:
# tree .
.
├── f1
│ └── f1_test.txt
├── list.txt
└── test.txt
1 directory, 3 files
Untuk backup permission, bisa menggunakan rekursif seperti berikut:
[root@localhost]# getfacl -R . > list2.txt
[root@localhost]# cat list2.txt
# file: .
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
# file: f1
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
# file: f1/f1_test.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
# file: test.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
# file: list.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
# file: list2.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
Kita sudah menyalin permission yang ada beserta struktur folder kedalam berkas list2.txt pada direktori tempat di mana kita eksekusi perintah tersebut.
Untuk restore permission yang sudah kita salin, bisa dengan menggunakan
[root@localhost]# setfacl --restore=<nama_file>
# Bila kita ragu, gunakan --test untuk melihat file mana saja yang berimbas.
# Setelah yakin, barulah hilangkan parameter --test.
[root@localhost]# setfacl --restore=<nama_file_backup> --test
[root@localhost]# setfacl --restore=/path/to/list2.txt --test
Seketika utilitas tersebut akan menjalankan tugasnya untuk mengganti hak akses yang bermasalah sesuai dengan hak akses yang ada pada berkas berisi daftar backup permission.
Lesson Learned:
Selalu backup sistem, terutama backup file permission system. Hal tersebut memungkinkan bila nantinya terjadi masalah serupa dengan yang saya alami.
Akhir kata, semoga tulisan kali ini bermanfaat.
Referensi: