Ini cuman buat catetan gue aja.. Awalnya gue dapet error 500 Internal Server Error di browser gue dengan script PHP yang gue upload pake user root (harusnya gue login terus upload file pake user yang ada di cPanel) karena WHM yang gue konfigurasi pake suPHP sebagai PHP 5 Handler nya, dimana file/folder yang diupload harus dimiliki atas nama owner masing2 user cPanel, selain itu PHP handler gak akan menganggap file/folder tersebut alias menyatakan sebagai error.
# Pemahaman Masalah
Karena gue sering login pake user root buat ngedit file/folder di beberapa klien, dimana gak mungkin gue harus benerin file/folder satu per satu pake chmod atau chown di server. Nah.. Buat nyikapin masalah ini, gue bikin script shell yang dijalanin di server buat bikin semua user di /home/USER/public_html dapet chmod 755 buat semua folder, dan 644 buat file, berikut chown masing2 user tersebut.
Sebagai contoh, cPanel memiliki user dengan nama fauzi (/home/fauzi/public_html), maka suPHP hanya akan mengeksekusi file PHP yang memiliki owner & group fauzi, selainnya tidak akan dieksekusi atau mengirimkan error code 500.
# Solusi Masalah
Berikut adalah scriptnya:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
#! /bin/bash # # Generated: Fri, Apr 12th 2013 2:25:05 AM # Author: Ahmad Fauzi ([email protected]) # Location: /etc/fixperms.sh verbose="" helptext () { tput bold tput setaf 2 echo "Bantuan skrip fix perms:" echo "Mengeset file/folder permission untuk menyamakan dengan skema suPHP dan FastCGI" echo "PENGGUNAAN: /etc/fixperms.sh [opsi] -a nama_akun" echo "------------------------------------------------" echo "Opsi:" echo "-h atau --help: print bantuan dan keluar" echo "-v: mode verbose" echo "-all: menjalankan semua akun cPanel" echo "--account atau -a: pilih salah satu akun cPanel" tput sgr0 exit 0 } fixperms () { account=$1 if ! grep $account /var/cpanel/users/* then tput bold tput setaf 1 echo "cPanel akun salah" tput sgr0 exit 0 fi if [ -z $account ] then tput bold tput setaf 1 echo "Ketikkan nama akun!" tput sgr0 helptext else tput bold tput setaf 4 echo "Mereparasi akun $account:" tput setaf 3 echo "-------------------------" tput setaf 4 echo "Mereparasi file website...." tput sgr0 find /home/$account/public_html -type d -exec chmod $verbose 755 {} \; find /home/$account/public_html -type f | xargs -d$'\n' -r chmod $verbose 644 find /home/$account/public_html -name '*.cgi' -o -name '*.pl' | xargs -r chmod $verbose 755 chown $verbose -R $account:$account /home/$account/public_html/* find /home/$account/* -name .htaccess -exec chown $verbose $account.$account {} \; tput bold tput setaf 4 echo "Mereparasi public_html...." tput sgr0 chown $verbose $account:nobody /home/$account/public_html chmod $verbose 750 /home/$account/public_html tput setaf 3 tput bold echo "-------------------------" tput setaf 4 echo "Mereparasi beberapa domain dengan root dokumen diluar public_html...." for SUBDOMAIN in $(grep -i document /var/cpanel/userdata/$account/* | awk '{print $2}' | grep home | grep -v public_html) do tput bold tput setaf 4 echo "Mereparasi sub/addon domain root dokumen $SUBDOMAIN...." tput sgr0 find $SUBDOMAIN -type d -exec chmod $verbose 755 {} \; find $SUBDOMAIN -type f | xargs -d$'\n' -r chmod $verbose 644 find $SUBDOMAIN -name '*.cgi' -o -name '*.pl' | xargs -r chmod $verbose 755 chown $verbose -R $account:$account $SUBDOMAIN find $SUBDOMAIN -name .htaccess -exec chown $verbose $account.$account {} \; done tput bold tput setaf 3 echo "SELESAI!" echo "-------------------------" printf "\n\n" tput sgr0 fi return 0 } all () { cd /var/cpanel/users for user in * do fixperms $user done } case "$1" in -h) helptext ;; --help) helptext ;; -v) verbose="-v" case "$2" in -all) all ;; --account) fixperms "$3" ;; -a) fixperms "$3" ;; *) tput bold tput setaf 1 echo "Opsi salah!" helptext ;; esac ;; -all) all ;; --account) fixperms "$2" ;; -a) fixperms "$2" ;; *) tput bold tput setaf 1 echo "Opsi salah!" helptext ;; esac |
# Konfigurasi
Buat script shell (fixperms.sh) di /etc, lalu berikan chmod +x [root@fauzimac ~]# chmod +x /etc/fixperms.sh setelah itu, salin-tempel script shell diatas ke file fixperms.sh yang sudah anda buat tadi.
# Penggunaan
Untuk single akun:
1 |
[root@fauzimac ~]# /etc/fixperms.sh -v -a nama_akun |
Untuk semua akun:
1 |
[root@fauzimac ~]# /etc/fixperms.sh -v -all |
-v dimaksudkan untuk menampilkan proses saat shell dijalankan (verbose mode).
Contoh hasil verbose mode dengan single akun fauzi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[root@fauzimac ~]# /etc/fixperms.sh -v -a fauzi /var/cpanel/users/fauzi:DBOWNER=fauzi /var/cpanel/users/fauzi:DNS=ahmadfauzi.id /var/cpanel/users/fauzi:USER=fauzi Mereparasi akun fauzi: ------------------------ Mereparasi file website.... mode of `/home/fauzi/public_html/index.php' retained as 0644 (rw-r--r--) mode of `/home/fauzi/public_html/sendmsg.php' retained as 0644 (rw-r--r--) mode of `/home/fauzi/public_html/contact.php' retained as 0644 (rw-r--r--) ownership of `/home/fauzi/public_html/index.php' retained as fauzi:fauzi ownership of `/home/fauzi/public_html/sendmsg.php' retained as fauzi:fauzi ownership of `/home/fauzi/public_html/contact.php' retained as fauzi:fauzi Mereparasi public_html.... ownership of `/home/fauzi/public_html' retained as fauzi:nobody mode of `/home/fauzi/public_html' changed to 0750 (rwxr-x---) ------------------------ Mereparasi beberapa domain dengan root dokumen diluar public_html.... SELESAI! ------------------------ |
# Kesimpulan
suPHP merupakan sebuah kiat PHP handler untuk memperketat kemanan PHP dalam menjalankan tugasnya, adapun letak kemanannya berada didalam penguncian ownership antara file PHP dengan pengguna yang ada didalam sistem linux tersebut.
Banyak para hacker yang mengunggah script kiddies dapat dengan leluasa membuat script lain dengan user www-data, namun dengan suPHP, pengguna yang sedang aktif di hack tidak dapat menerima akses dari www-data.
Selamat mencoba 🙂