Ubuntu Server Üzerinde Güvenli SFTP Sunucusu Kurulumu ve Yapılandırılması

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şenDeğer
Sunucuvkk-sftp01
İşletim sistemiUbuntu Server
SFTP servisiOpenSSH / internal-sftp
SFTP kullanıcısıvkk-sftpuser
SFTP grubuvkk-sftpusers
Ana SFTP veri alanı/sfp-data/
Kullanıcı chroot alanı/sfp-data/vkk-sftpuser/
Yazılabilir alan/sfp-data/vkk-sftpuser/upload/
ProtokolSFTP
Varsayılan portTCP/22
Terminal erişimiKapalı
Kullanıcı izolasyonuChroot

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.

ÖzellikFTPFTPSSFTP
Temel protokolFTPFTPSSH
ŞifrelemeYokTLS/SSLSSH
Kimlik bilgilerinin korunmasıYokVarVar
Veri şifrelemeYokVarVar
Varsayılan port2121/99022
Veri bağlantısıEk portlar gerekirEk portlar gerekebilirTek bağlantı
SSH anahtarıYokTipik olarak yokVar
Firewall yönetimiDaha karmaşıkDaha karmaşıkDaha kolay
Chroot entegrasyonuSunucuya 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ı;

ParametreAçıklama
-mKullanıcı home dizinini oluşturur
-dHome dizinini tanımlar
-s /usr/sbin/nologinNormal shell girişini engeller
-G vkk-sftpusersKullanı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
pwdUzak mevcut dizini gösterir
lsUzak dizini listeler
cdUzak dizin değiştirir
lpwdYerel dizini gösterir
llsYerel dosyaları listeler
lcdYerel dizini değiştirir
putDosya yükler
getDosya indirir
mkdirUzak dizin oluşturur
rmdirUzak dizin siler
rmUzak dosya siler
renameYeniden adlandırır
chmodDosya izinlerini değiştirir
df -hUzak dosya sistemindeki alan bilgisini gösterir
byeSFTP bağlantısını kapatır

30. WinSCP ile Bağlantı

Windows üzerinde WinSCP kullanılacaksa:

AlanDeğer
File protocolSFTP
Hostnamevkk-sftp01
Port22
Usernamevkk-sftpuser
PasswordTanı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.log ve LogLevel VERBOSE merkezi 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

BelirtiKontrol edilmesi gereken
Connection refusedSSH servisi / port
Connection timed outFirewall / routing
Permission deniedKullanıcı/parola/key
bad ownershipChroot sahipliği
Upload permission deniedUpload dizini sahipliği
SSH shell açılıyorMatch Group / ForceCommand
SFTP bağlanmıyorinternal-sftp ayarı
Key çalışmıyorauthorized_keys / 700 / 600
Host key errorknown_hosts
Dizin boşUpload/download dizinleri
Restart başarısızsshd -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:

  1. VMware ürün sürümü,
  2. kullanılan SSH algoritması,
  3. /var/log/auth.log,
  4. 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:

KontrolBeklenen
Hostnamevkk-sftp01
SSH servisiActive
TCP/22Listening
SFTP Subsysteminternal-sftp
Kullanıcıvkk-sftpuser
Grupvkk-sftpusers
/sfp-dataroot:root / 755
Kullanıcı chrootroot:root / 755
Uploadvkk-sftpuser sahipliğinde
sshd -tHatasız
SSH shellEngellenmiş
SFTP loginBaşarılı
Chroot dışına çıkışBaşarısız
UploadBaşarılı
DownloadBaşarılı
FirewallKaynaklara uygun
LoglamaÇalışıyor
BackupPlanlanmış

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-sftp kullanılması,
  • kullanıcının ayrı bir hesapla çalıştırılması,
  • kullanıcıların vkk-sftpusers grubuyla yönetilmesi,
  • chroot dizinlerinin root:root sahipliğinde tutulması,
  • yazma yetkisinin yalnızca alt dizinlere verilmesi,
  • ForceCommand internal-sftp ile terminal erişiminin kapatılması,
  • TCP forwarding, agent forwarding, tunneling ve X11 forwarding özelliklerinin kapatılması,
  • her SSH değişikliğinden önce sshd -t ile 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.