secaudit.eu
Sıkılaştırma

WordPress için SFTP ve FTP: SSH anahtarlarına geçin

WordPress'te SFTP ve FTP farkı: düz FTP'yi bırakın, eski FTP hesaplarını silin, kişi başına SSH anahtarı kurun ve wp-config.php'deki FTP parolasını kaldırın.

Yazar: , AngelForce OÜ 6 dk okuma

Diğer diller: English Deutsch Français Español Italiano Polski Português

Hosting panelinizde FTP hesapları sayfasını açın. Birçok WordPress sitesinde en az bir tane, kimsenin açıklayamadığı bir giriş bulacaksınız. Siteyi kuran ajanstan, üç yıl önce bir eklentiyi düzelten serbest çalışandan ya da ftp1 adlı bir test hesabından kalmış olabilir. SFTP ve FTP arasında seçim yapmak zor değil: bu hesapları silin, düz FTP'yi bırakın ve her kişiye SFTP için kendi SSH anahtarını verin. Bu rehber, kimseyi dışarıda bırakmayacak bir sırayla bu geçişi anlatıyor.

SFTP ve FTP: düz FTP neden bırakılmalı

Düz FTP; kullanıcı adınızı, parolanızı ve tüm dosyaları şifrelemeden gönderir. Ağ yolu üzerindeki herkes bunların tamamını okuyabilir. Otel Wi-Fi ağı, ele geçirilmiş bir ofis yönlendiricisi ya da özensiz bir ağ sağlayıcısı buna örnektir. wp-config.php dosyasını FTP ile hiç indirdiyseniz, veritabanı parolanız da bu kapsamdadır.

FTP girişleri ayrıca WordPress'in tamamen dışındadır. wp-admin'deki iki faktörlü kimlik doğrulama onları korumaz ve WordPress kullanıcı listenizde görünmezler. Çalışan bir FTP parolasına sahip olan biri, giriş sayfasını hiç görmeden bir PHP dosyası yükleyip sitenizde kod çalıştırabilir.

Protokol değiştirmenin sınırları net. Anahtarın durduğu dizüstü bilgisayar virüslüyse SFTP işe yaramaz, savunmasız bir eklentiye karşı da bir şey yapmaz. Yalnızca belirli bir kapıyı kapatır: dosya sisteminize açılan okunabilir kimlik bilgilerini ve unutulmuş girişleri.

SSH anahtarı akışı: ssh-keygen bir özel ve bir açık anahtar üretir; sunucuya yalnızca açık anahtar gider
Özel anahtar cihazınızda kalır. Sunucuya yalnızca açık anahtar kopyalanır.

FTP, FTPS ve SFTP karşılaştırması

İsimler kafa karıştırıcı, o yüzden kısa özet:

FTPFTPSSFTP
ŞifrelemeYokTLSSSH
Tipik port2121 (explicit) veya 990 (implicit)22
BağlantılarKontrol + veriKontrol + veriTek
Anahtarla girişHayırHayır (yalnızca sertifika)Evet
DeğerlendirmeAslaYedek çözümÖnerilen

FTPS, TLS ile sarılmış eski FTP protokolüdür. Trafiği şifreler ama yine ayrı veri bağlantıları açar. Bunlar çoğu zaman güvenlik duvarları ve NAT ile çakışır; sonuç klasik "directory listing failed" hatasıdır. SFTP ise adına rağmen FTP ile ilgisizdir. SSH'nin bir alt sistemidir, tek bir şifreli bağlantı üzerinden çalışır ve parola yerine SSH anahtarlarıyla girişi destekler.

Önerimiz: hosting firmanız SSH erişimi sunuyorsa SFTP kullanın. FTPS'yi yalnızca yedek çözüm olarak düşünün. Düz FTP'yi hiç kullanmayın. FileZilla'da Site Yöneticisi'nden (Site Manager) protokolü "SFTP - SSH File Transfer Protocol" olarak seçin. FTPS kullanmak zorundaysanız "Require explicit FTP over TLS" seçeneğini işaretleyin. "Use explicit FTP over TLS if available" seçeneğini seçmeyin; TLS başarısız olduğunda sessizce düz FTP'ye döner. WinSCP'de aynı seçim "File protocol" altında bulunur.

Önce eski FTP hesaplarını bulun ve silin

Anahtar oluşturmadan önce bir envanter çıkarın. Şu yerlere bakın:

  • Hosting panelinizin FTP hesapları bölümü (cPanel, Plesk ve benzer panellerin hepsinde vardır).
  • SSH erişimi ya da SSH anahtarları bölümü; halihazırda yetkilendirilmiş anahtarlar dahil.
  • Kendi sunucunuzda: oturum kabuğu olan sistem kullanıcıları (grep -vE 'nologin|false' /etc/passwd) ve tüm ~/.ssh/authorized_keys dosyaları.

