Dosya transferi, kurumların günlük operasyonlarında sık kullanılan temel servislerden biridir. Yedeklerin merkezi bir sisteme taşınması, uygulama çıktılarının başka sistemlere aktarılması, iş ortaklarıyla dosya alışverişi yapılması veya VMware vCenter, NSX Manager gibi altyapı bileşenlerinin dosya tabanlı yedeklerinin merkezi bir hedefe gönderilmesi gibi birçok senaryoda güvenilir bir dosya transfer altyapısına ihtiyaç duyulur.
Geleneksel FTP protokolü geçmişte bu amaçla yaygın şekilde kullanılmış olsa da kullanıcı adı, parola ve dosya trafiğini varsayılan olarak şifrelemediği için günümüz güvenlik gereksinimleri açısından uygun bir çözüm değildir.
SFTP ise dosya transferini SSH altyapısı üzerinden gerçekleştirerek hem kimlik doğrulama sürecini hem de aktarılan veriyi şifreler. SFTP’nin OpenSSH ile birlikte kullanılabilmesi ayrıca ayrı bir FTP servisi kurulması ihtiyacını ortadan kaldırır. Kaynak dokümanda da SFTP’nin SSH bağlantısı üzerinden çalışan, FTP’den farklı bir protokol olduğu ve kullanıcıların yalnızca dosya transferine sınırlandırılabileceği belirtilmektedir.
Bu makalede aşağıdaki senaryo kullanılacaktır:
| Bileşen | Değer |
|---|---|
| Sunucu | vkk-sftp01 |
| İşletim sistemi | Ubuntu Server |
| SFTP servisi | OpenSSH / internal-sftp |
| SFTP kullanıcısı | vkk-sftpuser |
| SFTP grubu | vkk-sftpusers |
| Ana SFTP veri alanı | /sfp-data/ |
| Kullanıcı chroot alanı | /sfp-data/vkk-sftpuser/ |
| Yazılabilir alan | /sfp-data/vkk-sftpuser/upload/ |
| Protokol | SFTP |
| Varsayılan port | TCP/22 |
| Terminal erişimi | Kapalı |
| Kullanıcı izolasyonu | Chroot |
Burada /sfp-data/ kurumun ana SFTP veri alanı olarak kullanılacaktır. Kullanıcının dışarı çıkamayacağı chroot dizini ise /sfp-data/vkk-sftpuser/ olacaktır.
Bu tasarımın en önemli avantajlarından biri ileride yeni kullanıcılar eklendiğinde aynı yapılandırmanın aşağıdaki şeklinde kolaylıkla genişletilebilmesidir.
/sfp-data/kullanici1
/sfp-data/kullanici2
/sfp-data/kullanici3
2. SFTP Nedir?
SFTP, SSH File Transfer Protocol ifadesinin kısaltmasıdır ve SSH bağlantısını kullanarak güvenli dosya transferi gerçekleştiren bir protokoldür.
SFTP yalnızca dosya yükleyip indirmekle sınırlı değildir. Kullanıcı yetkileri doğrultusunda;
- dosya listeleme,
- dizin oluşturma,
- dosya silme,
- yeniden adlandırma,
- dosya ve dizin izinlerini değiştirme,
- dosya yükleme ve indirme
gibi işlemler de gerçekleştirilebilir.
SFTP hakkında en sık yapılan yanlışlardan biri, protokolün “FTP’nin şifrelenmiş sürümü” olduğunun düşünülmesidir.
Bu doğru değildir.
FTP, FTPS ve SFTP birbirlerinden farklı protokollerdir.
| Özellik | FTP | FTPS | SFTP |
|---|---|---|---|
| Temel protokol | FTP | FTP | SSH |
| Şifreleme | Yok | TLS/SSL | SSH |
| Kimlik bilgilerinin korunması | Yok | Var | Var |
| Veri şifreleme | Yok | Var | Var |
| Varsayılan port | 21 | 21/990 | 22 |
| Veri bağlantısı | Ek portlar gerekir | Ek portlar gerekebilir | Tek bağlantı |
| SSH anahtarı | Yok | Tipik olarak yok | Var |
| Firewall yönetimi | Daha karmaşık | Daha karmaşık | Daha kolay |
| Chroot entegrasyonu | Sunucuya bağlı | Sunucuya bağlı | OpenSSH ile güçlü |
SFTP’nin FTP ve FTPS’den en önemli farklarından biri bütün işlemlerin tek bir SSH bağlantısı üzerinden gerçekleştirilebilmesidir.
3. SFTP ile SCP Arasındaki Fark
SFTP ve SCP de zaman zaman birbirleriyle karıştırılmaktadır.
SCP temelde dosya kopyalama amacıyla kullanılırken SFTP daha geniş bir dosya yönetimi komut seti sağlar.
SFTP oturumunda örneğin aşağıdaki gibi işlemler de gerçekleştirilebilir.
ls
cd
mkdir
rm
rename
put
get
Kesilen transferlerin devam ettirilmesi gereken senaryolarda da kullanılan istemciye bağlı olarak reget ve reput gibi yöntemlerden yararlanılabilir.
4. SFTP Nasıl Çalışır?
Bir kullanıcının:
sftp vkk-sftpuser@vkk-sftp01
komutunu çalıştırmasıyla SFTP bağlantısının arka planında birkaç aşama gerçekleşir.
4.1. SSH Bağlantısının Başlatılması
İstemci vkk-sftp01 sunucusunun TCP/22 portuna bağlantı kurar. SFTP için ayrıca FTP servisi veya ayrı bir veri portu kullanılmaz.
SFTP Client
|
| TCP/22
↓
vkk-sftp01
|
sshd
4.2. Kriptografik Algoritmaların Belirlenmesi
İstemci ve sunucu destekledikleri;
- anahtar değişim algoritmalarını,
- şifreleme algoritmalarını,
- host key algoritmalarını,
- bütünlük algoritmalarını
karşılaştırır ve ortak desteklenen seçenekler üzerinden güvenli oturum oluşturur.
Yeni eklenen içerikte bu süreç sürüm anlaşması, anahtar değişimi, sunucu doğrulaması ve kullanıcı doğrulaması şeklinde detaylandırılmıştır.
5. Sunucu Kimliğinin Doğrulanması
İlk bağlantıda aşağıdakine benzer bir mesaj görülebilir:
The authenticity of host 'vkk-sftp01' can't be established.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Bu noktada istemci sunucunun SSH host key parmak izini doğrulamaktadır.
Fingerprint kabul edildiğinde bilgi istemcinin:
~/.ssh/known_hosts
dosyasına kaydedilir. Sonraki bağlantılarda host key değişirse kullanıcı uyarılır. Bu mekanizma sahte bir sunucuya yönlendirme veya ortadaki adam saldırılarının fark edilmesine yardımcı olur.
6. Kullanıcı Kimlik Doğrulaması
SSH bağlantısı şifreli hale geldikten sonra kullanıcı doğrulaması gerçekleştirilir.
Bu işlem:
Username + Password
veya daha güvenli olarak:
Username + SSH Public Key
ile yapılabilir. Kimlik doğrulaması başarılı olduğunda kullanıcıya doğrudan Linux shell verilmek yerine yapılandırmamızdaki:
ForceCommand internal-sftp
direktifi uygulanacaktır. Böylece kullanıcı yalnızca SFTP işlemleri yapabilecektir.
7. internal-sftp Nedir?
OpenSSH iki farklı SFTP sunucu mekanizması sunabilir:
/usr/lib/openssh/sftp-server
ve:
internal-sftp
internal-sftp, SFTP servisini doğrudan SSH daemon içerisinde çalıştırır.
Chroot kullanılan ortamlarda özellikle avantajlıdır; harici sftp-server bileşeninin ve ilgili kütüphanelerin chroot içerisine ayrıca yerleştirilmesi gereksinimini ortadan kaldırır. Yeni içerikte de chroot tabanlı yapı için internal-sftp tercih edilmiştir.
Bu makaledeki yapılandırmada:
Subsystem sftp internal-sftp
kullanılacaktır.
8. Neden SFTP Kullanılmalıdır?
Şifreli Veri Transferi
SFTP bağlantısı SSH üzerinden çalıştığından kullanıcı kimlik bilgileri ve dosya transferi şifrelenir.
Tek Port Kullanımı
FTP veri ve kontrol bağlantıları için farklı bağlantılar kullanabilirken SFTP bütün trafiği tek SSH bağlantısından geçirir.
Varsayılan olarak yalnızca:
TCP/22
yeterlidir. Bu durum firewall ve NAT yapılandırmasını ciddi şekilde basitleştirir.
Ek FTP Servisi Gerektirmemesi
Ubuntu Server üzerinde OpenSSH zaten bulunabilir veya kolaylıkla kurulabilir. Dolayısıyla;
vsftpd
ProFTPD
gibi ayrı bir FTP daemon’ı çalıştırmak zorunda kalınmaz.
SSH Key Desteği
Parola yerine SSH public/private key kullanılabilir. Özellikle;
- otomasyon,
- yedekleme,
- CI/CD,
- sistemler arası entegrasyon
- senaryolarında oldukça faydalıdır.
Kullanıcı İzolasyonu
OpenSSH ChrootDirectory özelliği sayesinde bir kullanıcının sistemin geri kalanını görmesi engellenebilir.
Örneğin vkk-sftpuser kullanıcısı:
/etc
/root
/var
/home
/opt
dizinlerine erişemeyecektir. Kullanıcı yalnızca kendi chroot alanını görecektir.
9. Tasarlanacak SFTP Mimarisi
Kuracağımız yapı:
/
├── sfp-data/
│ │
│ └── vkk-sftpuser/
│ │
│ ├── upload/
│ └── download/
│
├── home/
│ └── vkk-sftpuser/
│ └── .ssh/
│
└── etc/
└── ssh/
└── sshd_config
Sahiplikler:
/sfp-data
root:root
755
/sfp-data/vkk-sftpuser
root:root
755
/sfp-data/vkk-sftpuser/upload
vkk-sftpuser:vkk-sftpusers
750
Bu tasarımın temel nedeni OpenSSH chroot güvenlik gereksinimidir. Chroot olarak kullanılan dizin ve ona kadar olan üst dizinler root tarafından sahiplenilmeli ve kullanıcı tarafından yazılabilir olmamalıdır. Kaynak doküman da chroot dizini ve üst dizinler için bu sahiplik koşulunu özellikle vurgulamaktadır. Dolayısıyla;
sudo chown vkk-sftpuser:vkk-sftpuser /sfp-data/vkk-sftpuser
şeklinde bir işlem yapılmamalıdır. Kullanıcıya yazma etkisi alt dizin üzerinden verilecektir.
10. Kurulum Öncesi Gereksinimler
Aşağıdaki gereksinimlerin mevcut olduğu varsayılmaktadır:
- Ubuntu Server 20.04 / 22.04 / 24.04 LTS
- sudo yetkili yönetici hesabı
- sunucuya SSH erişimi
- ağ üzerinde TCP/22 erişimi
- DNS veya IP bağlantısı
- paket deposuna erişim
11. Sunucu Adının Yapılandırılması
Sunucu adı kontrol edilir:
hostnamectl
Gerekirse:
sudo hostnamectl set-hostname vkk-sftp01
uygulanır.

