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

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.

Sumber: