File Transfer Protocol (FTP) sayesinde Linux sunucunuz ile çift taraflı dosya transferi gerçekleştirebilirsiniz. Özellikle Linux sunucuların birçoğunun SSH bağlantısı ile yönetilmesi yani konsol üzerinden komutlar ile yönetilmesi FTP’yi Linux sunucularda kullanmayı daha cazip hale getiriyor.
FTP nedir sorusu ile ilgili çok fazla kaynak bulabileceğiniz için ben hemen kurulum işlemlerine geçiyorum. Kurulum aşamalarını Ubuntu 19.10 üzerinden ilerleteceğim fakat diğer Linux dağıtımları üzerinde de kurulum işlemleri çok benzer, komutlarda birkaç ufak değişiklik söz konusu olabilir, bu durumu unutmamanızda fayda var.
1. vsftpd Kurulumu
SSH ile sunucuya bağlandıktan sonra – Putty uygulamasını kullanabilirsiniz – aşağıdaki komutları çalıştırarak ilerliyoruz. Putty ile kopyaladığınız bir metni konsola yapıştırmak için mouseunuzun sağ tuşuna basmanız yeterli.
1 |
sudo apt update && sudo apt install vsftpd |
Yukarıda && ile ayrılmış iki bölümlü komut bulunmakta. İlk kısım sunucumuzda ki paketleri bağımlılıkları ile birlikte güncellemeyi ikinci alandaki komut ise FTP bağlantısı için gerekli olan vsftpd kurulumunu yapmamızı sağlıyor.
Bu komutu çalıştırdıktan sonra FTP kurulumu gerçekleşti ve sunucumuzda aktif hale geldi. Eğer FTP bağlantı durumunuzu kontrol etmek isterseniz;
1 |
sudo service vsftpd status |
Bu işlemin ardından aşağıdakine benzer bir çıktı ile karşılaşacaksınız.
Eğer FTP durumunuz aktif gözükmüyor ise aşağıdaki kodu çalıştırarak kendiniz aktif edebilirsiniz.
1 |
sudo service vsftpd start |
2. Güvenlik Duvarı (Firewall) Yapılandırma
FTP kurulumunu gerçekleştirdikten sonra eğer daha önce yapmadıysak güvenlik duvarını yapılandırmamız gerekiyor.
Firewall etkinleştirmeden önce ilk etapta SSH işlemine izin vermemiz gerekiyor, eğer bu adımı atlayarak ufw etkinleştirmesini gerçekleştirirsek sunucumuza uzaktan bağlanmamızı engellemiş olacağız. Bu yüzden bu adım son derece önemli!
1 |
sudo ufw allow OpenSSH |
openSSH izninin ardından şimdi belirli port numaralarına izin vermemiz gerekiyor. Her satırı ayrı bir komut olarak çalıştırın.
1 2 3 4 5 6 7 |
sudo ufw allow 20/tcp sudo ufw allow 21/tcp sudo ufw allow 40000:50000/tcp sudo ufw allow 990/tcp |
Bu işlemlerin ardından Firewall yapılandırma işlemini tamamlamış olduk, artık Firewall’ımızı aktif duruma getirebiliriz.
1 |
sudo ufw enable |
Bu komuttan sonra eğer güvenlik durumunu kontrol etmek isterseniz;
1 |
sudo ufw status |
komutunu çalıştırabilirsiniz. Bu komuttan sonra aşağıdakine benzer bir çıktı ile karşılaşacaksınız.
3. FTP Kullanıcısı Oluşturma
FTP hesabına bağlanmak amacı ile root hesabını kullanamıyoruz. Bu sebeple FTP bağlantısı için farklı bir hesap oluşturmamız gerekiyor.
ftpusername kısmını kendinize göre değiştirebilirsiniz.
1 |
sudo adduser ftpusername |
Bu komut ile beraber sizden hesabınız için şifre oluşturmanız istenecek ardından kişisel bilgileriniz sorulabilir, eğer bu bilgileri paylaşmak istemiyorsanız boş bırakıp Enter ile hızlıca geçebilirsiniz.
Artık yeni bir kullanıcı oluşturduk.Bu kullanıcı FTP bağlantısı yapabileceği gibi şuan SSH içinde yetki sahibi.Eğer yeni oluşturduğunuz hesabın SSH yetkisini kaldırmak isterseniz; aşağıdaki komut ile SSHD config dosyasını düzenleyebilirsiniz.
1 |
sudo nano /etc/ssh/sshd_config |
Dosyayı açtıktan sonra aşağıdaki komutu dosyanın en sonuna yapıştırabilirsiniz. Dosyadaki değişiklikleri kaydetmek için CTRL + X ardından Y tuşuna basabilirsiniz.
1 |
DenyUsers ftpusername |
Bu işlemin ardından yeni hesabımız sadece FTP ile sunucumuza bağlanacak şekilde sınırlandırdık yani SSH bağlantısı için artık bu hesabı kullanamayız.
4. Dosya İzinlerini Hazırlama
FTP kullanıcısını oluşturduk, artık kullanıcının hangi klasörlere erişebileceğini ve dosya yükleyebileceğini ayarlamamız gerekiyor. Aksi taktirde şuan FTP ile bağlanmaya çalışırsanız herhangi bir dosya göremeyeceksiniz.
Burada önümüzde iki yol ayrımı var
- Kullanıcı sadece belirli bir dizine dosya yüklesin ve görüntüleye bilsin,
- Kullanıcı her alanı görüntüleyip dosya yükleye bilisin
Bu tercihe göre işlemlerinize devam edelim, ben elimden geldiğince ikisini de anlatacağım.
a) Belirli Dosya Dizinine Yetki Verme
Bu noktada internette incelediğim kaynaklar kullanıcıya farklı dosya dizinleri için izin vermişler ve bu işlemi genelde Apache ve Nginx serverlarda default olarak kullan /var/www dizini fakat siz ihtiyaçlarınıza göre bu alanı revize edebilirsiniz.
Kullanıcının erişimi için izin vereceğimiz klasörün üstünü kök dizin olarak belirliyoruz öncelikle.
1 |
sudo usermod -d /var/www ftpusername |
Kök dizini belirledikten sonra bu dizinin altında hangi dosya/klasöre erişebileceğini belirlememiz gerekiyor.
1 |
sudo chown ftpusername:ftpusername /var/www/public_html |
Bu işlemle birlikte artık FTP kullanıcımız sadece /var/www/public_html klasörüne erişebilecek. B maddesini uygulamanıza gerek olmadığı için direkt olarak 5. adıma geçebilirsiniz.
b) Tüm Dizinlere Erişim Yetkisi Verme
Şimdi FTP dosyalarının nobody:nogroup olarak ayarlamamız gerekiyor.
1 |
sudo chown nobody:nogroup /var/www |
Bu şekilde /var altında yer alan tüm dosyalara erişim vermiş oluyoruz. Burada yine izin vermek istediğiniz klasörü kendinize göre düzenleyebilirsiniz.
1 |
sudo chmod a-w /var/www |
chmod ile de dosyanın izinlerini düzenliyoruz. Burada dikkat edilmesi gereken husus şu; eğer bu dosya yoluna sadece sizin oluşturduğunuz hesabın erişmesini istiyorsanız chmod komutunu kullanarak yetkileri düzenleyebilirsiniz. Fakat herkesin erişimine imkan vermek istiyorsanız bu komuta gerek yok.
Ayrıca genelde benim örneğimdeki gibi /var/www dosya yoluna bu şekilde müdahale etmemek adına /home/ftpusername/ftp dosya yolunu oluşturarak kullanıcının sadece bu dizine dosya yüklenmesi sağlanıyor. Eğer güvenlik noktasında önlem almak istiyorsanız sizde bu tür bir yöntemi izleyebilirsiniz.
Tüm bu işlemlerin ardından artık sırada oluşturduğumuz kullanıcıya klasörü atamaya geldi. sudo chown komutu ile de bu işlemi gerçekleştiriyoruz.
1 |
sudo chown ftpusername:ftpusername /var/www |
Artık sırada vsftpd config dosyasını düzenlemek kaldı. Her şey tamamsa bir sonraki adıma geçiyoruz.
4. vsftpd Config Dosyasını Düzenleme
FTP hesabını kullanmadan önce sunucumuz üzerinde bazı değişiklikler yapmamız gerekiyor.
İlk olarak vsftpd config dosyasını yedekleyerek işlemlere başlayalım.
1 |
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak |
Düzenlemek istediğimiz vsftpd config dosyasını aşağıdaki komut ile açalım.
1 |
sudo nano /etc/vsftpd.conf |
Karışınıza gelen dosyada çok fazla içerik olsa da birçoğu yorum satırı aslında. Şimdi bu dosya içeresinde arama yapmak için CTRL + W kısayolunu kullanabilirsiniz. Bu kısa yol ile aşağıdaki satırları güncelleyeceğiz.
#write_enable=YES yorum satırı halinde ki satırı bularak başında yer alan # işaretini kaldırın.Bu satırı aktif ederek kullanıcıların FTP ile dosya yükleme işlemlerine izin veriyoruz.
1 |
write_enable=YES |
#chroot_local_user=YES satırını da aynı şekilde bulup başındaki # işaretini yine kaldırıyoruz.Bu komutta kullanıcıların sadece yetkisinin olduğu klasörleri görmesini sağlıyor. Fakat burada FTP hesabı olan kullanıcının her şeyi görmesini isterseniz bu kısıma müdahale etmenize gerek yok.
1 |
chroot_local_user=YES |
#local_umask=022 içinde aynı işlemi gerçekleştiriyoruz. Bu komutta dosyamıza FTP için gerekli izinleri vermemiz sağlıyor.
1 |
local_umask=022 |
Dosyamızdaki komutları güncelledik, şimdide dosyamızda olmayan bazı parametreleri eklememiz gerekiyor.
Şimdi FTP ile bağlantı yaptığımızda eğer gizli dosya/klasörleri görmek istiyorsak aşağıdaki komutu dosyanın en altına ekliyoruz.
1 |
force_dot_files=YES |
Bundan sonra son bir adım kaldı. Yeterli port olmaması durumuna karşı belli aralıkları kullanmak için izin veriyoruz.
1 2 |
pasv_min_port=40000 pasv_max_port=50000 |
Şuan vsftpd için gerekli düzenlemeleri yaptık, CTRL + X ile çıkış yapıyoruz.
5. Test Aşaması
Tüm işlemleri tamamladıktan sonra artık herhangi bir FTP programı ile sunucumuza oluşturduğumuz hesapla bağlana biliriz. Ben bu aşamada Filezilla kullanmanızı tavsiye ediyorum, hem yönetimi kolay hem de herhangi bir dosyaya yazma izni vermek istiyorsanız klasöre sağ tıklayarak kolayca verebilirsiniz.
Tüm bu işlemleri başarılı şekilde yaptıysanız FTP programları aracılığı ile oluşturduğunuz hesap ile sunucunuza bağlanıp başarılı şekilde dosya yükleme/silme gibi işlemleri yapıyor olmanız gerekiyor.
Eğer bu tarz işlemlerde sorun yaşıyorsanız vsftpd loglarını inceleyerek hatalı işlemleri inceleyebilirsiniz.
1 |
sudo tail /var/log/vsftpd.log -n 200 |
Bağlantı sırasında veya sonrasında FTP programı size uyarı olarak; güvenli olmayan bir sunucuya bağlandınız, TLS üzerinden FTP desteklenmiyor benzeri uyarı verebilir. Bu uyarı sunucu ile aranızda herhangi bir TLS şifrelemesi olmadan iletişim kurmaya çalıştığınız için oluyor. Bu noktada dosya transferi sırasında herhangi bir sorun yaşamayabilirsiniz fakat sunucu güvenliğiniz için TLS yapılandırmasını da yapmanızı tavsiye ederim.
Bunun için gerekli adımlara hemen geçelim.
5. FTP için TLS Yapılandırması (Güvenlik)
Az öncede belirttiğim gibi aslında şuana kadar yaptığımız işlemler ile FTP bağlantısında sorun yaşamazsınız fakat sunucu ile bilgisayarınız arasında dosyalar şifrelenmediği için güvenlik zafiyeti ortaya çıkabilir. Bu yüzden kolayca TLS yapılandırmasını sunucumuz için yapalım.
OpenSSL aracılığı ile ilk yeni bir sertifika oluşturuyoruz.
1 |
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem |
Bu komuttan sonra sizden ülke vb. bilgileri girmeniz istenecek fakat bunları girmeniz zorunlu değil, boş geçerek devam edebilirsiniz.
Şimdi bir anahtar oluşturduk ve FTP config dosyasında anahtarımızı kullanması için düzenlememiz gerekecek.
1 |
sudo nano /etc/vsftpd.conf |
Dosyayı açtıktan sonra CTRL + W ile arama kısmında ssl_enable=NO kısmını YES olarak güncelleyin.
Bu işlemin ardından yine CTRL + X diyerek dosyayı kaydedebiliriz. Her şeyi tamamladıktan sonra vsftpd tekrar başlatıyoruz.
1 |
sudo systemctl restart vsftpd |
Bu işlemlerinizden sonra FTP bağlantısı tekrar yapmaya çalıştığınızda FTP programınız size bir uyarı verecek, bu uyarıda sunucunun SSL sertifkasına her zaman güveneyim mi diye soruyor, her bağlantıda bunu sormasını istemiyorsanız sertifikayı hatırla diyerek devam edebilirsiniz.
Artık tüm işlemler tamam, FTP bağlantınız her şeyi ile hazır. Ayrıca yazı boyunca olabildiğince bana bağlı kalmadan kendi ihtiyaçlarınıza göre komutları güncellemeniz için uyarılar yapmaya çalıştım.
Linux macerasına .Net Core 3.1 üzerinde hazırladığım projeyi yayınlarken başladım ve bu süreçte diğer öğrendiğim bilgileri de ilerleyen yazılarda paylaşarak hep beraber sonunda .Net Core projemizi Linux üzerinde çalıştırmış olacağız.
Teşekkür ederim yeni ilk defa linux server de çalısmaya başladım çok yardımcı oldu 😀
Merhaba Yasin, faydam olduysa ne mutlu (y) Kolay gelsin.