Ardından:
sudo nano /etc/hosts
dosyasında:
127.0.0.1 localhost
127.0.1.1 vkk-sftp01
tanımlaması yapılabilir.

Kontrol:
hostname
Beklenen:
vkk-sftp01

12. Ubuntu Paketlerinin Güncellenmesi
Paket indeksini güncelleyin:
sudo apt update -y
Ardından kurumun güncelleme/değişiklik yönetimi politikası uygunsa;
sudo apt upgrade -y
çalıştırılabilir. Üretim sunucularında toplu paket yükseltmelerinin bakım penceresinde gerçekleştirilmesi daha uygun olacaktır.

13. OpenSSH Server Kurulumu
OpenSSH Server kurulur:
sudo apt install openssh-server -y

Kurulumu kontrol etmek için:
dpkg -l | grep openssh

SSH servisinin durumu:
sudo systemctl status ssh

Beklenen:
Active: active (running)
Servis çalışmıyorsa:
sudo systemctl start ssh
Sistem başlangıcında otomatik çalışması için:
sudo systemctl enable ssh

Dinlenen portu kontrol etmek için:
sudo ss -lntp | grep sshd

14. SSH Yapılandırmasının Yedeğinin Alınması
sshd_config üzerinde değişiklik yapmadan önce mutlaka yedek alınmalıdır:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.$(date +%Y%m%d-%H%M).bak

