Web Development dengan bindfs, Tanpa Ribet Ubah Permission /var/www

XAMPP

Kasus

Ketika teman-teman meng-install web server, baik LAMP Stack, atau XAMPP, pastinya direktori yang dibuat oleh aplikasi tersebut tidaklah writable (bisa ditulis). Karena owner (pemilik) direktori seperti /var/www/htdocs atau /opt/lampp/htdocs normalnya adalah web server, dengan user / grup seperti apache:apache, nginx:nginx, www:www, atau bahkan root:root. Sehingga sebuah text editor atau IDE menjadi tidak bisa melakukan edit lalu save di tempat tersebut.

Saya lihat di beberapa forum seperti Ask Ubuntu, banyak yang memberikan solusi agar mengubah perijinan ke 777. Tapi menurut saya itu bukan ide bagus.

Solusi chmod 775

Akan lebih bagus kalau kita menggunakan 775 lalu menambahkan user kita ke grup yang sama dengan web server diatas, misal diketahui nama grup adalah www, maka perintahnya adalah:

  1. # chmod 775 /var/www/htdocs 
  2. # usermod -aG www user 

chmod 775 dengan angka 7 ditengah menandakan dalam satu grup bisa baca tulis, dan usermod akan menambahkan user "user" ke grup "www" yang dalam hal ini grup "www" memiliki ijin baca tulis.

Dengan 775 akan sedikit lebih secure ketimbang 777. Tapi mungkin ini tidak berakhir disini. Ketika sebuah direktori atau file di-generate oleh aplikasi, katakanlah PHP (melalui fungsi fopen atau file_put_contents), maksimalnya akan memiliki perijinan 755 (angka 5 ditengah, bukan 7) atau 644 (dikarenakan PHP menggunakan standar umask 022). Dengan kata lain, file yang dibuat oleh PHP tidak bisa di-edit oleh user.

Agar bisa writable oleh user, tentu harus ubah kembali perijinan ke 775 (direktori) dan 664 (file). Ribet dong?

Solusi dengan bindfs

bindfs adalah alat untuk mirroring direktori seperti mount --bind, tetapi memiliki opsi seperti file creation policy, dll.

Instalasi (Asumsi Debian-based)

  1. # apt install bindfs 

Penggunaan

Katakanlah user / nama login kita adalah "bejo" dengan grup "users", dan kita akan mounting direktori /home/bejo/aplikasi ke /var/www/htdocs, contoh perintahnya adalah:

  1. # bindfs --force-user=www --force-group=www --create-for-user=bejo --create-for-group=users /home/bejo/aplikasi /var/www/htdocs 

Dengan opsi --create-for-*, baik file yang dibuat di dalam /home/bejo/aplikasi, atau /var/www/htdocs akan menjadi milik bejo:users.

Opsi --force-* akan menyebabkan file di dalam mount point (/var/www/htdocs) seolah-olah dimiliki oleh www:www. File sebenarnya ada di dalam /home/bejo/aplikasi dan dimiliki oleh bejo:users.

Kini sebagai user "bejo", tidak perlu lagi menyentuh /var/www/htdocs. Cukup edit-edit / bekerja dengan apa yang ada di dalam /home/bejo/aplikasi saja.

Agar permanen, kita bisa menggunakan bindfs di /etc/fstab:

  1. /home/bejo/aplikasi /var/www/htdocs fuse.bindfs force-user=www,force-group=www,create-for-user=bejo,create-for-group=users 0 0 

Silahkan sesuaikan sendiri. Semoga bermanfaat!

Catatan

* Direktori target / mountpoint, dalam hal ini /var/www/htdocs mula-mula harus kosong agar bindfs bisa berfungsi.

#Linux