/ solution

Ubuntu Server - FTP Kurulumu

Bu yazımda üzerinde ubuntu yüklü olan sunucumuzda ftp işlemlerini nasıl yaparız sorusuna yanıt vermeye çalışacağım. Ama öncesinde size ait hali hazırda bir sunucu olduğunu ve bu sunucuya ssh bağlantısı yapabildiğinizi varsayacağım.

SSH nedir?

Secure Shell 'in kısaltmasıdır. SSH bir uzak sunucu bağlantı protokuludur. Herhangi bir işletim sistemi üzerinde sunucularınıza bağlanabilir ve yönetebilirsiniz. Yukarıdaki bahsettiğim komutla sunucunuza bağlanabilirsiniz. Bu komuttan sonra daha önce sunucunuzda tanımlanmış root şifresini girmeniz gerekmektedir.

O halde bir terminal açıp hadi başlayalım.

$ ssh root@SERVER_IP_ADRESINIZ

Bu bağlantı bize root erişimini verdi. Ama takdir edersiniz ki, root olarak sunucuya erişmek yanlışlıkla yapılan hareketlerle tahribe yol açabilir. Bu nedenle;

$ adduser demiremrece

komutu ile "demiremrece" adında bir kullanıcı oluşturuyoruz. Devamında bu kullanıcı için güvenli bir şifre oluşturup, diğer istenen bilgileri pas geçebiliriz.

Standart kullanıcı yetkileriyle bir hesap oluşturduk. Şimdi bu hesabın arzu edildiğinde root olarak işlem yapabilmesini sağlayalım.

$ usermod -aG sudo demiremrece

Bundan sonra çalıştırdığımız komutların başına sudo ekleyerek admin yetkisinde işlem yapabiliriz. Artık sunucuya bu kullanıcıyla ssh bağlantısı yapmamızda hiç bir problem gözükmüyor.
Şimdi sunucuya ftp yapılandırması yapacağız ki Filezilla ya da benzeri bir yazılımla server ile dosya paylaşımı yapabilelim.

FTP (File Transfer Protocol): İstemci (client) ve sunucu (server) arasında dosya transferi yapabilmemiz için oluşturulmuş yaygın olarak kullanılan bir protokoldür.

Vspftpd kurulumu

Vsfptd, unix tabanlı işletim sistemleri üzerinde çalışan bir ftp sunucusudur.

Kurulum için öncelikle paket listesini güncelleyelim ve vsftpd'yi kuralım.

$ sudo apt-get update
$ sudo apt-get install vsftpd

Kurulum işleminden sonra vsftpd konfigürasyon dosyasında değişiklik yapacağimiz için öncelikle bir yedek almamızda fayda var.

$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup

FTP İzni

FTP, 20 ve 21 numaralı portları kullanır. Dolayısıyla bizim ftp erişimi yapabilmemiz için bu portlara izin vermemiz gerekiyor.

$ sudo ufw allow 20/tcp
$ sudo ufw allow 21/tcp

bize aşağıdaki gibi bir çıktı verecektir.

$ sudo ufw status

--çıktı--
To                         Action      From
--                         ------      ----
20/tcp                     ALLOW       Anywhere                  
21/tcp                     ALLOW       Anywhere                  
990/tcp                    ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
80                         ALLOW       Anywhere                  
20/tcp (v6)                ALLOW       Anywhere (v6)             
21/tcp (v6)                ALLOW       Anywhere (v6)             
990/tcp (v6)               ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6)             
80 (v6)                    ALLOW       Anywhere (v6)             

Gördüğünüz gibi, 20 ve 21 portlarına erişime izin vermiş olduk.

Kullanıcı Erişim Klasörü

FTP yapmamıza olanak sağlayacak vsftpd yi kurduk ve erişime izin verdiğimize göre, artık kullanıcımızın dosyaları kontrol edebileceği bir dizine ihtiyacımız var. Ben genellikle kullanıcı ismi bazlı dizinler ayarlıyorum. Bu yazı serisinde amacımız bir websitesi barındırmak olduğundan :

$ mkdir /var/www/demiremrece

Aynı zamanda kullanıcı adımın da demiremrece olduğuna dikkat edin.

Bu klasörün yükleme ve indirme yapmaya müsait olması için ftp kullanıcısının bu yetkileri sahip olması gerekir.

$ sudo chown demiremrece:demiremrece /var/www/demiremrece

İçine de örnek bir html dosyası atalım.

<html>
    <head>
        <title>demiremrece.com</title>
    </head>
    <body>
        <h1>Harika! Sayfamız çalışıyor.</h1>
    </body>
</html>

Vsftpd Ayarları

$ sudo nano /etc/vsftpd.conf

Aşağıdaki gibi dosyayı değiştirdiğimizde, sadece vsftpd.userlist içerisindeki kullanıcılar ftp erişimine sahip olacak ve dosya yükleyebileceklerdir.

. . .
# Yetkisiz kullanıcılara izin vermiyoruz
anonymous_enable=NO

. . .

# Local kullanıcıların girişine izin veriyoruz
local_enable=YES

. . .

# Kullanıcıya yazma yetkisi veriyoruz.
write_enable=YES

. . .

# FTP ile bağlı kullanıcının kendi dizini dışındaki dosyalara erişimini engelliyoruz.
chroot_local_user=YES

. . .

# Kullanıcıya göre dizin için gerekli.
user_sub_token=$USER
local_root=/var/www/$USER

. . .
# Sadece liste içerisindeki kullanıcılara ftp izni ver
# userlist_enable NO yaparsak sadece liste içerisindeki kullanıcılara izin vermez.
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

Bu işlemleri yaptıktan sonra kaydedip vsftpd.conf dosyasından çıkalım. Ardından userlist oluşturalım ve içine ftp izinli kullanıcıları yazalım. Bizim senaryomuzda sadece demiremrece.

$ echo "demiremrece" | sudo tee -a /etc/vsftpd.userlist

Ardından değişikliklerimizin etki edebilmesi için vfstpd'yi yeniden başlatalım.

$ sudo systemctl restart vsftpd

FTP işlemlerini tamamlamış olduk. Test etmek için;

$ ftp -p SERVER_IP_ADRESS

Her şey başarılı bir şekilde gittiyse, aşağıdaki gibi bir çıktı alıyor olmamız lazım.

-- Çıktı --

Connected to SERVER_IP_ADRESS
220 (vsFTPd 3.0.3)
Name (SERVER_IP_ADRESS:default): demiremrece
331 Please specify the password.
Password: KULLANICI_ŞİFRENİZ
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>