Uzak sunucu üzerinde çalışılıyorsa mevcut SSH oturumunun kapatılmaması önerilir. Yeni konfigürasyon ayrı bir terminalden doğrulanmadan mevcut oturum sonlandırılmamalıdır.
15. SFTP Alt Sisteminin Kontrol Edilmesi
Mevcut yapılandırma:
sudo grep -n "Subsystem.*sftp" /etc/ssh/sshd_config
ile kontrol edilir.

Örneğin:
Subsystem sftp /usr/lib/openssh/sftp-server
görülüyorsa yapılandırma.
sudo nano /etc/ssh/sshd_config
ile açılır.

Eski satır:
#Subsystem sftp /usr/lib/openssh/sftp-server
şeklinde yorum satırına alınabilir ve:
Subsystem sftp internal-sftp
tanımlanabilir.
16. SFTP Grubunun Oluşturulması
Tek kullanıcı bulunsa bile grup tabanlı yapı ileride yönetimi kolaylaştırır.
sudo groupadd vkk-sftpusers
Kontrol:
getent group vkk-sftpusers

Grup tabanlı tasarım sayesinde yeni kullanıcılar eklendiğinde sshd_config içerisinde yeni Match User blokları tanımlamak yerine yalnızca gruba üyelik verilmesi yeterli olacaktır.
17. SFTP Kullanıcısının Oluşturulması
Kullanıcı:
sudo useradd -m -d /home/vkk-sftpuser -s /usr/sbin/nologin -G vkk-sftpusers vkk-sftpuser
ile oluşturulur. Komuttaki parametrelerin amacı ve kullanımı;
| Parametre | Açıklama |
|---|---|
-m | Kullanıcı home dizinini oluşturur |
-d | Home dizinini tanımlar |
-s /usr/sbin/nologin | Normal shell girişini engeller |
-G vkk-sftpusers | Kullanıcıyı SFTP grubuna ekler |
Parola belirlenir:
sudo passwd vkk-sftpuser
Kontrol:
id vkk-sftpuser
ve:
getent passwd vkk-sftpuser

