PHP yama yayınladı
Ubuntuda da yama geldi
Ubuntu otomatik yama scripti:
cat > /root/php2shell-guncelle.sh <<'EOF'
#!/usr/bin/env bash
# php2shell-guncelle.sh
# Ubuntu VDS'lerde: Ubuntu kontrolü, PHP tespiti, güvenlik deposu ekleme,
# PHP güncelleme, servis yeniden başlatma ve PHP2Shell yaması doğrulaması.
# Kullanım:
# bash php2shell-guncelle.sh -> sadece PHP paketlerini günceller
# bash php2shell-guncelle.sh --tam -> tüm sistemi günceller (apt upgrade)
set -uo pipefail
TAM=0
[[ "${1:-}" == "--tam" ]] && TAM=1
kirmizi() { printf '\033[31m%s\033[0m\n' "$*"; }
yesil() { printf '\033[32m%s\033[0m\n' "$*"; }
sari() { printf '\033[33m%s\033[0m\n' "$*"; }
baslik() { printf '\n\033[1m== %s ==\033[0m\n' "$*"; }
if [[ $EUID -ne 0 ]]; then
kirmizi "Bu betik root kullanıcısıyla çalıştırılmalı."
exit 1
fi
LOG="/root/php2shell-$(date +%Y%m%d-%H%M%S).log"
exec > >(tee -a "$LOG") 2>&1
SORUN=0
baslik "1/6 İşletim sistemi"
if [[ ! -r /etc/os-release ]]; then
kirmizi "/etc/os-release bulunamadı, sistem tanınamadı."
exit 1
fi
. /etc/os-release
if [[ "${ID:-}" != "ubuntu" ]]; then
kirmizi "Bu sunucu Ubuntu değil: ${PRETTY_NAME:-bilinmiyor}. Betik sadece Ubuntu içindir."
exit 1
fi
KOD="${VERSION_CODENAME:-${UBUNTU_CODENAME:-}}"
echo "Sistem: ${PRETTY_NAME} (${KOD})"
ESKI_SURUM=0
case "$KOD" in
jammy|noble|resolute|stonking)
yesil "Bu Ubuntu sürümü için Ubuntu güvenlik yaması yayınlandı (USN-8948-1)." ;;
focal|bionic|xenial|trusty)
ESKI_SURUM=1
sari "UYARI: ${KOD} standart destek dışında; ücretsiz Ubuntu deposunda bu açık için yama yok."
sari "Ubuntu Pro (ESM) açıksa 'pro fix CVE-2026-109618' ile kontrol et; yoksa yeni bir Ubuntu sürümüne geçmek gerekir." ;;
*)
sari "UYARI: ${KOD} için yama durumu bilinmiyor; yine de devam ediliyor." ;;
esac
baslik "2/6 PHP tespiti"
mapfile -t PAKETLER < <(dpkg-query -W -f='${db:Status-Abbrev} ${Package}\n' 'php*' 'libapache2-mod-php*' 2>/dev/null \
| awk '$1=="ii"{print $2}')
mapfile -t SURUMLER < <(printf '%s\n' "${PAKETLER[@]}" \
| grep -oE '^(php|libapache2-mod-php)[0-9]+\.[0-9]+' \
| grep -oE '[0-9]+\.[0-9]+$' | sort -uV)
PAKET_DISI=()
for yol in /opt/cpanel/ea-php* /opt/alt/php* /opt/plesk/php/* /opt/remi/php* /usr/local/bin/php /usr/local/sbin/php-fpm; do
[[ -e "$yol" ]] && PAKET_DISI+=("$yol")
done
if [[ ${#SURUMLER[@]} -eq 0 && ${#PAKET_DISI[@]} -eq 0 ]] && ! command -v php >/dev/null 2>&1; then
yesil "Bu sunucuda PHP kurulu değil. PHP2Shell bu sunucuyu etkilemiyor."
echo "Log: $LOG"
exit 0
fi
ONDREJ=0
if grep -rqsE 'ondrej/php|packages\.sury\.org' /etc/apt/sources.list /etc/apt/sources.list.d/; then
ONDREJ=1
fi
if [[ ${#SURUMLER[@]} -gt 0 ]]; then
echo "Kurulu PHP sürümleri (paket):"
for s in "${SURUMLER[@]}"; do
ver=$(dpkg-query -W -f='${Version}' "php${s}-common" 2>/dev/null || true)
echo " - PHP ${s} (${ver:-?})"
done
if [[ $ONDREJ -eq 1 ]]; then
echo "Kaynak: Ondřej Surý PPA / packages.sury.org"
else
echo "Kaynak: Ubuntu'nun kendi depoları"
fi
fi
MOD_PHP=0
if printf '%s\n' "${PAKETLER[@]}" | grep -q '^libapache2-mod-php'; then
MOD_PHP=1
sari "Apache mod_php kurulu (en riskli kurulum türü)."
fi
if [[ ${#PAKET_DISI[@]} -gt 0 ]]; then
sari "Paket yöneticisi dışında PHP bulundu; bu betik bunları GÜNCELLEYEMEZ:"
printf ' - %s\n' "${PAKET_DISI[@]}"
sari "Bunları kendi paneli / sağlayıcısı üzerinden güncellemen gerekir."
SORUN=1
fi
TUTULAN=$(apt-mark showhold 2>/dev/null | grep -E '^(php|libapache2-mod-php)' || true)
if [[ -n "$TUTULAN" ]]; then
sari "UYARI: Kilitli (hold) PHP paketleri var, bunlar GÜNCELLENMEYECEK:"
echo "$TUTULAN"
sari "Kilidi kaldırmak için: apt-mark unhold <paket>"
fi
baslik "3/6 Güvenlik deposu"
VAR=0
for f in /etc/apt/sources.list /etc/apt/sources.list.d/*.list /etc/apt/sources.list.d/*.sources; do
[[ -f "$f" ]] || continue
if grep -q 'security\.ubuntu\.com' "$f" && grep -q "${KOD}-security" "$f"; then
VAR=1
echo "security.ubuntu.com zaten tanımlı: $f"
break
fi
done
if [[ $VAR -eq 0 ]]; then
LISTE=/etc/apt/sources.list.d/ubuntu-security-direct.list
echo "deb http://security.ubuntu.com/ubuntu ${KOD}-security main universe" > "$LISTE"
yesil "Eklendi: $LISTE"
fi
baslik "4/6 Paket listesi"
if ! apt-get update; then
sari "apt-get update hata verdi; ağ veya depo bağlantısını kontrol et. Devam ediliyor."
fi
for s in "${SURUMLER[@]}"; do
kurulu=$(apt-cache policy "php${s}-common" | awk '/Installed:/{print $2}')
aday=$(apt-cache policy "php${s}-common" | awk '/Candidate:/{print $2}')
echo "PHP ${s}: kurulu ${kurulu} -> aday ${aday}"
done
baslik "5/6 Güncelleme"
export DEBIAN_FRONTEND=noninteractive
APT_OPTS=(-y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold)
if [[ $TAM -eq 1 ]]; then
echo "Tüm sistem güncelleniyor (--tam)..."
apt-get "${APT_OPTS[@]}" upgrade || sari "apt-get upgrade hatayla bitti; aşağıdaki dpkg kontrolüne bak."
elif [[ ${#PAKETLER[@]} -gt 0 ]]; then
echo "Sadece PHP paketleri güncelleniyor..."
apt-get "${APT_OPTS[@]}" install --only-upgrade "${PAKETLER[@]}" || sari "Güncelleme hatayla bitti; aşağıdaki dpkg kontrolüne bak."
fi
for s in "${SURUMLER[@]}"; do
if systemctl is-active --quiet "php${s}-fpm"; then
if systemctl restart "php${s}-fpm"; then
yesil "php${s}-fpm yeniden başlatıldı."
else
kirmizi "php${s}-fpm yeniden başlatılamadı!"
SORUN=1
fi
fi
done
if [[ $MOD_PHP -eq 1 ]] && systemctl is-active --quiet apache2; then
if systemctl restart apache2; then
yesil "apache2 yeniden başlatıldı (mod_php)."
else
kirmizi "apache2 yeniden başlatılamadı!"
SORUN=1
fi
fi
baslik "6/6 Doğrulama"
declare -A DUZELTILMIS=( [8.2]=8.2.35 [8.3]=8.3.36 [8.4]=8.4.27 [8.5]=8.5.12 )
for s in "${SURUMLER[@]}"; do
ver=$(dpkg-query -W -f='${Version}' "php${s}-common" 2>/dev/null || true)
ust=${ver#*:}; ust=${ust%%-*}; ust=${ust%%+*}
durum=""
if [[ -n "${DUZELTILMIS[$s]:-}" && -n "$ust" ]] && dpkg --compare-versions "$ust" ge "${DUZELTILMIS[$s]}"; then
durum="yamalı (upstream ${ust})"
else
for d in common cli fpm; do
f="/usr/share/doc/php${s}-${d}/changelog.Debian.gz"
if [[ -f "$f" ]] && zgrep -q 'CVE-2026-109618' "$f"; then
durum="yamalı (paket changelog'unda CVE düzeltmesi var)"
break
fi
done
fi
if [[ -n "$durum" ]]; then
yesil "PHP ${s} (${ver}): ${durum}"
else
kirmizi "PHP ${s} (${ver:-?}): YAMASIZ"
SORUN=1
fi
done
ESKI=$(grep -lE '(php|libphp).*\(deleted\)' /proc/[0-9]*/maps 2>/dev/null | cut -d/ -f3 | sort -u || true)
if [[ -n "$ESKI" ]]; then
kirmizi "Hâlâ ESKİ PHP ile çalışan süreçler var (yeniden başlatılmalı):"
for p in $ESKI; do ps -o pid=,user=,cmd= -p "$p" 2>/dev/null; done
SORUN=1
else
yesil "Eski PHP ile çalışan süreç yok."
fi
AUDIT=$(dpkg --audit 2>/dev/null || true)
if [[ -n "$AUDIT" ]]; then
sari "dpkg'de yarım kalmış paketler var (PHP dışı olabilir):"
echo "$AUDIT"
fi
if [[ $TAM -eq 1 && -f /var/run/reboot-required ]]; then
sari "Sistem güncellemesi yeniden başlatma istiyor (/var/run/reboot-required)."
fi
baslik "Sonuç"
if [[ $SORUN -eq 0 ]]; then
yesil "TAMAM: Bu sunucudaki PHP yamalı ve yeni sürümle çalışıyor."
else
kirmizi "DİKKAT: Yukarıda kırmızı/sarı işaretli sorunlar var."
[[ $ONDREJ -eq 1 ]] && sari "- Ondřej PPA henüz güncellenmemiş olabilir; bir süre sonra betiği tekrar çalıştır."
[[ $ESKI_SURUM -eq 1 ]] && sari "- Eski Ubuntu sürümü: Ubuntu Pro (ESM) veya sürüm yükseltmesi gerekir."
sari "- Yama gelene kadar: php.ini / FPM pool içinde session.upload_progress.enabled=0"
sari " ve PHP 8.5'te fatal_error_backtraces=0 ayarlayıp PHP'yi yeniden başlat."
fi
echo "Log: $LOG"
exit $SORUN
EOF
bash /root/php2shell-guncelle.sh
update ve upgrade yapınca uygulanıyor mu hcoam acaba yoksa verdiğinzi mi çalıştırmak lazım