DirectAdminde SSH ile php.ini disable_function Ayarlama
Siz de el ile tek tek disable_function ayarlamaktan bıktıysanız SSH üzerinden bu ayarları aşağıdaki şekilde kolayca yapabilirsiniz: Web sunucularında güvenliği artırmak için çeşitli önlemler alınır. PHP’nin sağladığı bazı fonksiyonlar, kötü amaçlı kullanıcılar tarafından istismar edilebilir. Bu nedenle, DirectAdmin kullanan sunucularda, belirli PHP fonksiyonlarının disable_functions ile devre dışı bırakılması önerilir. Bu makalede, SSH kullanarak farklı PHP sürümlerine ait php.ini dosyalarındaki disable_functions ayarlarının nasıl düzenleneceğini adım adım öğreneceksiniz.
İçindekiler
disable_functions Nedir?
PHP’nin disable_functions direktifi, belirli PHP fonksiyonlarının sunucuda çalıştırılmasını engeller. Bu fonksiyonlar arasında exec, system, shell_exec gibi işletim sistemi seviyesinde komut çalıştıran fonksiyonlar bulunur. Bu tür fonksiyonların devre dışı bırakılması, özellikle kötü amaçlı kodların sunucuyu istismar etmesini önler.
Hedefimiz
Bu çalışmada, aşağıdaki fonksiyonları tüm PHP sürümleri için devre dışı bırakacağız:
exec, system, passthru, shell_exec, proc_close, proc_open, dl, popen, show_source,
posix_kill, posix_mkfifo, posix_getpwuid, posix_setpgid, posix_setsid,
posix_setuid, posix_setgid, posix_seteuid, posix_setegid, posix_uname, mail
Gerekli Adımlar
1. SSH ile Sunucuya Bağlanma
SSH istemcisi kullanarak sunucunuza bağlanın. Örneğin:
ssh root@sunucu_ip_adresi
root şifrenizi girdikten sonra sunucunuza giriş yapmış olacaksınız.
2. PHP.ini Dosyalarının Konumlarını Bulma
DirectAdmin’de, her PHP sürümü için ayrı bir php.ini dosyası bulunur. Bu dosyalar genellikle şu dizinlerde yer alır:
/usr/local/php72/lib/php.ini
/usr/local/php73/lib/php.ini
/usr/local/php74/lib/php.ini
/usr/local/php81/lib/php.ini
/usr/local/php82/lib/php.ini
/usr/local/php83/lib/php.ini
Her dosya, ilgili PHP sürümünün yapılandırma ayarlarını içerir.
3. disable_functions Ayarını Güncelleyen Script
Manuel olarak her dosyayı düzenlemek zaman alabilir ve hataya açık bir süreçtir. Bunun yerine, aşağıdaki Bash scriptini kullanarak tüm dosyaları otomatik olarak düzenleyebilirsiniz.
Script:
#!/bin/bash
# PHP ini dosyalarının listesi
PHP_INI_FILES=(
"/usr/local/php72/lib/php.ini"
"/usr/local/php73/lib/php.ini"
"/usr/local/php74/lib/php.ini"
"/usr/local/php81/lib/php.ini"
"/usr/local/php82/lib/php.ini"
"/usr/local/php83/lib/php.ini"
)
# Yeni disable_functions değeri
DISABLE_FUNCTIONS="disable_functions = exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname,mail"
# Her ini dosyasını düzenle
for INI_FILE in "${PHP_INI_FILES[@]}"; do
if [ -f "$INI_FILE" ]; then
# disable_functions satırını düzenle veya ekle
sed -i "/^disable_functions\s*=/c\\$DISABLE_FUNCTIONS" "$INI_FILE"
echo "Updated: $INI_FILE"
else
echo "File not found: $INI_FILE"
fi
done
# PHP hizmetlerini yeniden başlat
echo "Restarting PHP services..."
for VERSION in 72 73 74 81 82 83; do
service php-fpm$VERSION restart
echo "Restarted PHP-FPM $VERSION"
done
echo "All operations completed."
4. Scripti Kaydetme ve Çalıştırma
1. Scripti bir dosyaya kaydedin. Örneğin:
nano update_php_ini.sh
2. Yukarıdaki kodu yapıştırın ve kaydedin (CTRL + O ve ardından CTRL + X ile).
3. Scripti çalıştırılabilir hale getirin:
chmod +x update_php_ini.sh
4. Scripti çalıştırın:
./update_php_ini.sh
Script çalıştırıldığında:
• php.ini dosyalarındaki disable_functions direktifi güncellenecek.
• İlgili PHP-FPM hizmetleri yeniden başlatılacak.
5. Değişiklikleri Doğrulama
Değişikliklerin başarılı bir şekilde uygulandığını doğrulamak için herhangi bir php.ini dosyasını kontrol edebilirsiniz:
cat /usr/local/php72/lib/php.ini | grep disable_functions
Bu komut, disable_functions satırını gösterecektir.
6. PHP-FPM Yeniden Başlatma
Scriptin başarısız olması durumunda PHP-FPM hizmetlerini manuel olarak yeniden başlatabilirsiniz:
service php-fpm72 restart
service php-fpm73 restart
service php-fpm74 restart
service php-fpm81 restart
service php-fpm82 restart
service php-fpm83 restart
7. Olmuş mu kontrol edelim
grep "disable_functions" /usr/local/php72/lib/php.ini
Olası Hatalar ve Çözümleri
1. Dosya Bulunamıyor Hatası:
Eğer bir php.ini dosyası bulunamazsa, belirtilen PHP sürümü sunucuda yüklü olmayabilir. Yüklemek için DirectAdmin panelinizden ilgili PHP sürümünü ekleyin.
2. Hizmet Başlatılamıyor:
• Yeniden başlatma sırasında hata alıyorsanız, aşağıdaki komutla hata günlüklerini kontrol edin:
journalctl -xe
3. Değişikliklerin Uygulanmaması:
• disable_functions ayarının çalışmadığını düşünüyorsanız, PHP’nin çalıştırdığı konfigürasyon dosyasını kontrol edin:
php -i | grep "Loaded Configuration File"
Özet
DirectAdmin kullanan sunucularınızda güvenliği artırmak için disable_functions direktifini ayarlamak oldukça önemlidir. Yukarıdaki adımları takip ederek, PHP’nin kritik fonksiyonlarını kolayca devre dışı bırakabilirsiniz. Bu süreç, manuel işlemleri minimize eder ve sunucunuzu olası güvenlik tehditlerine karşı daha dayanıklı hale getirir.
Tüm soru, öneri ve görüşleriniz için İletişim linkini kullanabilirsiniz.