Kullanıcı:
vkk-sftpusers
grubunda bulunmalı ve shell:
/usr/sbin/nologin
olarak görünmelidir.
18. SFTP Dizin Yapısının Oluşturulması
Ana dizin:
sudo mkdir -p /sfp-data
sudo chown root:root /sfp-data
sudo chmod 755 /sfp-data
Kullanıcının chroot dizini:
sudo mkdir -p /sfp-data/vkk-sftpuser
sudo chown root:root /sfp-data/vkk-sftpuser
sudo chmod 755 /sfp-data/vkk-sftpuser
Yazılabilir upload alanı:
sudo mkdir -p /sfp-data/vkk-sftpuser/upload
Sahiplik:
sudo chown vkk-sftpuser:vkk-sftpusers sfp-data/vkk-sftpuser/upload

Yetki:
sudo chmod 750 /sfp-data/vkk-sftpuser/upload
İstenirse download alanı da oluşturulabilir:
sudo mkdir -p /sfp-data/vkk-sftpuser/download
sudo chown vkk-sftpuser:vkk-sftpusers /sfp-data/vkk-sftpuser/download
sudo chmod 750 /sfp-data/vkk-sftpuser/download

Sonuç:
ls -ld /sfp-data
ls -ld /sfp-data/vkk-sftpuser
ls -la /sfp-data/vkk-sftpuser
yaklaşık olarak şöyle görünmelidir:

Yeni eklenen dokümanda da aynı root-owned chroot + user-owned writable subdirectory modeli kullanılmaktadır.
19. SFTP-Only SSH Yapılandırması
Dosyayı açın:
sudo nano /etc/ssh/sshd_config

Dosyanın sonunda aşağıdaki yapılandırmayı ekkeyiniz.
# =====================================================
# vkk-sftp01 - SFTP Configuration
# =====================================================
Match Group vkk-sftpusers
ChrootDirectory /sfp-data/%u
ForceCommand internal-sftp -d /upload
PasswordAuthentication yes
KbdInteractiveAuthentication yes
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no

Bu yapıdaki:
%u
değeri otomatik olarak kullanıcı adına dönüşür. Dolayısıyla:
ChrootDirectory /sfp-data/%u
vkk-sftpuser için:
/sfp-data/vkk-sftpuser
haline gelir. Kaynak içerikte Match Group, %u, ForceCommand internal-sftp ve forwarding kısıtlarının birlikte kullanılması önerilmektedir.
ForceCommand
ForceCommand internal-sftp -d /upload
kullanıcının Linux shell açmasını engeller ve SFTP bağlantısından sonra doğrudan ;
/upload
dizininde başlamasını sağlar.
Buradaki /upload, gerçek Linux sisteminde:
/sfp-data/vkk-sftpuser/upload
anlamına gelir.
20. SSH Yapılandırmasının Doğrulanması
SSH servisini yeniden başlatmadan önce:
sudo sshd -t
çalıştırılmalıdır. Hiçbir çıktı alınmaması:syntax OK anlamına gelir. Kaynak doküman da yapılandırma değişikliğinden sonra servis yeniden başlatılmadan önce sshd -t ile doğrulama yapılmasını önermektedir.
Kullanıcıya uygulanacak efektif ayarları kontrol etmek için aşağıdaki komut kullanılır.
sudo sshd -T -C user=vkk-sftpuser | grep -Ei "chroot|forcecommand|forwarding|permittunnel"

Özellikle:
chrootdirectory /sfp-data/%u
forcecommand internal-sftp -d /upload
değerleri kontrol edilmelidir.
21. SSH Servisinin Yeniden Başlatılması
Yapılandırma doğrulandıktan sonra;
sudo systemctl restart ssh
Servis durumu:
sudo systemctl status ssh
ile kontrol edilir.
Beklenen çıktı aşağıdaki gibidir.
Active: active (running)

22. Firewall Yapılandırması
UFW kullanılıyorsa SSH bağlantısını açmadan firewall etkinleştirilmemelidir. Öncelikle:
sudo ufw allow 22/tcp
ardından:
sudo ufw status
kontrol edilir. Sonrasında gerekiyorsa:
sudo ufw enable
kullanılabilir. Daha güvenli yaklaşım erişimi belirli kaynaklarla sınırlandırmaktır. Örneğin:
sudo ufw allow from 10.20.0.0/16 to any port 22 proto tcp
Belirli bir uzak IP için:
sudo ufw allow from 203.0.113.45 to any port 22 proto tcp

