CentOS 7'de FTP Sunucusu Nasıl Kurulur, Yapılandırılır ve Güvenli Hale Getirilir - [Kapsamlı Kılavuz]


FTP (Dosya Aktarım Protokolü), özellikle kimlik doğrulamanın gerekli olmadığı durumlarda, bir ağ üzerinden bir sunucu ile istemciler arasında dosya aktarımı için geleneksel ve yaygın olarak kullanılan standart bir araçtır (anonim kullanıcılara izin verir) bir sunucuya bağlanmak için). Kullanıcı kimlik bilgilerini ve verilerini şifrelemeden ilettiği için FTP'nin varsayılan olarak güvenli olmadığını anlamalıyız.

Bu kılavuzda, CentOSVSFTPD, "Çok Güvenli FTP Programı" anlamına gelir) kurma, yapılandırma ve güvenliğini sağlama adımlarını açıklayacağız. Strong>/RHEL 7 ve Fedora dağıtımları.

Bu kılavuzdaki tüm komutların root olarak çalıştırılacağını unutmayın; sunucuyu root hesabıyla çalıştırmıyorsanız, root ayrıcalıkları kazanmak için sudo komutunu kullanın.

Adım 1: FTP Sunucusunu Yükleme

1. vsftpd sunucusunun kurulumu oldukça basittir; terminalde aşağıdaki komutu çalıştırmanız yeterlidir.

yum install vsftpd

2. Kurulum tamamlandıktan sonra hizmet ilk başta devre dışı bırakılacaktır, bu nedenle şimdilik hizmeti manuel olarak başlatmamız ve bir sonraki sistem önyüklemesinden itibaren otomatik olarak başlamasını da etkinleştirmemiz gerekir:

systemctl start vsftpd
systemctl enable vsftpd

3. Daha sonra, harici sistemlerden FTP hizmetlerine erişime izin vermek için, FTP arka plan programlarının aşağıdaki gibi dinlediği 21 bağlantı noktasını açmalıyız:

firewall-cmd --zone=public --permanent --add-port=21/tcp
firewall-cmd --zone=public --permanent --add-service=ftp
firewall-cmd --reload

Adım 2: FTP Sunucusunu Yapılandırma

4. Şimdi FTP sunucumuzu kurmak ve güvenliğini sağlamak için birkaç yapılandırma gerçekleştirmeye geçeceğiz; orijinal yapılandırma dosyasının /etc/vsftpd/vsftpd.conf yedeğini alarak başlayalım. :

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig

Daha sonra yukarıdaki yapılandırma dosyasını açın ve aşağıdaki seçenekleri bu karşılık gelen değerlerle ayarlayın:

anonymous_enable=NO             # disable  anonymous login
local_enable=YES		# permit local logins
write_enable=YES		# enable FTP commands which change the filesystem
local_umask=022		        # value of umask for file creation for local users
dirmessage_enable=YES	        # enable showing of messages when users first enter a new directory
xferlog_enable=YES		# a log file will be maintained detailing uploads and downloads
connect_from_port_20=YES        # use port 20 (ftp-data) on the server machine for PORT style connections
xferlog_std_format=YES          # keep standard log file format
listen=NO   			# prevent vsftpd from running in standalone mode
listen_ipv6=YES		        # vsftpd will listen on an IPv6 socket instead of an IPv4 one
pam_service_name=vsftpd         # name of the PAM service vsftpd will use
userlist_enable=YES  	        # enable vsftpd to load a list of usernames
tcp_wrappers=YES  		# turn on tcp wrappers

5. Şimdi FTP'yi, /etc/vsftpd.userlist kullanıcı listesi dosyasına göre kullanıcılara FTP erişimine izin verecek/reddetecek şekilde yapılandırın.

Varsayılan olarak, userlist_file=/etc/vsftpd.userlist'te listelenen kullanıcıların giriş erişimi reddedilir ve userlist_deny seçeneği EVET olarak ayarlanırsa, userlist_enable=EVET.

Ancak, userlist_deny=NO ayarı değiştirir; bu, yalnızca userlist_file=/etc/vsftpd.userlist'te açıkça listelenen kullanıcıların oturum açmasına izin verileceği anlamına gelir.

userlist_enable=YES                   # vsftpd will load a list of usernames, from the filename given by userlist_file
userlist_file=/etc/vsftpd.userlist    # stores usernames.
userlist_deny=NO   

Hepsi bu kadar değil, kullanıcılar FTP sunucusuna giriş yaptıklarında, chroot'lu bir hapishaneye yerleştirilirler; bu, yalnızca FTP oturumu için ana dizin olarak görev yapacak yerel kök dizindir.

Daha sonra, aşağıda açıklandığı gibi, FTP kullanıcılarının FTP kullanıcıları için Ana dizinlere (yerel kök) dizine nasıl chroot yapılacağına ilişkin iki olası senaryoya bakacağız.

6. Şimdi, FTP kullanıcılarını Ana dizinleriyle sınırlamak için aşağıdaki iki seçeneği ekleyin.

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user=YES, varsayılan ayarlarla yerel kullanıcıların oturum açtıktan sonra ana dizinleri olan bir chroot hapishanesine yerleştirileceği anlamına gelir.