Her hesap için kimin, ne amaçla kullandığını yazın. Sahibini kimse söyleyemiyorsa hesabı silin. Parolasını değiştirmek yetmez. Ana hosting hesabının parolası bir FTP istemcisine hiç yazıldıysa onu da değiştirin; o parola en az bir kez şifresiz dolaşmıştır.

Temizliğin kısa bir kaydını tutun: tarih, silinen hesaplar, onaylayan kişi. WordPress girişleri için de aynı incelemeyi paralel yapın. Bu konuyu WordPress kullanıcı rolleri güvenliği rehberimiz ele alıyor.

Kişi başına bir SSH anahtarı üretin (passphrase ile)

Herkes kendi anahtarını kendi bilgisayarında oluşturur. macOS, Linux ve güncel Windows sürümlerinin hepsinde OpenSSH bulunur:

ssh-keygen -t ed25519 -C "anna@example-company.eu"

Varsayılan konumu kabul edin, sorulduğunda bir passphrase (parola cümlesi) belirleyin. Passphrase'i atlamayın. Komut iki dosya oluşturur:

  • ~/.ssh/id_ed25519 özel anahtardır. Cihazdan asla çıkmaz.
  • ~/.ssh/id_ed25519.pub açık anahtardır. Paylaşacağınız olan budur.

Her bağlantıda passphrase yazmamak için anahtarı oturum başına bir kez ajana yükleyin: ssh-add ~/.ssh/id_ed25519. Windows'ta önce "OpenSSH Authentication Agent" hizmetini etkinleştirin. PuTTY gibi bazı istemciler .ppk biçimi ister. PuTTYgen, OpenSSH anahtarını içe aktarıp .ppk kopyası kaydedebilir. Tüm seçenekler ssh-keygen kılavuzunda listeleniyor.

Neden kişi başına bir anahtar? Böylece birinin erişimini kaldırmak tek bir satırı silmek demektir ve günlüklerde hangi anahtarın kullanıldığı görünür. Ortak anahtarlar ve ortak girişler ikisini de imkânsız kılar; bu geçişte onları emekliye ayırın.

Açık anahtarı ekleyin: hosting paneli veya ~/.ssh/authorized_keys

