Saya cukup dibuat kebingungan ketika setup Apache webserver di linux CentOS 6.3. Menemukan satu masalah yang sangat menarik sekali dan hampir membuatku putus asa. Masalahnya muncul ketika saya mencoba menghubungkan komunikasi antara aplikasi web berbasis PHP di Apache webserver dengan Memcached server.
Untuk script PHP itu sendiri sudah dipastikan benar tanpa masalah, karena sebelumnya sudah berhasil berkomunikasi dengan Memcached server saat menggunakan OS Windows. PHP Extension untuk Memcached (memcached.so) juga sudah ter-install dengan benar.
Anehnya koneksi antara PHP dan Memcached server selalu gagal jika script PHP tersebut dijalankan pada Apache HTTPD webserver kemudian diakses di browser. Jika script PHP tersebut dijalankan pada mode CLI lewat terminal (php -f script_filename.php
) selalu berhasil berkomunikasi dengan Memcached server.
Setelah mencari solusi di Google berjam-jam, akhirnya diberikan petunjuk yang luar biasa. Usut punya usut, ternyata fitur SELinux-lah yang menyebabkannya. Pada dasarnya, SELinux-lah yang memblok akses koneksinya. SELinux atau kependekan dari Security-Enhanced Linux merupakan tambahan keamanan yang mengatur berbagai kontrol akses di sistem linux.
Di CentOS 6.3, SELinux ini secara default aktif, untuk menonaktifkannya, cukup edit konfigurasi SELinux yang berada di /etc/selinux/config
.
Cari tulisan seperti di bawah ini (SELinux On):
SELINUX=enforcing
dan ubah menjadi (SELinux Off):
SELINUX=disabled
Tapi dengan solusi di atas, kita akan kehilangan fungsi keamanan yang benar-benar luar biasa. Ternyata masih ada jalan yang terbaik dan mudah untuk mengatasinya, yaitu dengan memberikan kontrol akses hanya kepada Memcached server.
Ketik perintah seperti di bawah ini untuk meng-enable-kan akses ke Memcached server di Apache HTTPD webserver:
$ setsebool -P httpd_can_network_memcache 1
$ setsebool -P httpd_can_network_connect 1
Perintah setsebool -P httpd_can_network_memcache 1
akan mengijinkan HTTPD untuk dapat membuat koneksi ke Memcached server. Sedangkan perintah setsebool -P httpd_can_network_connect 1
akan mengijinkan script dan modul di HTTPD untuk dapat membuat koneksi di protokol TCP.
Selesai! Sekarang script PHP (Apache HTTPD) dapat berkomunikasi dengan Memcached server.