Bu yaklaşım özellikle internete açık SFTP sistemlerinde tercih edilmelidir. Eklenen içerikte de SFTP’nin tek TCP/22 bağlantısı kullandığı ve kaynak IP bazlı firewall kısıtlamasının önerildiği belirtilmektedir.
23. Ağ Bağlantısının Test Edilmesi
İstemciden yapılcak testler
a) Linux işletim sistemi için;
nc -zv vkk-sftp01 22
kullanılabilir.
Başarılıysa:
Connection to vkk-sftp01 22 port [tcp/ssh] succeeded!
benzeri sonuç alınacaktır.
b) Windows işletm sistemi için;
tnc vkk-sftp01 22
24. SSH Shell Erişiminin Engellendiğinin Test Edilmesi
Önce kullanıcının normal SSH terminaline erişemediğini doğrulayınız.
ssh vkk-sftpuser@vkk-sftp01
Beklenen sonuç:
This service allows sftp connections only.
Connection to vkk-sftp01 closed.
Bu mesaj hata değil istenen davranıştır. Kaynak dokümanda da SSH girişinin engellenip SFTP oturumunun açık bırakılması yapılandırmanın doğrulama adımı olarak kullanılmaktadır.
25. SFTP Bağlantı Testi
Bağlantı:
sftp vkk-sftpuser@vkk-sftp01
IP ile:
sftp vkk-sftpuser@192.168.10.50
Başarılı bağlantıda:
Connected to vkk-sftp01.
sftp>
görülmelidir.
26. Chroot Kontrolü
Bağlantı kurulduktan sonra:
sftp> pwd
-d /upload kullandığımız için:
Remote working directory: /upload
beklenir.
Chroot kökünü kontrol etmek için:
sftp> cd /
sftp> pwd
çıktısı:
Remote working directory: /
olacaktır.
Ancak bu /, sunucunun gerçek:
/
dizini değildir.
Gerçekte:
/sfp-data/vkk-sftpuser
dizinidir.
Listeleme:
sftp> ls
sonucunda:
download
upload
görülmesi beklenir.
Şimdi:
sftp> cd ..
sftp> pwd
denendiğinde kullanıcı chroot dışına çıkamamalıdır. Yeni içerikte de bu test, chroot izolasyonunun temel doğrulama yöntemi olarak kullanılmıştır.
27. Dosya Yükleme Testi
İstemci üzerinde:
echo "SFTP Test" > test.txt
oluşturun.
SFTP oturumunda:
sftp> cd /upload
sftp> put test.txt
Ardından:
sftp> ls -l
ile kontrol edin.
Sunucudan:
sudo ls -la /sfp-data/vkk-sftpuser/upload
çalıştırılabilir.
28. Dosya İndirme Testi
SFTP oturumunda:
sftp> get test.txt
Dosyayı farklı isimle indirmek için:
sftp> get test.txt test-download.txt
29. Sık Kullanılan SFTP Komutları
| Komut | İşlev |
|---|---|
pwd | Uzak mevcut dizini gösterir |
ls | Uzak dizini listeler |
cd | Uzak dizin değiştirir |
lpwd | Yerel dizini gösterir |
lls | Yerel dosyaları listeler |
lcd | Yerel dizini değiştirir |
put | Dosya yükler |
get | Dosya indirir |
mkdir | Uzak dizin oluşturur |
rmdir | Uzak dizin siler |
rm | Uzak dosya siler |
rename | Yeniden adlandırır |
chmod | Dosya izinlerini değiştirir |
df -h | Uzak dosya sistemindeki alan bilgisini gösterir |
bye | SFTP bağlantısını kapatır |
30. WinSCP ile Bağlantı
Windows üzerinde WinSCP kullanılacaksa:
| Alan | Değer |
|---|---|
| File protocol | SFTP |
| Hostname | vkk-sftp01 |
| Port | 22 |
| Username | vkk-sftpuser |
| Password | Tanımlanan parola |
FileZilla kullanılacaksa bağlantı protokolü:
SFTP - SSH File Transfer Protocol
olarak seçilmelidir.



