runo10 adlı üyeden alıntı: mesajı görüntüle
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