Yönetilen ya da paylaşımlı hostingde SSH erişimi veya SSH anahtarları bölümünü açın. Açık anahtarı yapıştırın, tanınabilir bir ad verin ve panel istiyorsa yetkilendirin (cPanel'de ayrı bir "Authorize" adımı vardır).

Kendi sunucunuzda anahtarı kullanıcının authorized_keys dosyasının sonuna ekleyin ve sıkı izinler tanımlayın:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
cat anna.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Parolayla giriş hâlâ çalışıyorsa ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host komutu aynı işi kişinin kendi bilgisayarından yapar. Her anahtar satırının sonundaki yorumu (anna@example-company.eu) silmeyin. İki yıl sonra anahtarı onunla tanırsınız.

Anahtarla girişi test edin, sonra parolayla girişi kapatın

Mevcut oturumunuzu veya panel sekmenizi açık tutun. İkinci bir terminalde yeni anahtarı deneyin:

ssh -i ~/.ssh/id_ed25519 user@host

Ya da SFTP istemcinizle anahtar dosyasını göstererek bağlanın. Erişmesi gereken herkes için bu çalıştıktan sonra parola doğrulamasını kapatın. Hosting panelinde bu genellikle SSH bölümündeki bir anahtardır. Bulamadığınız paylaşımlı hostinglerde, hesabınız için parolayla SSH ve FTP girişlerinin kapatılıp kapatılamayacağını hosting firmanıza sorun.

Kendi sunucunuzda /etc/ssh/sshd_config içine şunu yazın:

PasswordAuthentication no
KbdInteractiveAuthentication no

/etc/ssh/sshd_config.d/ altındaki dosyaları da kontrol edin. Bazı bulut imajları PasswordAuthentication yes ayarlayan bir ek dosya ile gelir. Yeniden yüklemeden önce yapılandırmayı doğrulayın ve geçerli değeri teyit edin:

sudo sshd -t
sudo sshd -T | grep -i passwordauthentication
sudo systemctl reload ssh

Red Hat tabanlı sistemlerde hizmetin adı sshd'dir.

Bundan sonra ekipten ayrılma sürecine tek bir adım eklenir: biri ayrıldığı gün, anahtar satırını silin.

wp-config.php'de FS_METHOD ve FTP kimlik bilgileri

WordPress bazen bir eklenti kurarken veya güncellerken "Connection Information" (bağlantı bilgisi) formu gösterir. Bunun nedeni PHP'nin dosyalara doğrudan yazamamasıdır; çoğunlukla bir sahiplik sorunudur. Nedenini WordPress dosya izinleri yazımız açıklıyor.

Yaygın bir geçici çözüm, FTP bilgilerini wp-config.php içine yazmaktı:

define( 'FS_METHOD', 'ftpext' );
define( 'FTP_HOST', 'ftp.example.de' );
define( 'FTP_USER', 'webuser' );
define( 'FTP_PASS', 'the-hosting-password' );

Güncellemeler böylece çalışır, ama hosting parolası artık PHP'nin her istekte okuduğu bir dosyada düz metin olarak durur. wp-config.php yedek kopya, yanlış yapılandırılmış bir sunucu ya da savunmasız bir eklenti yoluyla sızarsa, dosya erişimi de onunla birlikte sızar. Bu sabitleri kontrol edin:

grep -nE "FS_METHOD|FTP_(HOST|USER|PASS|SSL|PUBKEY|PRIKEY)" wp-config.php

Bir üst dizinde de çalıştırın; bazı kurulumlarda wp-config.php bir seviye yukarıda durur. Sabitleri kaldırın ve WordPress dosyalara doğrudan yazabilsin diye sahipliği düzeltin. Bu durumda FS_METHOD için 'direct' değeri işe yarar ya da satırı tamamen çıkarabilirsiniz. 'ssh2' seçeneğini yalnızca PHP ssh2 eklentisi ve özel bir anahtar düzgün kurulmuşsa kullanın. Ardından referans verilen FTP hesabını silin ya da en azından parolasını yenileyin. Bu sabitlerin tamamı WordPress wp-config.php belgelerinde açıklanıyor. Dosyadaki diğer ayarları wp-config.php sertleştirme kontrol listemiz ele alıyor.

secaudit.eu üzerinden ücretsiz edinebileceğiniz Security Audit & Compliance eklentisi siteyi açıkta kalan gizli bilgiler ve dosyalar ile sertleştirme eksikleri açısından tarar; yanlış yerde unutulmuş kimlik bilgilerini fark etmenize yardımcı olur. Hosting panelinizdeki FTP hesap listesini göremez, bu yüzden yukarıdaki envanter elle yapılacak bir iş olarak kalır.

SSS

Hostingimde SSH yoksa FTPS yeterli mi?

Trafik şifrelendiği için yedek çözüm olarak kabul edilebilir. İstemcinizi TLS zorunlu kılacak şekilde ayarlayın, kişi başına güçlü ve benzersiz bir parola kullanın ve yine de eski hesapları silin. Hosting firmanız hiç SSH erişimi sunmuyorsa ve ne zaman sunacağını söyleyemiyorsa, başka bir hostinge geçmeyi düşünün.

SFTP için SSH anahtarı şart mı, parola yeterli mi?

Parolalı SFTP, parola şifreli iletildiği için FTP'den çok daha iyidir. Yine de anahtarlar daha iyidir. Özel anahtar cihazınızdan hiç çıkmadığı için tahmin edilemez ve sahte bir giriş sayfasıyla ele geçirilemez. Aynı açık anahtarı birkaç sunucuda kullanmak, yeniden kullanılan bir parola gibi risk yaratmaz; her anahtar da tek tek kaldırılabilir.

Anahtarın bulunduğu dizüstü bilgisayar kaybolursa ne olur?

O kişinin açık anahtarını aynı gün tüm sunuculardan ve panellerden kaldırın. Passphrase size zaman kazandırır ama beklemek için bir gerekçe değildir. Kişi daha sonra yeni cihazında yeni bir anahtar çifti üretir.

Düz FTP, GDPR (AB Genel Veri Koruma Tüzüğü) açısından sorun mu?

GDPR'ın 32. maddesinin 1. fıkrasının (a) bendi, şifrelemeyi uygun bir güvenlik önlemi örneği olarak sayar. Müşteri veya iletişim formu verilerini barındıran bir sunucuya şifresiz girişleri savunmak bu yüzden zordur. WordPress için GDPR madde 32 yazımız maddenin geri kalanını ve arkasındaki risk temelli yaklaşımı açıklıyor.

Bu makale genel bilgilendirme amaçlıdır, hukuki danışmanlık değildir.

Kendi sitenizi kontrol edin

Security Audit & Compliance, secaudit.eu’nun WordPress eklentisidir: zararlı yazılımları, gizli spam’i, değiştirilmiş çekirdek dosyalarını ve açıklı kodu tarar; bulguları GDPR Md. 32, NIS2 Md. 21 ve OWASP Top 10 ile eşleştirir.

Eklentinin neleri kontrol ettiğini görün
secaudit.eu editör ekibi

secaudit.eu’nun WordPress güvenliği ve AB uyumluluğu rehberleri yapay zekâ araçlarıyla yazılır ve yayından önce otomatik kontrollerle kaynak listemize göre denetlenir. secaudit.eu, Tallinn (Estonya) merkezli yazılım şirketi AngelForce OÜ tarafından yayımlanır.

Yapay zekâ desteğiyle hazırlanmış ve yayından önce doğruluğu kontrol edilmiştir. Bu makale genel bilgi niteliğindedir, hukuki danışmanlık değildir.