31. SSH Anahtarı ile Kimlik Doğrulama
Üretim sistemlerinde mümkünse parola yerine SSH public key doğrulaması tercih edilmelidir.
İstemcide:
ssh-keygen -t ed25519 -C "vkk-sftpuser@vkk-sftp01"
çalıştırılır. Public key:
cat ~/.ssh/id_ed25519.pub
ile görüntülenir.
32. Public Key’in Sunucuya Yerleştirilmesi
Sunucuda:
sudo mkdir -p /home/vkk-sftpuser/.ssh
sudo touch /home/vkk-sftpuser/.ssh/authorized_keys
Public key dosyaya eklenir.
Yetkiler:
sudo chown -R \
vkk-sftpuser:vkk-sftpusers \
/home/vkk-sftpuser/.ssh
sudo chmod 700 /home/vkk-sftpuser/.ssh
sudo chmod 600 \
/home/vkk-sftpuser/.ssh/authorized_keys
Yeni içerikte anahtar dosyasının chroot dışındaki gerçek home dizininde tutulması ve izinlerin 700/600 olarak ayarlanması önerilmektedir.
33. Sadece SSH Key Kullanılacak Yapılandırmak
Anahtar erişimi başarıyla test edildikten sonra Match bloğu;
Match Group vkk-sftpusers
ChrootDirectory /sfp-data/%u
ForceCommand internal-sftp -d /upload
AuthorizedKeysFile /home/%u/.ssh/authorized_keys
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
şeklinde düzenlenebilir. Parola erişimini kapatmadan önce SSH key bağlantısı mutlaka doğrulanmalıdır.
Bağlantı testi:
sftp -i ~/.ssh/id_ed25519 vkk-sftpuser@vkk-sftp01
34. Güvenlik Sertleştirme Önerileri
Root SSH Girişini Kapatınız.
Global bölümde:
PermitRootLogin no
kullanılması önerilir.
sudo nano /etc/ssh/sshd_config

Parola Yerine SSH Key Tercih Ediniz.
Anahtar doğrulaması doğrulandıktan sonra:
PasswordAuthentication no
PermitEmptyPasswords no
kullanılabilir.
35. Fail2Ban Kurulumu
sudo apt install fail2ban -y

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Basit yapılandırma:
[sshd]
enabled = true
port = 22
maxretry = 4
findtime = 600
bantime = 3600
Kontrol:
sudo fail2ban-client status sshd

Fail2Ban ve firewall/IP kısıtlaması kaynak dokümanlarda ek güvenlik önlemleri arasında önerilmektedir.
36. SSH Portunun Değiştirilmesi
Örneğin:
Port 2222
kullanılabilir. Ancak port değiştirmek tek başına gerçek bir güvenlik kontrolü değildir. Daha çok internet üzerindeki otomatik tarama ve log gürültüsünü azaltabilir. Port değiştirilirse firewall:
sudo ufw allow 2222/tcp
şeklinde güncellenmelidir.
37. Disk Doluluk Riskinin Yönetilmesi
SFTP kullanıcısının sınırsız dosya yüklemesi diskin tamamen dolmasına neden olabilir.
Bu nedenle üretim ortamlarında:
- ayrı filesystem,
- disk quota,
- kapasite alarmı,
- log ve dosya retention politikası
kullanılması tavsiye edilir. Quota paketleri:
sudo apt install quota -y
ile kurulabilir.

Quota yapılandırması kullanılan filesystem tasarımına göre yapılmalıdır.
38. Güncelleme ve Yedekleme
Düzenli olarak:
sudo apt update
çalıştırılmalı ve güvenlik yamaları kurum prosedürlerine göre uygulanmalıdır.
Ayrıca:
/sfp-data
dizininin kendisi de yedeklenmelidir.
Çünkü SFTP sunucusu başka sistemlerin yedeklerini tutuyor olsa bile SFTP sunucusunun kendisi yedekleme stratejisinin dışında bırakılmamalıdır.
39. Loglama
Canlı SSH logları:
sudo journalctl -f -u ssh

Ubuntu sürümüne göre:
sudo tail -f /var/log/auth.log

kullanılabilir.
Yalnızca SSH:
sudo tail -f /var/log/auth.log | grep sshd