Ayrıca vsftpd varsayılan olarak güvenlik nedeniyle chroot jail dizininin yazılabilir olmasına izin vermez, ancak bu ayarı geçersiz kılmak için allow_writeable_chroot=YES seçeneğini kullanabiliriz.

Dosyayı kaydedin ve kapatın.

SELinux ile FTP Sunucusunun Güvenliğini Sağlama

7. Şimdi, FTP'nin kullanıcının ana dizinindeki dosyaları okumasına izin vermek için aşağıdaki SELinux boolean'ını ayarlayalım. Bunun başlangıçta şu komut kullanılarak yapıldığını unutmayın:

setsebool -P ftp_home_dir on

Ancak ftp_home_dir yönergesi şu hata raporunda açıklandığı gibi varsayılan olarak devre dışı bırakılmıştır: https://bugzilla.redhat.com/show_bug.cgi?id=1097775.

Şimdi, FTP'nin kullanıcının ana dizinini okumasına/yazmasına izin verecek şekilde SELinux kuralını ayarlamak için semanage komutunu kullanacağız.

semanage boolean -m ftpd_full_access --on

Bu noktada, yukarıda yaptığımız tüm değişikliklerin geçerli olması için vsftpd'yi yeniden başlatmamız gerekiyor:

systemctl restart vsftpd

Adım 4: FTP Sunucusunu Test Etme

8. Şimdi useradd komutuyla bir FTP kullanıcısı oluşturarak FTP sunucusunu test edeceğiz.

useradd -m -c “Ravi Saive, CEO” -s /bin/bash ravi
passwd ravi

Daha sonra aşağıdaki gibi echo komutunu kullanarak ravi kullanıcısını /etc/vsftpd.userlist dosyasına eklemeliyiz:

echo "ravi" | tee -a /etc/vsftpd.userlist
cat /etc/vsftpd.userlist

9. Şimdi yukarıdaki ayarlarımızın doğru çalışıp çalışmadığını test etme zamanı. Anonim girişleri test ederek başlayalım, aşağıdaki ekran görüntüsünden anonim girişlere izin verilmediğini görebiliriz:

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : anonymous
530 Permission denied.
Login failed.
ftp>

10. Ayrıca /etc/vsftpd.userlist dosyasında listelenmeyen bir kullanıcıya oturum açma izni verilip verilmeyeceğini de test edelim, ancak ekran görüntüsündeki gibi bir durum söz konusu değildir. altında:

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : aaronkilik
530 Permission denied.
Login failed.
ftp>

11. Şimdi /etc/vsftpd.userlist dosyasında listelenen bir kullanıcının giriş yaptıktan sonra gerçekten ana dizinine yerleştirilip yerleştirilmediğini son bir kontrol yapın:

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

Bu seçeneği yalnızca ne yaptığınızı tam olarak biliyorsanız etkinleştirin. Bu güvenlik etkilerinin vsftpd'ye özel olmadığını, yerel kullanıcıları chroot hapishanelerine koymayı teklif eden tüm FTP arka plan programları için geçerli olduğunu belirtmek önemlidir.

Bu nedenle bir sonraki bölümde farklı bir yazılamayan yerel kök dizin oluşturmanın daha güvenli bir yoluna bakacağız.

Adım 5: Farklı FTP Kullanıcı Ana Dizinlerini Yapılandırma

12. vsftpd yapılandırma dosyasını tekrar açın ve aşağıdaki güvenli olmayan seçeneği yorumlayarak başlayın:

#allow_writeable_chroot=YES

Daha sonra kullanıcı için alternatif yerel kök dizini oluşturun (ravi, sizinki muhtemelen farklıdır) ve tüm kullanıcıların bu dizine yazma izinlerini kaldırın:

mkdir /home/ravi/ftp
chown nobody:nobody /home/ravi/ftp
chmod a-w /home/ravi/ftp

13. Ardından, yerel kök altında kullanıcının dosyalarını depolayacağı bir dizin oluşturun:

mkdir /home/ravi/ftp/files
chown ravi:ravi  /home/ravi/ftp/files
chmod 0700 /home/ravi/ftp/files/

Ardından vsftpd yapılandırma dosyasına aşağıdaki seçenekleri bu değerlerle ekleyin/değiştirin:

user_sub_token=$USER         # inserts the username in the local root directory 
local_root=/home/$USER/ftp   # defines any users local root directory

Dosyayı kaydedin ve kapatın. Bir kez daha hizmeti yeni ayarlarla yeniden başlatalım:

systemctl restart vsftpd

14. Şimdi tekrar son bir test yapın ve kullanıcının yerel kök dizininin, onun ana dizininde oluşturduğumuz FTP dizini olduğunu görün.

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

Bu kadar! Bu makalede, CentOS 7'de bir FTP sunucusunun nasıl kurulacağını, yapılandırılacağını ve güvenliğinin nasıl sağlanacağını açıkladık; bu kılavuzla ilgili olarak bize geri bildirimde bulunmak/bu konuyla ilgili yararlı bilgileri paylaşmak için aşağıdaki yorum bölümünü kullanın.

Önerilen Okuma: ProFTPD Sunucusunu RHEL/CentOS 7'ye yükleyin

Bir sonraki makalede, CentOS 7'de SSL/TLS bağlantılarını kullanarak bir FTP sunucusunun güvenliğini nasıl sağlayacağınızı, o zamana kadar TecMint'e bağlı kalmanızı göstereceğiz.