Ubuntu 18.04 Üzerinde Shell Erişimi Olmadan SFTP Nasıl Etkinleştirilir?
Modern sunucu yönetiminde güvenlik ve erişim kontrolü kritik öneme sahiptir. Özellikle dosya transferi söz konusu olduğunda, kullanıcılara tam kabuk (shell) erişimi vermeden güvenli bir şekilde dosya alışverişi yapmalarını sağlamak yaygın bir gereksinimdir. Bu makale, Ubuntu 18.04 işletim sistemi üzerinde Secure File Transfer Protocol (SFTP) hizmetini, kullanıcılara SSH kabuk erişimi vermeden nasıl yapılandıracağınızı adım adım açıklamaktadır. Bu yöntem, web sunucuları, uygulama ortamları veya üçüncü taraf entegrasyonları gibi senaryolarda dosya yönetimi için ideal bir çözüm sunar.
SFTP, SSH (Secure Shell) protokolü üzerinden çalışan güvenli bir dosya transfer mekanizmasıdır. Geleneksel FTP’nin aksine, SFTP tüm veriyi şifreleyerek transfer eder ve kimlik doğrulama için SSH’nin güçlü mekanizmalarını kullanır. Ancak, bir kullanıcıya SSH erişimi vermek, o kullanıcının sunucu üzerinde komut çalıştırma yeteneğine sahip olması anlamına gelir ki bu, çoğu zaman istenmeyen bir durumdur. Bu nedenle, SFTP’yi kabuk erişimi olmadan yapılandırmak, hem güvenlik hem de yönetim kolaylığı açısından büyük avantajlar sağlar.
Neden Shell Erişimi Olmadan SFTP?
Bir sunucu üzerinde kullanıcılara dosya transferi yeteneği sağlamanın birçok yolu vardır, ancak bunların hepsi aynı güvenlik seviyesini sunmaz. SFTP’yi kabuk erişimi olmadan yapılandırmak, özellikle aşağıdaki senaryolarda tercih edilen bir yöntemdir:
* Güvenlik: Kullanıcıların sunucuda rastgele komutlar çalıştırmasını engelleyerek potansiyel güvenlik açıklarını minimize eder. Bu, özellikle dışarıdan erişim sağlayan veya kısıtlı yetkilere sahip olması gereken kullanıcılar için önemlidir.
* İzolasyon (Chroot Jail): Kullanıcıları kendi belirlenmiş dizinleriyle (chroot jail) sınırlar. Bu sayede kullanıcılar, dosya sisteminin geri kalanını göremez veya erişemez, böylece sistemin bütünlüğü korunur.
* Uyumluluk: Bazı güvenlik standartları ve uyumluluk gereksinimleri, sunucu erişiminin en az ayrıcalık ilkesine göre yapılandırılmasını zorunlu kılar. SFTP’nin bu şekilde yapılandırılması, bu gereksinimleri karşılamaya yardımcı olur.
* Yönetim Kolaylığı: Belirli görevler için (örneğin, bir web sitesinin dosyalarını güncellemek) tam SSH erişimi gerektirmeyen kullanıcılara sadece ihtiyaç duydukları erişimi sağlamak, yönetim karmaşıklığını azaltır.
* Hata Riskinin Azaltılması: Kullanıcıların yanlışlıkla veya bilerek kritik sistem dosyalarını değiştirmesi veya silmesi riskini ortadan kaldırır.
Bu makalede ele alacağımız yöntem, OpenSSH sunucusunun ChrootDirectory ve ForceCommand internal-sftp özelliklerini kullanarak SFTP kullanıcılarını izole etmeye odaklanacaktır.
Ön Koşullar
Bu rehbere başlamadan önce aşağıdaki maddelerin hazır olduğundan emin olun:
* Ubuntu 18.04 Sunucusu: Yönetimsel erişime sahip (sudo yetkileri) bir Ubuntu 18.04 sunucusu.
* OpenSSH Sunucusu: SSH sunucusunun kurulu ve çalışır durumda olması. Genellikle Ubuntu kurulumlarında varsayılan olarak gelir. Kontrol etmek için systemctl status ssh komutunu kullanabilirsiniz. Eğer kurulu değilse, sudo apt update && sudo apt install openssh-server komutuyla kurabilirsiniz.
* Temel Linux Bilgisi: Dizinler, izinler, kullanıcılar ve grup yönetimi hakkında temel bilgi.
* Sudo Yetkileri: Tüm yapılandırma adımları için sudo komutunu kullanabilen bir kullanıcı hesabına sahip olmanız gerekmektedir.
Mekanizmayı Anlamak: Chroot Jail
Bu yapılandırmanın kalbinde chroot (change root) mekanizması yatar. chroot, bir programın ve onun alt süreçlerinin çalışacağı kök dizinini değiştiren bir Unix/Linux sistem çağrısıdır. Bir kullanıcı SFTP ile bağlandığında ve ChrootDirectory yapılandırması etkin olduğunda, o kullanıcının dosya sistemi görünümü, belirlenen dizinle sınırlanır. Kullanıcı, bu dizinin dışındaki hiçbir şeye erişemez veya göremez. Bu, bir “chroot jail” veya “chroot hapishanesi” olarak adlandırılır.
sshd_config dosyasındaki ChrootDirectory direktifi, SSH sunucusuna belirli bir kullanıcı veya grup için kök dizini değiştirmesini söyler. Bu dizin ve onun üst dizinleri, güvenlik nedenleriyle root kullanıcısına ait olmalı ve başkaları tarafından yazılabilir olmamalıdır. Bu kısıtlama, kötü niyetli bir kullanıcının chroot ortamından kaçmasını zorlaştırmak içindir.
ForceCommand internal-sftp direktifi ise, belirli bir kullanıcı veya grup için SSH bağlantısı kurulduğunda, normal bir kabuk başlatmak yerine doğrudan OpenSSH’nin kendi dahili SFTP sunucusunu çalıştırmasını sağlar. Bu, kullanıcının komut satırı erişimini tamamen engellerken, SFTP dosya transfer yeteneğini korur.
Bu iki direktifin birleşimi, kullanıcılara sadece belirlenmiş bir dizin içinde SFTP aracılığıyla dosya transferi yapma yeteneği verirken, aynı zamanda sunucuya tam kabuk erişimini engeller.
Adım Adım Yapılandırma
Şimdi, shell erişimi olmayan bir SFTP kullanıcısı oluşturmak için gerekli adımları uygulayalım.
Adım 1: SSH Yapılandırmasını Yedekleme
Herhangi bir sunucu yapılandırmasına başlamadan önce, mevcut yapılandırma dosyasını yedeklemek iyi bir uygulamadır. Bu, bir hata durumunda kolayca geri dönmenizi sağlar.
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Bu komut, sshd_config dosyasının bir kopyasını sshd_config.bak adıyla oluşturur.
Adım 2: SFTP Kullanıcısı ve Grubu Oluşturma
Güvenliği artırmak ve yönetimi kolaylaştırmak için, SFTP kullanıcılarını ayrı bir gruba atayacağız ve bu kullanıcılara kabuk erişimi vermeyeceğiz.
Öncelikle, sftpusers adında yeni bir grup oluşturalım:
sudo groupadd sftpusers
Şimdi, sftpuser1 adında yeni bir kullanıcı oluşturalım. Bu kullanıcıya shell erişimi vermeyeceğiz ve onu sftpusers grubuna ekleyeceğiz. home dizini oluşturmayacağız, çünkü chroot dizinini biz manuel olarak belirleyeceğiz.
sudo useradd -m -g sftpusers -s /usr/sbin/nologin sftpuser1
* -m: Kullanıcının ev dizinini oluşturur. (Aslında chroot için doğrudan kullanılmayacak, ancak standart bir kullanıcı oluşturma adımıdır.)
* -g sftpusers: Kullanıcıyı sftpusers grubuna ekler.
* -s /usr/sbin/nologin: Kullanıcının kabuğunu /usr/sbin/nologin olarak ayarlar. Bu, kullanıcının SSH üzerinden oturum açmasını engeller. Alternatif olarak /bin/false de kullanılabilir.
Oluşturduğumuz kullanıcı için güçlü bir parola belirleyelim:
sudo passwd sftpuser1
Parolayı iki kez girmeniz istenecektir.
Eğer kullanıcı için bir ev dizini oluşturduysanız (-m ile), bu dizin /home/sftpuser1 olacaktır. Ancak, chroot yapılandırması nedeniyle, kullanıcının gerçek çalışma dizini bu olmayacaktır.
Adım 3: SFTP Kök Dizini Oluşturma ve İzinleri Ayarlama
Bu adım, chroot ortamını oluşturmak için kritik öneme sahiptir. ChrootDirectory olarak belirlediğimiz dizin ve onun üst dizinleri root kullanıcısına ait olmalı ve diğer kullanıcılar tarafından yazılabilir olmamalıdır. Bu kısıtlama, chroot kaçışlarını engellemek için OpenSSH tarafından zorunlu kılınır.
Öncelikle, SFTP kullanıcıları için ana chroot dizinini oluşturalım. Örneğin, /sftp_root adında bir dizin kullanabiliriz:
sudo mkdir -p /sftp_root
Bu dizinin sahibi root olmalı ve izinleri 755 veya 700 olmalıdır (diğer kullanıcılar için yazma izni olmamalıdır).
sudo chown root:root /sftp_root
sudo chmod 755 /sftp_root
Şimdi, SFTP kullanıcısının dosya yükleyebileceği bir dizin oluşturalım. Bu dizin chroot dizininin içinde olmalı ve SFTP kullanıcısına ait olmalıdır. Örneğin, /sftp_root/uploads adında bir dizin oluşturabiliriz:
sudo mkdir -p /sftp_root/uploads
Bu uploads dizininin sahibi sftpuser1 ve grubu sftpusers olmalıdır. İzinleri ise 775 olabilir, bu sayede kullanıcı ve grup üyeleri bu dizine yazabilir.
sudo chown sftpuser1:sftpusers /sftp_root/uploads
sudo chmod 775 /sftp_root/uploads
Eğer birden fazla SFTP kullanıcınız olacaksa ve her birinin kendi izole yükleme dizini olmasını istiyorsanız, her kullanıcı için /sftp_root/sftpuser1_data, /sftp_root/sftpuser2_data gibi ayrı dizinler oluşturup ilgili kullanıcılara atayabilirsiniz. Ya da tüm SFTP kullanıcıları için ortak bir /sftp_root/shared_uploads dizini de kullanabilirsiniz.
Önemli Not: ChrootDirectory olarak belirtilen dizin (/sftp_root) ve onun tüm üst dizinleri, root kullanıcısına ait olmalı ve yazma izni sadece root için olmalıdır. Eğer bu kurala uyulmazsa, SSH servisi yeniden başlatıldığında hata verebilir veya kullanıcılar bağlanamayabilir.
Adım 4: OpenSSH Sunucu Yapılandırmasını Düzenleme
Şimdi, OpenSSH sunucusunun yapılandırma dosyasını (sshd_config) düzenleyerek sftpusers grubundaki kullanıcılar için chroot ve ForceCommand ayarlarını etkinleştireceğiz.
Yapılandırma dosyasını bir metin düzenleyici ile açın (örneğin, nano):
sudo nano /etc/ssh/sshd_config
Dosyayı açtıktan sonra, aşağıdaki satırı bulun:
Subsystem sftp /usr/lib/openssh/sftp-server
Bu satırın başına # koyarak yorum satırı haline getirin veya silin. OpenSSH’nin kendi dahili SFTP sunucusunu kullanacağımız için bu satıra ihtiyacımız yok.
Ardından, dosyanın en altına veya uygun bir yere aşağıdaki blokları ekleyin:
Match Group sftpusers
ChrootDirectory /sftp_root
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
PermitTunnel no
PermitAgentForwarding no
Bu direktiflerin açıklamaları şunlardır:
* Match Group sftpusers: Bu bloktaki yapılandırma ayarlarının yalnızca sftpusers grubunun üyeleri için geçerli olacağını belirtir.
* ChrootDirectory /sftp_root: sftpusers grubundaki kullanıcılar bağlandığında, /sftp_root dizini onların kök dizini olarak ayarlanır. Kullanıcılar bu dizinin dışına çıkamaz.
* ForceCommand internal-sftp: Kullanıcı bağlandığında, normal bir shell oturumu başlatmak yerine, OpenSSH’nin dahili SFTP sunucusu çalıştırılır. Bu, kullanıcının komut çalıştırmasını tamamen engeller.
* X11Forwarding no: X11 oturumlarının yönlendirilmesini devre dışı bırakır. Güvenlik için önerilir.
* AllowTcpForwarding no: TCP port yönlendirmesini devre dışı bırakır. Güvenlik için önerilir.
* PermitTunnel no: Tünel aygıtı yönlendirmesini devre dışı bırakır. Güvenlik için önerilir.
* PermitAgentForwarding no: SSH kimlik doğrulama aracısı (agent) yönlendirmesini devre dışı bırakır. Güvenlik için önerilir.
Bu eklemeleri yaptıktan sonra, dosyayı kaydedin ve kapatın (Nano’da Ctrl+O, Enter, Ctrl+X).
Adım 5: SSH Servisini Yeniden Başlatma
Yapılandırma değişikliklerinin etkili olması için SSH servisini yeniden başlatmanız gerekir:
sudo systemctl restart ssh
Servisin başarıyla yeniden başlatıldığından emin olmak için durumunu kontrol edebilirsiniz:
sudo systemctl status ssh
Çıktıda active (running) ibaresini görmelisiniz. Herhangi bir hata varsa, journalctl -xe komutunu kullanarak günlükleri kontrol edebilirsiniz. Genellikle hatalar, sshd_config dosyasındaki yanlış sözdizimi veya ChrootDirectory izinlerindeki sorunlardan kaynaklanır.
Adım 6: Yapılandırmayı Test Etme
Şimdi, SFTP kullanıcısının doğru şekilde yapılandırıldığından emin olmak için test edelim.
SFTP Bağlantısını Test Etme:
Bir SFTP istemcisi kullanarak (örneğin, FileZilla, WinSCP veya komut satırı sftp aracı) sftpuser1 olarak sunucuya bağlanmayı deneyin.
Komut satırı ile test etmek için:
sftp sftpuser1@your_server_ip_or_hostname
Parolanızı girdikten sonra SFTP istemine düşmelisiniz. SFTP isteminde ls komutunu çalıştırın. Yalnızca /sftp_root içindeki uploads dizinini görmelisiniz.
sftp> ls
uploads
sftp> cd uploads
sftp> pwd
Remote working directory: /uploads
Bu dizine bir dosya yüklemeyi deneyin:
sftp> put local_file.txt
Eğer dosya başarıyla yükleniyorsa ve uploads dizini dışına çıkamıyorsanız, SFTP yapılandırmanız doğru çalışıyor demektir.
SSH Kabuk Erişimini Test Etme:
sftpuser1 kullanıcısının shell erişimine sahip olmadığını doğrulamak için normal bir SSH bağlantısı kurmayı deneyin:
ssh sftpuser1@your_server_ip_or_hostname
Parolanızı girdikten sonra, bağlantının hemen kapanması veya “This account is currently not available.” gibi bir mesaj almanız gerekir. Bu, kullanıcının shell erişiminin başarıyla engellendiğini gösterir.
sftpuser1@your_server_ip_or_hostname's password:
This account is currently not available.
Connection to your_server_ip_or_hostname closed.
Bu testler başarılı olursa, SFTP kullanıcılarınızı shell erişimi olmadan güvenli bir şekilde yapılandırmışsınız demektir.
Gelişmiş Yapılandırmalar ve Güvenlik İpuçları
Temel SFTP kurulumunu tamamladıktan sonra, güvenlik ve kullanışlılığı artırmak için bazı ek yapılandırmalar ve ipuçları uygulayabilirsiniz.
SSH Anahtarları ile Kimlik Doğrulama
Parola tabanlı kimlik doğrulama yerine SSH anahtarları kullanmak, güvenliği önemli ölçüde artırır. SSH anahtarları, parola kırma saldırılarına karşı çok daha dayanıklıdır ve otomasyon için daha uygundur.
SFTP kullanıcısı için SSH anahtarı ile kimlik doğrulama yapmak için:
1. Anahtar Çifti Oluşturma: Yerel makinenizde bir SSH anahtar çifti oluşturun (eğer zaten yoksa):
ssh-keygen -t rsa -b 4096 -C "sftpuser1_key"
Bu komut, ~/.ssh/id_rsa (özel anahtar) ve ~/.ssh/id_rsa.pub (genel anahtar) dosyalarını oluşturacaktır. Özel anahtarınızı asla paylaşmayın.
2. Genel Anahtarı Sunucuya Kopyalama: Genel anahtarı SFTP kullanıcısının sunucudaki ev dizinine kopyalamalısınız. ChrootDirectory aktif olduğu için, kullanıcının authorized_keys dosyası, kullanıcının gerçek ev dizininde olmalıdır (yani /home/sftpuser1/.ssh/authorized_keys), chroot dizini içinde değil. Çünkü kimlik doğrulama chroot uygulanmadan önce gerçekleşir.
ssh-copy-id -i ~/.ssh/id_rsa.pub sftpuser1@your_server_ip_or_hostname
Eğer ssh-copy-id kurulu değilse veya çalışmıyorsa, genel anahtarı manuel olarak kopyalayabilirsiniz:
# Sunucuda, sftpuser1 olarak oturum açın (eğer nologin ise bu adım atlanır, root olarak yapılmalı)
sudo mkdir -p /home/sftpuser1/.ssh
sudo chmod 700 /home/sftpuser1/.ssh
sudo touch /home/sftpuser1/.ssh/authorized_keys
sudo chmod 600 /home/sftpuser1/.ssh/authorized_keys
sudo chown sftpuser1:sftpusers /home/sftpuser1/.ssh /home/sftpuser1/.ssh/authorized_keys
# Yerel makinenizden, genel anahtarınızı kopyalayın
cat ~/.ssh/id_rsa.pub | ssh sftpuser1@your_server_ip_or_hostname "cat >> /home/sftpuser1/.ssh/authorized_keys"
Düzeltme: sftpuser1‘in shell’i /usr/sbin/nologin olduğu için, ssh sftpuser1@... "cat >> ..." komutu çalışmayacaktır. Bu nedenle, genel anahtarı root yetkileriyle doğrudan /home/sftpuser1/.ssh/authorized_keys dosyasına eklemeniz gerekir.
# Yerel makinenizden genel anahtarınızı kopyalayın
PUBLIC_KEY=$(cat ~/.ssh/id_rsa.pub)
# Sunucuda root olarak (veya sudo ile)
sudo mkdir -p /home/sftpuser1/.ssh
echo "$PUBLIC_KEY" | sudo tee -a /home/sftpuser1/.ssh/authorized_keys
sudo chmod 700 /home/sftpuser1/.ssh
sudo chmod 600 /home/sftpuser1/.ssh/authorized_keys
sudo chown sftpuser1:sftpusers /home/sftpuser1/.ssh /home/sftpuser1/.ssh/authorized_keys
3. Test Etme: Artık SFTP istemcinizden anahtar dosyası ile bağlanmayı deneyebilirsiniz. Parola sormadan bağlanmalısınız.
Birden Fazla SFTP Kullanıcısı Yönetimi
Yeni SFTP kullanıcıları eklemek, mevcut sftpusers grubunu ve chroot yapısını kullanarak oldukça basittir:
1. Yeni Kullanıcı Oluşturma: sftpuser2 adında yeni bir kullanıcı oluşturun ve sftpusers grubuna ekleyin, shell’ini nologin olarak ayarlayın:
sudo useradd -m -g sftpusers -s /usr/sbin/nologin sftpuser2
sudo passwd sftpuser2
2. Kullanıcıya Özel Dizin Oluşturma: Her kullanıcının kendi izole dizini olmasını istiyorsanız, /sftp_root içinde kullanıcıya özel bir dizin oluşturun ve izinlerini ayarlayın:
sudo mkdir -p /sftp_root/sftpuser2_data
sudo chown sftpuser2:sftpusers /sftp_root/sftpuser2_data
sudo chmod 775 /sftp_root/sftpuser2_data
Bu durumda, sftpuser2 bağlandığında /sftp_root‘u kök olarak görecek ve sftpuser2_data dizinine erişebilecektir.
3. SSH Anahtarları (isteğe bağlı): Eğer SSH anahtarları kullanacaksanız, sftpuser2 için de yukarıdaki adımları tekrarlayın.
Bu yapılandırma, tüm SFTP kullanıcılarının aynı chroot dizini içinde kalmasını sağlar, ancak her birine kendi özel dizinlerini veya paylaşılan bir dizini atayabilirsiniz.
Firewall Kuralları (UFW)
Sunucunuzda bir güvenlik duvarı (firewall) çalışıyorsa (Ubuntu’da UFW yaygındır), SSH/SFTP trafiğine izin verdiğinizden emin olmanız gerekir. SSH varsayılan olarak 22 numaralı portu kullanır.
sudo ufw allow OpenSSH
sudo ufw enable # Eğer firewall kapalıysa
sudo ufw status
Bu komutlar, 22 numaralı port üzerinden gelen SSH bağlantılarına izin verir.
Günlük Yönetimi (Logging)
SFTP bağlantılarını ve olası hataları izlemek için sistem günlüklerini düzenli olarak kontrol etmek önemlidir. SSH bağlantı günlükleri genellikle /var/log/auth.log dosyasında bulunur.
sudo tail -f /var/log/auth.log
Bu komut, auth.log dosyasının sonunu gerçek zamanlı olarak gösterir ve SFTP bağlantı girişimlerini, başarılarını veya başarısızlıklarını izlemenize olanak tanır.
Performans ve Kaynak Yönetimi
Küçük ve orta ölçekli SFTP sunucuları için bu yapılandırma genellikle yeterlidir. Ancak, aynı anda çok sayıda SFTP kullanıcısı bağlanıyorsa veya çok büyük dosyalar transfer ediliyorsa, sunucu kaynaklarının (CPU, RAM, disk I/O) izlenmesi gerekebilir. internal-sftp modülü genellikle oldukça verimlidir, ancak yoğun kullanım durumlarında performans darboğazlarını tespit etmek için sistem izleme araçları kullanmak faydalı olabilir.
Ubuntu Sürümleri Arası Uyumluluk
Bu makale Ubuntu 18.04 için yazılmış olsa da, OpenSSH sunucusunun ChrootDirectory ve ForceCommand internal-sftp özellikleri, Ubuntu 20.04 LTS ve Ubuntu 22.04 LTS gibi daha yeni sürümlerde de aynı şekilde çalışır. Temel OpenSSH yapılandırma mantığı ve Linux kullanıcı/dizin izinleri prensipleri değişmediği için, bu rehberdeki adımlar genellikle diğer güncel Ubuntu sürümleri için de geçerlidir.
Sıkça Sorulan Sorular (SSS)
SFTP’nin shell erişimi olmadan yapılandırılmasıyla ilgili sıkça sorulan bazı soruları ve cevaplarını aşağıda bulabilirsiniz.
SFTP ile FTP arasındaki fark nedir?
SFTP (Secure File Transfer Protocol) ve FTP (File Transfer Protocol) her ikisi de dosya transferi için kullanılan protokollerdir, ancak temel farkları güvenliktedir. FTP, verileri (kullanıcı adları, şifreler ve dosya içerikleri dahil) şifrelemeden açık metin olarak gönderir, bu da onu dinlemeye karşı savunmasız hale getirir. SFTP ise SSH (Secure Shell) protokolü üzerinden çalışır ve tüm iletişimi şifreler. Bu, SFTP’yi çok daha güvenli bir seçenek haline getirir. Ayrıca, SFTP’nin ayrı bir kontrol ve veri kanalı yoktur; tüm iletişim tek bir kanalda güvenli bir şekilde gerçekleşir.
Neden chroot dizini root’a ait olmalı ve yazılabilir olmamalı?
ChrootDirectory olarak belirlenen dizin ve onun tüm üst dizinleri, güvenlik nedeniyle root kullanıcısına ait olmalı ve sadece root tarafından yazılabilir olmalıdır. Bu kural, OpenSSH tarafından chroot kaçışlarını (chroot jailbreak) engellemek için zorunlu kılınmıştır. Eğer bir saldırgan chroot dizinini yazabilirse, kötü amaçlı dosyalar yerleştirebilir veya sembolik bağlantılar oluşturarak chroot ortamından kaçabilir ve sistemin geri kalanına erişim sağlayabilir. root sahipliği ve kısıtlı izinler, bu tür saldırıların önlenmesine yardımcı olur.
SFTP kullanıcısı neden shell erişimine sahip olmamalı?
SFTP kullanıcısının shell erişimine sahip olmaması, güvenlik ilkesi olan “en az ayrıcalık” (least privilege) ilkesini uygulamak içindir. Bir kullanıcıya shell erişimi vermek, o kullanıcının sunucu üzerinde komut çalıştırma yeteneğine sahip olduğu anlamına gelir. Bu durum, kötü niyetli bir kullanıcının veya yanlışlıkla hata yapan bir kullanıcının sistem dosyalarını değiştirmesine, uygulamaları çalıştırmasına veya sunucu hakkında hassas bilgiler toplamasına olanak tanıyabilir. SFTP’yi shell erişimi olmadan yapılandırmak, kullanıcının yalnızca dosya transferi yapmasına izin verir ve sistem üzerindeki riskli eylemlerini sınırlar.
Ubuntu 20.04 veya 22.04 için de bu yöntem geçerli mi?
Evet, bu makalede açıklanan yöntem ve adımlar, Ubuntu 20.04 LTS (Focal Fossa) ve Ubuntu 22.04 LTS (Jammy Jellyfish) gibi daha yeni Ubuntu sürümleri için de büyük ölçüde geçerlidir. OpenSSH sunucusunun temel yapılandırma direktifleri (ChrootDirectory, ForceCommand internal-sftp vb.) ve Linux’ta kullanıcı, grup ve dosya izinleri yönetimi prensipleri, bu sürümler arasında önemli bir değişiklik göstermemiştir. Bu nedenle, bu rehberdeki adımları yeni Ubuntu sürümlerinde de başarıyla uygulayabilirsiniz.
SFTP kullanıcısı kendi dizinini oluşturabilir mi?
SFTP kullanıcısı, chroot dizininin (örneğin /sftp_root) doğrudan kökünde yeni dizinler oluşturamaz, çünkü bu dizin root‘a aittir ve yazma izni yoktur. Ancak, chroot dizini içinde SFTP kullanıcısına ait veya yazma izni olan bir alt dizin (örneğin /sftp_root/uploads) varsa, kullanıcı bu alt dizin içinde yeni dizinler ve dosyalar oluşturabilir. Bu, kullanıcının sadece kendisine ayrılmış alan içinde değişiklik yapabilmesini sağlar.
SFTP bağlantıları için farklı bir port kullanabilir miyim?
Evet, güvenlik amacıyla SSH/SFTP bağlantıları için varsayılan 22 numaralı port yerine farklı bir port kullanabilirsiniz. Bunun için sshd_config dosyasındaki Port 22 satırını bulup istediğiniz port numarasıyla değiştirmeniz ve SSH servisini yeniden başlatmanız gerekir. Örneğin, Port 2222. Yeni portu güvenlik duvarınızda da açmayı unutmayın. Bu, port taraması yapan basit botlara karşı bir miktar koruma sağlayabilir, ancak deneyimli saldırganlar için caydırıcı değildir.
Sonuç
Ubuntu 18.04 üzerinde shell erişimi olmadan SFTP’yi etkinleştirmek, sunucu güvenliğini artırmak ve kullanıcılara kontrollü dosya transferi yetenekleri sağlamak için güçlü ve esnek bir yöntemdir. ChrootDirectory ve ForceCommand internal-sftp direktiflerini kullanarak, kullanıcıları dosya sisteminin belirli bir bölümüyle sınırlayabilir ve komut çalıştırma yeteneklerini tamamen engelleyebilirsiniz.
Bu rehberde adım adım gösterilen yapılandırma süreci, güvenlik önlemleri, izin ayarları ve test adımları, sunucunuzda sağlam ve güvenli bir SFTP ortamı oluşturmanıza yardımcı olacaktır. SSH anahtarlarıyla kimlik doğrulama, birden fazla kullanıcı yönetimi ve düzenli günlük izleme gibi gelişmiş ipuçlarını uygulayarak sisteminizin güvenliğini daha da pekiştirebilirsiniz. Bu sayede, hem sunucunuzun bütünlüğünü koruyacak hem de kullanıcılara ihtiyaç duydukları güvenli dosya transferi hizmetini sunabileceksiniz.