40. Ayrıntılı SSH Loglama
sshd_config içerisinde:
LogLevel VERBOSE
kullanılabilir.
Bu özellikle:
- başarısız girişlerin,
- kullanıcıların,
- SSH key fingerprintlerinin,
- bağlantı kaynaklarının
- takibinde yararlıdır. Eklenen içerikte de
journalctl,/var/log/auth.logveLogLevel VERBOSEmerkezi denetim açısından önerilmektedir.
41. Dosya İşlemlerinin Loglanması
Dosya yükleme, indirme ve silme gibi SFTP işlemlerinin daha ayrıntılı izlenmesi isteniyorsa birleşik yapılandırmada internal-sftp log parametreleri doğrudan zorunlu komuta eklenebilir:
ForceCommand internal-sftp -d /upload -l INFO -f AUTH
Böylece özellikle denetim gerektiren ortamlarda SFTP faaliyetlerinin takibi kolaylaşır.
42. Sorun Giderme
SFTP sorunlarında ilk bakılması gereken iki nokta:
Sunucu tarafı:
sudo tail -100 /var/log/auth.log
İstemci tarafı:
sftp -vvv vkk-sftpuser@vkk-sftp01
olmalıdır.
43. bad ownership or modes for chroot directory
Örneğin:
fatal: bad ownership or modes for chroot directory
hatası alınıyorsa:
ls -ld /sfp-data
ls -ld /sfp-data/vkk-sftpuser
kontrol edilmelidir.
Beklenen:
root root /sfp-data
root root /sfp-data/vkk-sftpuser
Düzeltme:
sudo chown root:root /sfp-data
sudo chmod 755 /sfp-data
sudo chown root:root /sfp-data/vkk-sftpuser
sudo chmod 755 /sfp-data/vkk-sftpuser
Bu hata kaynak dokümanlarda da en yaygın chroot problemlerinden biri olarak gösterilmektedir.
44. Upload Sırasında Permission Denied
Permission denied
hatası alınıyorsa:
ls -ld /sfp-data/vkk-sftpuser/upload
kontrol edilir.
Gerekirse:
sudo chown vkk-sftpuser:vkk-sftpusers /sfp-data/vkk-sftpuser/upload
sudo chmod 750 /sfp-data/vkk-sftpuser/upload
uygulanır.
Kullanıcının chroot kökü olan:
/
konumuna dosya yükleyememesi ise beklenen davranıştır.
45. SSH Servisine Bağlanılamıyor
Kontrol:
sudo systemctl status ssh
Port:
sudo ss -lntp | grep ':22'
Firewall:
sudo ufw status
İstemci:
nc -zv vkk-sftp01 22
ile doğrulanmalıdır.
46. Host Key Verification Failed
Sunucu yeniden kurulmuş veya SSH host key değişmişse:
Host key verification failed
hatası alınabilir.
Eski kayıt:
ssh-keygen -R vkk-sftp01
ile kaldırılabilir.
IP ile bağlanılıyorsa:
ssh-keygen -R 192.168.10.50
kullanılabilir.
Ancak üretim ortamında host key değişiminin nedeni doğrulanmadan uyarı göz ardı edilmemelidir.
47. Match Bloğunun Çalışıp Çalışmadığını Kontrol Etmek
sudo sshd -T -C user=vkk-sftpuser
çok faydalı bir troubleshooting komutudur.
Daha kısa çıktı:
sudo sshd -T -C user=vkk-sftpuser \
| grep -Ei "chroot|forcecommand|forwarding|password"
ile alınabilir.
48. Dizin Yolundaki Tüm Yetkileri Kontrol Etmek
Chroot sorunlarında en faydalı komutlardan biri:
namei -l /sfp-data/vkk-sftpuser/upload
komutudur.
Bu komut:
/
sfp-data
vkk-sftpuser
upload
yolundaki her dizinin sahibini ve izinlerini tek tek gösterir.
Eklenen dokümanda da namei -l chroot izin problemlerinin hızlı teşhisi için önerilmektedir.
49. Genel Sorun Giderme Tablosu
| Belirti | Kontrol edilmesi gereken |
|---|---|
| Connection refused | SSH servisi / port |
| Connection timed out | Firewall / routing |
| Permission denied | Kullanıcı/parola/key |
| bad ownership | Chroot sahipliği |
| Upload permission denied | Upload dizini sahipliği |
| SSH shell açılıyor | Match Group / ForceCommand |
| SFTP bağlanmıyor | internal-sftp ayarı |
| Key çalışmıyor | authorized_keys / 700 / 600 |
| Host key error | known_hosts |
| Dizin boş | Upload/download dizinleri |
| Restart başarısız | sshd -t |
50. Birden Fazla SFTP Kullanıcısı
Grup tabanlı tasarımın en önemli avantajı budur.
Örneğin ikinci kullanıcı:
sudo useradd -m -d /home/vkk-sftpuser02 -s /usr/sbin/nologin -G vkk-sftpusers vkk-sftpuser02
Parola:
sudo passwd vkk-sftpuser02
Dizin:
sudo mkdir -p /sfp-data/vkk-sftpuser02/upload
Chroot:
sudo chown root:root /sfp-data/vkk-sftpuser02
sudo chmod 755 /sfp-data/vkk-sftpuser02
Upload:
sudo chown \
vkk-sftpuser02:vkk-sftpusers \
/sfp-data/vkk-sftpuser02/upload
sudo chmod 750 /sfp-data/vkk-sftpuser02/upload
Mevcut:
ChrootDirectory /sfp-data/%u
kuralı otomatik olarak:
/sfp-data/vkk-sftpuser02
dizinini kullanacaktır.
Dolayısıyla sshd_config yeniden değiştirilmez. Bu genişletilebilir yapı yeni içeriğin önemli kazanımlarından biridir.
51. VMware Yedekleme Sistemleri İçin Not
SFTP sunucusu;
- VMware vCenter,
- NSX Manager,
- SDDC Manager,
- VCF bileşenleri
gibi sistemlerin dosya tabanlı yedekleme hedefi olarak da kullanılabilir.
Ancak bazı eski ürün veya sürümlerde modern OpenSSH algoritmalarıyla uyumluluk sorunları yaşanabilir.
Böyle bir durumda algoritma veya kullanıcı shell ayarlarını doğrudan gevşetmek yerine öncelikle:
- VMware ürün sürümü,
- kullanılan SSH algoritması,
/var/log/auth.log,- istemci tarafı backup logları
incelenmelidir.
Uyumluluk için eski ssh-rsa gibi algoritmaların açılması gerekiyorsa bu yalnızca gerçek ihtiyaç doğrulandıktan sonra ve mümkünse kaynak IP kısıtlaması ile uygulanmalıdır. Ek içerikte VMware bileşenlerinin bazı sürümlerinde böyle bir uyumluluk ihtimali ayrıca not edilmiştir.
52. Önerilen Nihai SSH Yapılandırması
Parola ile başlayan güvenli temel yapı:
Subsystem sftp internal-sftp
# =====================================================
# vkk-sftp01
# SFTP-only users
# =====================================================
Match Group vkk-sftpusers
ChrootDirectory /sfp-data/%u
ForceCommand internal-sftp -d /upload -l INFO -f AUTH
PasswordAuthentication yes
KbdInteractiveAuthentication yes
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
SSH key’e geçildikten sonra:
Match Group vkk-sftpusers
ChrootDirectory /sfp-data/%u
ForceCommand internal-sftp -d /upload -l INFO -f AUTH
AuthorizedKeysFile /home/%u/.ssh/authorized_keys
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
53. Kurulum Sonrası Kontrol Listesi
Kurulum tamamlandıktan sonra aşağıdaki kontrollerin tamamının başarılı olması önerilir:
| Kontrol | Beklenen |
|---|---|
| Hostname | vkk-sftp01 |
| SSH servisi | Active |
| TCP/22 | Listening |
| SFTP Subsystem | internal-sftp |
| Kullanıcı | vkk-sftpuser |
| Grup | vkk-sftpusers |
/sfp-data | root:root / 755 |
| Kullanıcı chroot | root:root / 755 |
| Upload | vkk-sftpuser sahipliğinde |
sshd -t | Hatasız |
| SSH shell | Engellenmiş |
| SFTP login | Başarılı |
| Chroot dışına çıkış | Başarısız |
| Upload | Başarılı |
| Download | Başarılı |
| Firewall | Kaynaklara uygun |
| Loglama | Çalışıyor |
| Backup | Planlanmış |
Bu yapılandırma sonucunda vkk-sftp01 Ubuntu Server üzerinde OpenSSH tabanlı, güvenli ve genişletilebilir bir SFTP altyapısı elde edilmiş olacaktır.
vkk-sftpuser hesabı normal bir Linux shell oturumu açamayacak, sunucunun gerçek dosya sistemi üzerinde /etc, /var, /root, /home gibi alanlara ulaşamayacak ve yalnızca kendisine ayrılmış:
/sfp-data/vkk-sftpuser
chroot alanı içerisinde çalışacaktır.
Dosya yükleme ve indirme işlemleri ise:
/sfp-data/vkk-sftpuser/upload
ve gerektiğinde:
/sfp-data/vkk-sftpuser/download
alanları üzerinden gerçekleştirilecektir.
Bu yapıdaki en kritik güvenlik prensipleri şunlardır:
- SFTP için
internal-sftpkullanılması, - kullanıcının ayrı bir hesapla çalıştırılması,
- kullanıcıların
vkk-sftpusersgrubuyla yönetilmesi, - chroot dizinlerinin
root:rootsahipliğinde tutulması, - yazma yetkisinin yalnızca alt dizinlere verilmesi,
ForceCommand internal-sftpile terminal erişiminin kapatılması,- TCP forwarding, agent forwarding, tunneling ve X11 forwarding özelliklerinin kapatılması,
- her SSH değişikliğinden önce
sshd -tile kontrol yapılması, - mümkünse parola yerine SSH public key kullanılması,
- firewall erişiminin güvenilir kaynak IP’lerle sınırlandırılması,
- logların ve disk kapasitesinin düzenli izlenmesidir.
Bu haliyle metin, önceki içeriğe göre hem tek kullanıcı kurulumu için uygulanabilir, hem de ileride çok kullanıcılı kurumsal SFTP altyapısına dönüştürülebilecek şekilde daha tutarlı bir yapıya kavuşmuş oldu. Eklediğin ikinci içerikteki grup tabanlı tasarım, kullanıcı başına chroot yapısı, detaylı doğrulama adımları ve troubleshooting bölümleri bu amaçla özellikle korundu.