Menjalankan VirtualHost di Apache dengan User/Group yang berbeda
Dikatakan bahwa GNU/Linux merupakan sistem operasi yang aman, salah satunya adalah adanya hak akses atau permission pada tiap-tiap berkasnya. Mungkin bagi para imigran Windows ke GNU/Linux metode permission ini merupakan hal yang menjengkelkan. Dari sebab itu, jalan pintas menjadi pantas, berkas yang dianggap menjengkelkan malah diubah permission-nya menjadi 0777
. Apalagi berkas tersebut ada pada web server yang notabennya dapat diakses oleh semua orang, menjadi akan sangat berbahaya.
Saya selalu melarang para pengguna baru GNU/Linux untuk jangan menggunakan permission 0777
kecuali memang berkas tersebut dibuka umum. Oleh karena itu, akhirnya saya menulis artikel mengenai “Jangan Pernah Menggunakan Permission 777 atau 765 Saat Mendevelop Web PHP di GNU/Linux”. Dalam artikel itu, sebetulnya saya telah menjelaskan bagaimana agar tetap menggunakan permission 0755
dan 0644
dengan cara chmod
. Akan tetapi akan menjadi kekurangan jika dalam tahap developing, untuk menyunting berkas harus selalu gunakan sudo
, cukup merepotkan.
Nah, artikel ini saya tulis adalah untuk mempermudah kita pada saat men-developing web berbasis PHP tanpa harus mengubah hak akses pada berkas tersebut. Yakni dengan memanfaatkan apache2-mpm-itk
atau singkatnya module mpm-itk
untuk apache
.
Apa itu mpm-itk
?
MPM singkatan dari Multi-Processing Module, sedangakn mpm-itk
itu adalah module yang dapat menjalankan virtualhost
pada apache
dengan perbedaan uid
dan gid
. Dengan kata lain, kita dapat menyesuaikan tiap-tiap berkas atau skrip sesuai dengan permission dari user
yang digunakan.
Persyaratan
- Pastikan Anda sudah memasang Apache dan PHP. Jika belum Anda bisa mencarinya di sini.
Pemasangan mpm-itk
mpm-itk
saat ini telah tersedia diberbagai distro mainstream, jadi kita bisa memasangnya melalui repositori resmi distro. Di sini, saya akan memaparkan beberapa cara pemasangan mpm-itk
pada distro mainstream. Namun, perlu diketahui bahwa dalam prakteknya, saya hanya mengimplementasi mpm-itk
pada Arch Linux.
Pengguna Arch Linux beserta derivatifnya:
sudo pacman -S mod_itk
Pengguna Debian, Ubuntu beserta derivatifnya:
sudo apt apache2-mpm-itk libapache2-mpm-itk
Pengguna Fedora beserta derivatifnya:
sudo dnf install httpd-itk
Untuk memastikan apakah mpm-itk ini sudah terpasang atau belum, kita dapat mengeceknya dengan perintah berikut:
ls /etc/httpd/modules | grep "mpm"
Atau juga bisa dengan cara memanfaatkan find:
sudo find /usr -type f -name "*mpm*"
Lihat berkas mpm_itk.so
jika sudah ada tanda kita sudah berhasil memasangnya.
Konfigurasi Apache
Setelah melakukan pemasangan mpm-itk
, selenjutnya kita perlu mengkonfigurasi apache
agar mpm_itk
tersebut dapat berjalan dengan sebagaimana mestinya. Pengaturan apache
terletak pada berkas httpd.conf
, jika kita tidak tahu di mana letak berkas tersebut, dapat memanfaatkan cara berikut: Mengetahui Letak Berkas Konfigurasi Apache (httpd.conf).
Kemudian untuk menyunting berkas httpd.conf
, lakukan perintah berikut:
sudo vim /etc/httpd/conf/httpd.conf
Lalu tambahkan kode ini, di akhir loadmodule
.
loadmodule mpm_itk_module modules/mpm_itk.so
Keluar dan simpan. Khusus pengguna Debian, Ubuntu dan derivatifnya:
sudo a2dismod mpm_prefork sudo a2enmod mpm_itk
Setelah selesai, kita cek apakah konfigurasi sudah benar dengan perintah:
sudo apachectl configtest
Jika tertulis SYNTAX OK
berarti sudah aman, tinggal restart apache
-nya.
sudo systemctl restart httpd atau sudo service apache2 restart
Konfigurasi Virtualhost
Tahap selanjutnya yakni kita konfigurasi virtualhost
. Dalam tahapan ini saya menggunakan metode yang pakai pada oleh komunitas Debian yakni memisahkan konfigurasi tiap-tiap virtualhost
. Oh iya, khusus bagi Anda pengguna Debian, Ubuntu dan derivarifnya, tahapan ini bisa Anda lewati.
Pertama-tama aktifkan module virtualhost
Anda di httpd.conf
:
sudo vim /etc/httpd/conf/httpd.conf
Lalu tambahkan:
Include conf/extra/httpd-vhosts.conf
Keluar lalu simpan, dan restart apache
-nya:
sudo systemctl restart httpd
Kemudian cari berkas httpd-vhosts.conf
umumnya terletak pada direktori /etc/httpd/conf/extra/
jika ragu bisa dicari dengan find.
sudo find /etc -type f -name "*vhost*conf"
Berkas sudah terlihat langsung saja sunting:
sudo vim /etc/httpd/conf/extra/httpd-vhosts.conf
Hapus semua isi dari berkas di atas, ganti dengan tulisan:
Include conf/vhosts/enable/*.conf
Karena berkas httpd.conf
terletak pada direktori /etc/httpd/conf/
maka kita buatkan direktori khusus berkas virtualhost
di /etc/httpd/conf/vhosts
:
sudo mkdir /etc/httpd/conf/vhosts/{available,enable}
Kemudian kita buat berkas default.conf
sebagai pengaturan default:
vim /etc/httpd/conf/vhosts/available/default.conf
Isi dengan skrip di bawah ini:
<VirtualHost *:80>
ServerAdmin admin@situsali.com
DocumentRoot "/home/ali/dev/php"
ServerName localhost
# ServerAlias www.localhost
ErrorLog "/home/ali/dev/php/log/error_log"
CustomLog "/home/ali/dev/php/log/access_log" common
<ifmodule mpm_itk_module>
AssignUserID ali users
</ifmodule>
<Directory /home/ali/dev/php/>
DirectoryIndex index.php
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
</VirtualHost>
Perhatian: Untuk DocumentRoot
dan AssignUserID
disesuaikan dengan alamat berserta user
yang Anda gunakan.
Keluar dari vim
lalu simpan skrip di atas, dan aktifkan dengan cara:
sudo ln -s /etc/httpd/conf/vhosts/available/default.conf /etc/httpd/conf/vhosts/enable/
Karena skrip di atas kita meletakan default root directory
-nya di /home/ali/dev/php
dan di dalamnya juga terdapat direktori log
untuk menyimpan aktifitas apache
, jadi kita perlu membuat direktori tersebut agar apache
tidak error caranya:
mkdir -p ~/dev/php/log
Langkah terakhir tes konfigurasi apache
dan restart:
sudo apachectl configtest
Jika tertulis SYNTAX OK
langsung saja restart apache
-nya.
sudo systemctl httpd restart atau sudo service restart apache2
Tahap Pengecekan
Untuk memastikan semua berjalan dengan sebagai mana mestinya, perlu kita cek, langsung liihat pada peramban:
Lihat tangkapan layar di atas, semua sudah sama dengan yang berada dalam direktori /home/ali/dev/php
. Dan dalam contoh tersebut saya membuat skrip sederhana pada berkas phpinfo.php
dengan isi: <?php phpinfo();
untuk memastikan PHP sudah berjalan atau tidak.
Oke cukup sampai di sini dulu, jika ada yang masih kurang dimengerti silahkan bertanya pada kotak komentar. Semoga tulisan ini bermanfaat.