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

Well, ini adalah postingan pertama di 2021! Sebetulnya sudah ada di draft 2020, tetapi belum ada spirit untuk posting saat itu. Karena menulis dengan format blog bagi saya tidak mudah (dalam hal merangkai kata).

XAMPP

Kasus

Ketika teman-teman menginstal 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, dll. Sehingga sebuah text editor atau IDE menjadi tidak bisa melakukan edit lalu save di tempat tersebut.

Kalau saya lihat, banyak yang memberikan solusi agar mengubah perijinan ke 777. Tapi menurut saya itu bukan ide bagus. Akan lebih bagus kalau kita menggunakan 775 lalu menambahkan user kita ke grup yang sama dengan web server diatas, misal:

  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.

Done! 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, maksimalnya akan memiliki perijinan 755 atau 644 (dikarenakan menggunakan standar umask 022).

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 "foo" dengan grup "users", dan kita akan mounting direktori /home/foo/aplikasi ke /var/www/htdocs, contoh perintahnya adalah:

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

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

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

Sebagai user "foo", tidak perlu lagi menyentuh /var/www/htdocs. Cukup bekerja dengan apa yang ada didalam /home/foo/aplikasi saja.

Masuk akal bukan? :)

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

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

Silahkan sesuaikan sendiri. Semoga bermanfaat!

#Linux