FTP ile Dosya Yükleme: Eksiksiz Teknik Kılavuz
Dosya Transfer Protokolü (FTP), TCP/IP üzerinden yerel bir makine ile uzak bir sunucu arasında çift yönlü dosya transferini sağlayan, istemci-sunucu modeli üzerinde çalışan bir ağ protokolüdür. Komutlar için bir kontrol kanalı (port 21) ve gerçek dosya yükleri için bir veri kanalı (port 20 veya müzakere edilmiş geçici bir port) olmak üzere iki ayrı kanal kullanır; bu, uygulayıcıların karşılaştığı güvenlik duvarı ve pasif mod sorunlarının büyük çoğunluğunu açıklayan temel bir mimari ayrıntıdır.
Bir web sunucusu yöneten, uygulama kodu dağıtan veya bir VPS Hosting ortamını yöneten herkes için FTP ve güvenli haleflerine hakim olmak zorunludur. Bu kılavuz tam iş akışını kapsar: protokol seçimi, istemci yapılandırması, dizin gezintisi, toplu transferler, izin yönetimi ve genel eğitimlerin atladığı uç durumlar dahil olmak üzere üretim düzeyinde sorun giderme.
FTP Mimarisini ve Protokol Varyantlarını Anlama
Bir istemciye dokunmadan önce, hangi protokol varyantını gerçekten kullandığınızı anlamak, sonradan saatlerce hata ayıklamayı önler.
Aktif ve Pasif Mod
FTP’nin çift kanallı tasarımı kritik bir davranışsal ayrım yaratır:
- Aktif mod: Sunucu, veri bağlantısını istemcinin belirttiği bir port üzerinden istemciye geri başlatır. Bu, sunucudan gelen gelen bağlantı engellendiğinden NAT yönlendiricileri veya katı güvenlik duvarları üzerinden neredeyse her zaman başarısız olur.
- Pasif mod (PASV): İstemci her iki bağlantıyı da başlatır. Sunucu rastgele yüksek bir port açar ve istemciye buna bağlanmasını söyler. Bu, neredeyse her modern dağıtım için doğru varsayılandır.
Üretimdeki bağlantı hatalarının büyük çoğunluğu, güvenlik duvarı olan bir sunucuya karşı aktif modun kullanılmasından veya pasif port aralığı kendi güvenlik duvarı kurallarında açık olmayan bir sunucudan kaynaklanır.
Protokol Karşılaştırma Tablosu
| Özellik | FTP | FTPS (TLS üzerinden FTP) | SFTP (SSH Dosya Transferi) | SCP |
|---|---|---|---|---|
| — | — | — | — | — |
| Şifreleme | Yok | TLS/SSL | SSH | SSH |
| Kontrol kanalı portu | 21 | 21 (açık) / 990 (örtük) | 22 | 22 |
| Veri kanalı | Ayrı (20/geçici) | Ayrı (TLS sarmalı) | Tek çoğullanan kanal | Tek kanal |
| Güvenlik duvarı uyumluluğu | Zayıf | Zayıf | Mükemmel | Mükemmel |
| Transfer devam ettirme | Evet (REST komutu) | Evet | Evet | Hayır |
| Dizin listeleme | Evet | Evet | Evet | Hayır |
| Sertifika gereksinimi | Hayır | Evet (minimum sunucu tarafı) | Hayır (anahtar veya şifre) | Hayır |
| Üretim için önerilen | Hayır | Duruma göre | Evet | Evet (toplu kopyalama) |
Pratik çıkarım: Varsayılan olarak SFTP kullanın. FTPS’yi yalnızca eski bir sistem açıkça gerektirdiğinde kullanın. İnternete açık herhangi bir sunucuda düz FTP’den tamamen kaçının — kimlik bilgileri ve dosya içerikleri düz metin olarak iletilir ve kolayca ele geçirilebilir.
Ön Koşullar ve Kimlik Bilgisi Toplama
Herhangi bir istemci açmadan önce, hosting sağlayıcınızdan veya sunucu yöneticinizden aşağıdakileri toplayın:
- Ana bilgisayar adı veya IP adresi — örn.
ftp.yourdomain.comveya203.0.113.45 - Protokol — FTP, FTPS (açık veya örtük) veya SFTP
- Port — FTP/FTPS-açık için 21, FTPS-örtük için 990, SFTP için 22
- Kullanıcı adı ve şifre — veya SFTP anahtar tabanlı kimlik doğrulama için SSH özel anahtarı
- Uzak kök yolu — sunucu yapısına bağlı olarak genellikle
/public_html,/var/www/htmlveya/home/username/public_html
cPanel’li VPS ile çalışıyorsanız, FTP kimlik bilgileriniz cPanel > FTP Hesapları altında oluşturulur; burada her hesabı belirli bir dizinle de sınırlayabilirsiniz — bu, kimlik bilgilerinin ele geçirilmesi durumunda hasarı sınırlayan bir güvenlik uygulamasıdır.
Adım 1: FileZilla’yı Yükleyin ve Yapılandırın
FileZilla, FTP, FTPS ve SFTP desteği, yerleşik Site Yöneticisi ve devam ettirme özellikli transfer kuyruğu sayesinde en yaygın kullanılan çapraz platform FTP istemcisi olmaya devam etmektedir.
İndirme: FileZilla İstemcisini (Sunucu değil) filezilla-project.org adresinden edinin. Yükleyiciyi çalıştırmadan önce indirme sayfasında yayınlanan SHA-512 sağlama toplamını doğrulayın — bu, çoğu eğiticinin atladığı bir adımdır, ancak popüler yardımcı programlara yönelik tedarik zinciri saldırıları belgelenmiştir.
Kurulumdan sonra FileZilla’yı açın ve Düzenle > Ayarlar > Transferler > Dosya Türleri bölümüne gidin. Varsayılan transfer türünü Otomatik değil İkili olarak ayarlayın. Otomatik algılama, buluşsal yöntem dosyayı yanlış sınıflandırdığında satır sonu dönüşümü uygulayarak ikili dosyaları (görüntüler, arşivler, yürütülebilir dosyalar) sessizce bozabilir.
Adım 2: Site Yöneticisi Girişi Oluşturun
Hızlı bağlantı çubuğunu tek seferlik görevler için kullanmak kabul edilebilir, ancak kimlik bilgilerini recentservers.xml içinde düz metin olarak saklar. Tekrarlayan herhangi bir bağlantı için bunun yerine Site Yöneticisini kullanın.
- Dosya > Site Yöneticisi‘ni açın (veya
Ctrl+Stuşuna basın). - Yeni Site‘ye tıklayın ve açıklayıcı bir ad verin.
- Genel sekmesini yapılandırın:
- Protokol: SSH tabanlı sunucular için SFTP’yi veya FTPS için açık TLS ile FTP’yi seçin.
- Ana Bilgisayar: Sunucu ana bilgisayar adını veya IP’yi girin.
- Port: Protokol varsayılanını kullanmak için boş bırakın veya açıkça belirtin.
- Oturum Açma Türü: Şifre kimlik doğrulaması için Normal‘i veya SSH anahtar tabanlı SFTP için Anahtar dosyası‘nı seçin.
- Kullanıcı / Şifre: Kimlik bilgilerini girin.
- Gelişmiş sekmesinde, Varsayılan uzak dizin‘i web kökünüze (örn.
/public_html) ve Varsayılan yerel dizin‘i proje klasörünüze ayarlayın. Bu, her oturumda gezinti süresini ortadan kaldırır. - Bağlan‘a tıklayın.
Anahtar tabanlı kimlik doğrulama ile SFTP için — Dedicated Servers için önerilen yaklaşım — Anahtar dosyası alanını özel anahtarınıza (.pem veya .ppk formatı) yönlendirin. FileZilla kendi anahtar formatını kullanır; gerekirse OpenSSH anahtarlarını PuTTYgen ile dönüştürün.
Adım 3: Çift Bölmeli Arayüzde Gezinin
Bağlandıktan sonra FileZilla bölünmüş bir görünüm sunar:
- Sol bölme (Yerel Site): Yerel dosya sisteminiz. Yüklemek istediğiniz dosyaları içeren dizine gidin.
- Sağ bölme (Uzak Site): Sunucunun dosya sistemi. Hedef dizine gidin — web içeriği için genellikle
/public_html. - Alt kuyruk panelleri: Zaman damgaları ve bayt sayılarıyla birlikte sıradaki transferleri, başarısız transferleri ve başarılı transferleri gösterir.
Her bölmenin üstündeki dizin ağacı ve altındaki dosya listesi bağımsızdır — ağaçta bir klasöre tıklamak otomatik olarak dosya listesini kaydırmaz. Bu, dosya listesinin neden boş göründüğünü merak eden yeni kullanıcıları şaşırtır.
Adım 4: Dosyaları Yükleyin
Tek Dosya veya Manuel Seçim
Yerel bölmedeki herhangi bir dosyaya sağ tıklayın ve Yükle‘yi seçin ya da uzak bölmeye sürükleyin. Çoklu dosya seçimi için bitişik olmayan seçimde Ctrl+Click (Windows/Linux) veya Cmd+Click (macOS), aralık için Shift+Click kullanın.
Sürükle ve Bırak ile Yükleme
Yerel bölmedeki dosyaları seçin ve uzak bölmedeki hedef klasöre sürükleyin. FileZilla tüm öğeleri kuyruğa alır ve hemen transfer etmeye başlar.
Senkronize Dizin Yükleme
Tüm bir proje dizinini dağıtmak için yerel klasöre sağ tıklayın ve Yükle‘yi seçin. FileZilla tüm içerikleri yinelemeli olarak yükler ve uzak taraftaki dizin yapısını korur.
Transfer İlerlemesini İzleme
Alttaki transfer kuyruğu şunları gösterir:
- Dosya adı ve boyutu
- Transfer hızı (bayt/saniye)
- Geçen ve tahmini süre
- Uzak hedef yolu
Tamamlanan ancak 0 bayt transfer gösterilen bir transfer sessiz bir başarısızlıktır — dosya oluşturulmuş ancak boş. Bu genellikle hedef dizinde bir izin sorununa veya sunucuda disk kotası ihlaline işaret eder.
Adım 5: Yüklemeden Sonra Doğru Dosya İzinlerini Ayarlayın
Bu, en sık atlanan adımdır ve “yüklemeden sonra web sitem bozuldu” destek taleplerinin önemli bir yüzdesinin kaynağıdır.
Yükledikten sonra, uzak bölmedeki bir dosyaya veya dizine sağ tıklayın ve Dosya izinleri‘ni seçin. Sayısal gösterim doğrudan Unix izin sekizliklerine karşılık gelir:
- 644 — Web dosyaları için standart (sahip okuma/yazma, grup/diğer yalnızca okuma)
- 755 — Dizinler ve yürütülebilir betikler için standart
- 600 — Web’den erişilmemesi gereken özel dosyalar (örn. kimlik bilgileri içeren yapılandırma dosyaları)
- 777 — Bunu üretimde asla kullanmayın; herkese yazma erişimi verir
Yüklenen tüm dizin ağacında yinelemeli izin düzeltmesi için Alt dizinlere gir‘i işaretleyin ve dosyalara 644, dizinlere 755‘i ayrı ayrı uygulayın. FileZilla tek bir yinelemeli geçişte dosyaları dizinlerden ayırt etmez — uygun filtre seçili olarak iki kez çalıştırmanız gerekir.
Alternatif olarak, SSH üzerinden bağlandıktan sonra izinleri toplu olarak düzeltin:
find /public_html -type f -exec chmod 644 {} ;
find /public_html -type d -exec chmod 755 {} ;Adım 6: Yüklemeyi Doğrulayın
Tamamlanan bir transfer kuyruğunun dağıtımın doğru olduğu anlamına geldiğini varsaymayın. Bu doğrulama adımlarını gerçekleştirin:
- FileZilla’da: Uzak dizini yenileyin (
F5veya sağ tıklayın > Yenile) ve dosya boyutlarının yerel orijinallerle eşleştiğini onaylayın. Boyut uyuşmazlığı kesik bir transfere işaret eder. - Tarayıcı üzerinden: Güncellenen sayfayı yükleyin ve tarayıcı önbelleğini atlamak için zorla yenileme yapın (
Ctrl+Shift+R). - SSH üzerinden: Sunucu tarafı doğrulaması için sağlama toplamlarını karşılaştırın:
md5sum /public_html/index.htmlÇıktıyı yerel dosyanın sağlama toplamıyla karşılaştırın. Uyuşmazlık, dosyanın iletim sırasında bozulduğu anlamına gelir — SFTP ile nadirdir ancak kararsız bağlantılarda düz FTP ile mümkündür.
Gelişmiş Teknikler ve Üretim Kalıpları
Başarısız Transferleri Devam Ettirme
Büyük bir dosya transferi kesintiye uğrarsa, FileZilla son onaylanan bayt ofsetinden devam etmek için FTP REST komutunu (veya SFTP’nin eşdeğerini) kullanır. Başarısız transferler sekmesinde, başarısız öğeye sağ tıklayın ve Başarısız dosyaları sıfırla ve yeniden kuyruğa al‘ı seçin, ardından kuyruğu tekrar başlatın. Bu SFTP ile güvenilir şekilde çalışır; düz FTP devam ettirme, sunucunun REST komutunu desteklemesine bağlıdır.
Yüklemeden Dosyaları Hariç Tutma
FileZilla’nın Düzenle > Dosya Adı Filtreleri, kalıplarla eşleşen dosyaları hariç tutmak için kurallar tanımlamanıza olanak tanır — örneğin, .git dizinlerini, node_modules, .DS_Store veya .env dosyalarını yanlışlıkla yüklemekten hariç tutmak. Bu kritik bir güvencedir: veritabanı kimlik bilgileri veya API anahtarları içeren bir .env dosyasını genel bir web köküne yüklemek ciddi bir güvenlik olayıdır.
Komut Dosyalı/Otomatik FTP Transferleri
CI/CD ardışık düzenleri veya zamanlanmış dağıtımlar için FileZilla GUI uygun değildir. Bunun yerine komut satırı lftp yardımcı programını kullanın:
lftp -u username,password sftp://your-server.com << 'EOF'
set sftp:auto-confirm yes
mirror --reverse --delete --verbose /local/project/ /public_html/
EOF--reverse bayrağı yükler (yerelden uzağa), --delete yerel olarak bulunmayan uzak dosyaları kaldırır (dikkatli kullanın) ve --verbose her işlemi günlüğe kaydeder. Bu kalıp, SSH erişiminin mevcut olduğu VPS Hosting ortamlarında otomatik dağıtımlar için uygundur.
FTP Alternatifi Olarak SSH Üzerinden rsync Kullanımı
Büyük dağıtımlar veya artımlı senkronizasyonlar için SSH üzerinden rsync, FTP’ye kıyasla çok daha verimlidir çünkü tüm dosyalar yerine yalnızca dosyalar içindeki değişen blokları aktarır:
rsync -avz --progress --delete /local/project/ user@your-server.com:/public_html/-a — Arşiv modu (izinleri, zaman damgalarını, sembolik bağlantıları korur)
-v — Ayrıntılı çıktı
-z — Transfer sırasında veriyi sıkıştır
--delete — Yerel olarak silinen uzak dosyaları kaldır
rsync SSH erişimi gerektirir ve paylaşımlı hosting kontrol panelleri aracılığıyla kullanılamaz, ancak sunucu yığınını kontrol ettiğiniz herhangi bir ortam için doğru araçtır.
Yaygın FTP ve SFTP Sorunlarını Giderme
Bağlantı Zaman Aşımı veya Reddedildi
Ana bilgisayar adının doğru çözümlendiğini doğrulayın: nslookup ftp.yourdomain.comtelnet your-server.com 21 veya nc -zv your-server.com 22iptables -L veya ufw status portun izin verilip verilmediğini gösterirsystemctl status sshd530 Oturum Açma Kimlik Doğrulaması Başarısız
- Kullanıcı adının tam olduğunu onaylayın — FTP kullanıcı adları Linux sistemlerinde büyük/küçük harfe duyarlıdır
- Hesabın kilitli olmadığını doğrulayın: sunucuda
passwd -S username - Reddetme nedeni için
/var/log/auth.logveya/var/log/secure‘u kontrol edin - cPanel kullanıyorsanız, FTP hesabının süresi dolmamış veya askıya alınmamış olduğunu onaylayın
Yüklemede 550 İzin Reddedildi
Uzak dizin, kimliği doğrulanmış FTP kullanıcısına yazma erişimi vermiyor. Sahipliği ve izinleri kontrol edin:
ls -la /public_html/Dizin farklı bir kullanıcıya aitse, ya sahipliği ayarlayın (chown) ya da grup yazma iznini verin (chmod g+w). Paylaşımlı hostingde bu, hosting kontrol panelinin dosya yöneticisi aracılığıyla gerçekleştirilir.
Pasif Mod Bağlantı Hataları
Başarılı bir oturum açmanın ardından “Dizin listesi alınamadı” görüyorsanız, sunucunun pasif port aralığına ulaşılamıyor demektir. FileZilla’da Düzenle > Ayarlar > FTP > Pasif mod‘a gidin ve Aktif moda geri dön‘ü deneyin. Sunucu tarafında, pasif port aralığının (genellikle 49152–65534) güvenlik duvarında açık olduğundan ve FTP arka plan programının ayarlarında doğru şekilde yapılandırıldığından emin olun (örn. pasv_min_port ve pasv_max_port içinde vsftpd.conf).
İkili ve ASCII Transfer Bozulması
Windows istemcisinde ASCII modunda yüklenen PHP dosyaları, belirli ayrıştırıcıları bozabilecek Windows stili satır sonlarına (rn) dönüştürülebilir. FileZilla’nın Transfer > Transfer Türü > İkili altında İkili moda ayarlandığını onaylayın.
Alternatif Yükleme Yöntemleri
FTP her zaman doğru araç değildir. Aşağıdaki alternatifler bilinmeye değerdir:
cPanel / Plesk Dosya Yöneticisi: Paylaşımlı Web Hosting ve VPS Kontrol Panelleri‘nde web tabanlı kontrol paneli aracılığıyla kullanılabilir. Küçük düzenlemeler ve tek dosya yüklemeleri için uygundur. Çoğu uygulamada 2 GB dosya boyutu sınırı vardır ve toplu transferler için uygun değildir.
SCP (Güvenli Kopyalama): Basit, komut dosyasıyla kullanılabilir SSH tabanlı bir kopyalama aracı. Devam ettirme özelliği yok, dizin listesi yok, ancak tek seferlik transferler için son derece güvenilir:
scp -r /local/project/ user@your-server.com:/public_html/Git tabanlı dağıtım: Sunucudaki çıplak bir depoya gönderin ve dosyaları web köküne almak için bir post-receive kancası kullanın. Bu, kod için en temiz dağıtım kalıbıdır — sürüm geçmişi, geri alma özelliği sağlar ve manuel dosya yönetimini tamamen ortadan kaldırır.
Nesne depolama / CDN senkronizasyonu: Statik varlıklar için S3 uyumlu bir pakete senkronize etmek ve CDN üzerinden sunmak, FTP tabanlı dağıtımdan çok daha ölçeklenebilirdir ve web sunucusunu statik varlık teslim yolundan tamamen kaldırır.
Hızlı Karar Matrisi: Doğru Transfer Yöntemini Seçme
| Senaryo | Önerilen Yöntem |
|---|---|
| — | — |
| Paylaşımlı hostingde tek seferlik dosya düzenleme | cPanel Dosya Yöneticisi |
| SSH olmadan düzenli web sitesi dağıtımı | FileZilla üzerinden SFTP |
| Otomatik CI/CD ardışık düzen dağıtımı | SSH üzerinden `lftp` veya `rsync` |
| Büyük ikili dosya, tek seferlik transfer | `scp` |
| Artımlı kod dağıtımı | `rsync` veya Git post-receive kancası |
| FTP gerektiren eski sistem | Minimum FTPS (açık TLS) |
| Toplu statik varlık dağıtımı | S3 uyumlu nesne depolama senkronizasyonu |
Yayına Geçmeden Önce Temel Teknik Kontrol Listesi
- Protokol: Yalnızca SFTP veya FTPS — üretim sunucusunda asla düz FTP kullanmayın
- Kimlik bilgileri: Kök veya birincil sistem kullanıcısı değil, gerekli minimum dizinle sınırlı özel FTP/SFTP hesapları kullanın
- Transfer modu: Otomatik veya ASCII değil, İkili
- Dosya izinleri: Dosyalar için 644, dizinler için 755 — yüklemeden sonra doğrulandı
- Hassas dosyalar:
.env,.git/,node_modules/ve kimlik bilgileri içeren yapılandırma dosyalarının dosya adı filtreleri aracılığıyla yüklemeden hariç tutulduğunu onaylayın - Sağlama toplamı doğrulaması: Transferden sonra kritik dosyalar için MD5 veya SHA-256 karşılaştırması
- Pasif mod: FTP istemcisinde varsayılan olarak etkin
- SSH anahtarları: Kontrol ettiğiniz herhangi bir sunucuda SFTP için anahtar tabanlı kimlik doğrulama kullanın; mümkün olan yerlerde
sshd_config‘da şifre kimlik doğrulamasını devre dışı bırakın
Sıkça Sorulan Sorular
FTP ile SFTP arasındaki fark nedir?
FTP, verileri ve kimlik bilgilerini iki ayrı TCP kanalı üzerinden düz metin olarak iletir (kontrol port 21’de, veri port 20’de veya geçici portta). SFTP, her şeyi port 22’deki tek şifreli bir kanal üzerinden çoğullayan SSH üzerine inşa edilmiş tamamen farklı bir protokoldür. Aynı adı paylaşırlar ancak hiçbir protokol kodunu paylaşmazlar.
FileZilla neden doğru kimlik bilgileriyle bile “Bağlantı zaman aşımına uğradı” gösteriyor?
Kimlik doğrulamasından önce zaman aşımı genellikle sunucu portunun ulaşılamaz olduğu anlamına gelir — bir güvenlik duvarı tarafından engellendi, hizmet çalışmıyor veya ana bilgisayar adı doğru IP’ye çözümlenmiyor. Kimlik doğrulamasından sonra zaman aşımı genellikle veri kanalı port aralığının güvenlik duvarı tarafından engellendiği bir pasif mod sorununa işaret eder. Sunucu tarafı güvenlik duvarı kurallarını kontrol edin ve pasif port aralığının açık olduğunu onaylayın.
Kontrol paneli olmadan VPS’e dosya yüklemek için FTP kullanabilir miyim?
Evet. SFTP özellikli bir SSH arka plan programı yükleyin (tüm Linux dağıtımlarında standart olan OpenSSH) — ek FTP sunucu yazılımı gerekmez. FileZilla ile port 22’de SFTP protokolünü ve SSH kimlik bilgilerinizi veya anahtar çiftinizi kullanarak bağlanın. Bu, herhangi bir VPS Hosting ortamı için önerilen yaklaşımdır.
FTP yüklemesinden sonra WordPress dosyalarının izinleri ne olmalıdır?
WordPress çekirdek dosyaları 644, dizinler 755 ve wp-config.php 600 (yalnızca sahip okuma/yazma) olmalıdır. wp-content/uploads dizini, web sunucusunun yüklenen medyayı yazabilmesi için 755 veya 775 gerektirir. Hiçbir WordPress dizinini 777 olarak ayarlamayın.
FTP üzerinden yüklerken dosya boyutu sınırı var mı?
FTP ve SFTP’nin kendisi doğası gereği dosya boyutu sınırı getirmez — transferler akış olarak gerçekleşir. Pratik sınırlar sunucu tarafı disk kotalarından, PHP upload_max_filesize‘dan (FTP için geçersiz, çünkü FTP PHP’yi tamamen atlar) veya dosya sistemi sınırlarından (ext4, 16 TB’a kadar dosyaları destekler) gelir. Paylaşımlı Web Hosting‘de, hosting sağlayıcısı bireysel dosya boyutu yerine toplam depolamayı sınırlayan bir disk kotası uygulayabilir.
