vsftpd - Çok güvenli bir FTP sunucusuna giriş

ArticleCategory:

System Administration

AuthorImage:[Ein Bild von Dir]

[Photo of the Author]

TranslationInfo:[Author + translation history. mailto: or http://homepage

original in de Mario M. Knopf

de to en Jürgen Pohl

en to tr:Erdal Mutlu

AboutTheAuthor:

Mario, Linux, ağlar ve güvenlik ile ilgili diğer konularla uğraşmaktan çok keyif alıyor. Boş zamanlarında neo5k.org ve linuxwallpapers.de sanaldoku yörelerinin bakımıyla ilgilenmektedir.

Abstract:

Bu yazı "Very Secure FTP Daemon" (Çok güvenli FTP sunucusu) giriş oluşturmaktadır. Başlangıçta FTP ve vsftpd hakkındaki genel bilgiler ile başlıyorum. Daha sonra yükleme, yapılandırma ve vsftpd'nin çalıştırma seçeneklerine bir göz atacağız. Sonuç olarak da kısa fonksiyonlar testi ile konuyu kapatacağız.

ArticleIllustration:[Das Titelbild des Artikels]

vsftp

ArticleBody:[The main part of the article]

Giriş

Dosya aktarma protokolün (File Transfer Protocol) amacı işletim sistemi ortamlarından bağımsız olarak internette dosya aktarmaktır ve istemci/sunucu mimarisine dayalıdır. RFC 959[1]'e göre FTP'nin biri veri aktarımı (TCP 20 nolu bağlantı noktası) ve diğeri de denetim (TCP 21 nolu bağlantı noktası) olmak üzere, iki kanaldan oluşmasını öngermektedir. Denetim kanalı üzerinden istemci ile sunucu veri aktarımına başlamak için çeşitli kumut alış verişinde bulunmaktadır.
Bir FTP bağlantısı şu dört adımı içermektedir:

FTP veri aktarımında, verilerin gidişini sağlayan bağlantı denetimli TCP (Transmission Control Protocol) protokolünü kullanmaktadır. Dolayısıyla, FTP'nin veri aktarırken paket kaybı veya hata denetimi konularında endişe etmesine gerek yoktur. Kısaca ifade etmek gerekirse, TCP paketlerin bir defa,hatasız ve düzgün sırada aktarıldğını sağlamaktadır.

Veri aktarımı üç farklı türlü olmaktadır. Stream'in (duraksız,akım) sonunu dosya sonu (end-of-file EOF) belirlerken, diğer ikisinin sonunu da kayıt sonu (end-of-record EOR) belirlemektedir.

Bunun yanısıra iki farklı aktarma kipi vardır:

ASCII kipi metin dosyaların aktarımında kullanılmaktadır. Binary (ikili) kipinde de program ve benzeri dosyaların aktarımında kullanılmaktadır. Şimdilerde kullanıcı bu iki kip arasında değiştirme yapmasına gerek yoktur, çünkü FTP istemcileri bunu otomatik olarak yapmaktadır.

Kullanıcı kimliklendirme sırasındaki kullanıcı adı ve geçişsözcüğü kriptolanmadığı için buradaki olası güvenlik riskine işaret etmek çok önemlidir. Bu konu FTP hakkındaki güvenlik kaygılarının nedenini oluşturmaktadır. Kasım 1997'deki RFC 2228[2] yayımlanmasıyla FTP'ye güvenlik odaklı eklemeler yapıldı.

vsftpd

vsftpd, Linux, ?BSD, Solaris, HP-UX ve IRIX gibi UNIX ve benzeri işletim sistemlerinde çalışan bir FTP sunucusudur. Diğer birçok FTP sunucusunda eksik olan birçok özelliği desteklemekedir:

vsftpd "very secure FTP daemon" (çok güvenli FTP sunucusu) isminden de anlaşılacağı üzere, programın geliştiricisi olan Chris Evans'ın en önemli endişesinin güvenlik olduğu hemen anlaşılmaktadır. Tasarımda ve geliştirmenin başından beri yüksek güvenlik FTP sunucusunun odak noktası olmuştur.

Sunucunun güvenlik odaklı olmasına bir örnek, vsftpd'nin yeni ana dizinini(1) atanmış ve bu dizin dışındaki program ve dosyalara ulaşımın olmadığı, başka bir deyişle bu dizine 'kilitlendiği' denilen, chroot kipinde çalışıyor olması gösterilebilir. FTP sunucusu kırıldığında, kırıcı sistemin diğer kısımlarından ayrılmış olacak ve daha fazla zarar vermesi engellenmiş olacaktır. chroot hakkında daha fazla bilgi için [3] nolu yazıya bakınız. [4] nolu yazı vsftpd'ye özgü güvenlik konuları hakkındadır.

Birçok özelliği ve yüksek güvenlik gereksinimlerini karşılamasıyla FTP sunucuları arasından vsftpd oldukça yukarılarda yer almaktadır.

Yükleme

vsftpd'nin yüklenmesi oldukça kolaydır. Ana Linux dağıtıcıların çoğunda RPM paketi olarak yer almakta ve birçok durumda da zaten yüklenmiştir. Yoksa kaynak kodu [6] nolu adresten indirebilir ve yükleyebilirsiniz.

Kaynak kodun olduğu paketi indirdikten sonra, tar dosyasını açın ve ilgili dizine geçerek make komutunu çalıştırın. Bunun yapılışı aşağıda gösterilmiştir:

neo5k@phobos> tar xzvf vsftpd-x.x.x.tar.gz
neo5k@phobos> cd vsftpd-x.x.x
neo5k@phobos> make

Bundan önce, "nobody" kullanıcısının ve "/usr/share/empty" dizinin var olup olmadığına bakın. Eğer, yoksa bunları yaratmanız gerekir. Eğer, anonymous kullanıcısına erişim hakkı vermeyi planlıyorsanız "ftp" kullanıcısını ev dizini "/var/ftp" olacak şekilde yaratmanız gerekecektir. Bunu aşağıdaki komutları çalıştırmakla yapabilirsiniz:

neo5k@phobos> mkdir /var/ftp
neo5k@phobos> useradd -d /var/ftp ftp

Güvenlik nedenlerinden dolayı "/var/ftp" dizini "ftp" kullanıcısına ait olmaması gibi o dizinde yazma hakkınının da bulunmaması gerekir. Aşağıdaki iki komutla kullanıcıyı değiştirebilir ve diğer kullanıcıların erişim haklarını kaldırabilirizi:

neo5k@phobos> chown root.root /var/ftp
neo5k@phobos> chmod og-w /var/ftp

Tüm ön koşullar yerine getirildiğine göre vsftp sunucusunun yüklemesine geçebiliriz:

neo5k@phobos> make install

Man sayfaları ile program sistemdeki ilgili yerlere yerlere kopyalanabilir. Beklenmedik bir karışıklık durumunda bu işlem elle de yapılabilir.

neo5k@phobos> cp vsftpd /usr/sbin/vsftpd
neo5k@phobos> cp vsftpd.conf.5 /usr/share/man/man5
neo5k@phobos> cp vsftpd.8 /usr/share/man/man8

Bu noktada yapılandırma dosyası örneğimiz değişmediğinden ve konuya girişi kolayaştıracağından bir komut daha çalıştırmamız gerekir:

neo5k@phobos> cp vsftpd.conf /etc

Yapılandırma

Yapılandırma dosyasını "/etc/vsftpd.conf" dur. Hemen hemen tüm yapılandırma dosyalarına olduğu gibi '#' den sonraki kısım açıklamadır.

# Açıklama satırı

Örnek bir yapılandırma şu şekilde olabilir:

# Anonymus FTP-access permitted? YES/NO
anonymous_enable=NO
 
# Permit anonymus upload? YES/NO
anon_upload_enable=NO
 
# Permission for anonymus users to make new directories? YES/NO
anon_mkdir_write_enable=NO
 
# Permission for anonymus users to do other write operations - like renaming or deleting? YES/NO
anon_other_write_enable=NO
 
# Log on by local users permitted? YES/NO
local_enable=YES
 
# Shall local users be locked into their home directory? YES/NO
chroot_local_user=YES
 
# Highest permitted data transfer rate in bytes per second for local logged on users. Default = 0 (unlimited)
local_max_rate=7200
 
# General write permission? YES/NO
write_enable=YES
 
# Enable messages when changing directories? YES/NO
dirmessage_enable=YES
 
# Welcome banner at users logon.
ftpd_banner="Welcome to neo5k's FTP service."
 
# Activate logging? YES/NO
xferlog_enable=YES
 
# Logging of all FTP activities? YES/NO
# Careful! This can generate large quantities of data.
log_ftp_protocol=NO
 
# Confirm connections are established on port 20 (ftp data) only. YES/NO
connect_from_port_20=YES
 
# Timeout during idle sessions
idle_session_timeout=600
 
# Data connection timeout
data_connection_timeout=120
 
# Access through Pluggable Authentication Modules (PAM)
pam_service_name=vsftpd
 
# Standalone operation? YES/NO - depending on operation mode (inetd, xinetd, Standalone)
# The author's FTP service is being startet with xinetd, therefore the value here is NO.
listen=NO

FTP sunucusunu başlatma

vsftpd üç farklı şekilde çalışabilir. Biri inetd veya xinetd, diğeri de tek başınadır.

inetd

Eğer, FTP sunucusu inetd ile birlikte çalışacaksa, bir metin işlemcisiyle "/etc/inetd.conf" yapılandırma dosyasını açıyoruz:

neo5k@phobos> vi /etc/inetd.conf

FTP servisi ile ilgili satırları bulup vsftpd'in önündeki yorum işaretini kaldırıyoruz. Satır aşağıdaki gibi gözükmelidir:
# ftp   stream   tcp   nowait   root   /usr/sbin/tcpd   in.ftpd
ftp   stream   tcp   nowait   root   /usr/sbin/tcpd   vsftpd

xinetd

vsftp'yi inetd yerine ondan daha güncel olan xinetd ile çalıştırılması önerilmektedir. Yapılan bazı güncelimler, isteklerin çetelerinin tutulması, erişim denetimleri, bir servisin belli bir ağ arayüzünde çalıştırılması vs. xinetd hakkında çok güzel bir tanıtım belgesi [7] nolu adresten elde edilebilir. xinetd'in yapılandırması aşağıdaki gibi gözükmelidir:
# vsftp daemon.
service ftp
{
     disable = no
     socket_type = stream
     wait = no
     user = root
     server = /usr/sbin/vsftpd
     per_source = 5
     instances = 200
     no_access = 192.168.1.3
     banner_fail = /etc/vsftpd.busy_banner
     log_on_success += PID HOST DURATION
     log_on_failure += HOST
     nice = 10
}
    

Tek başına çalışma

vsftp sunucusunu tek başına da çalıştırmak olasıdır. Bunun için tekrar "/etc/vsftpd.conf" yapılandırma dosyasını açıp aşağıdaki değişiklikleri yapıyoruz:

# Shall the vsftp daemon run in standalone operation? YES/NO
listen=YES

Bu değişiklikten sonra sunucuyu aşağıdaki gibi başlatabilirisiniz:

neo5k@phobos> /usr/sbin/vsftpd &

Sunucunun bulunduğu dizin PATH çevre değişkeninde düzgün bir şekilde yeralıyorsa, sunucuyu aşağıdaki gibi de başlatabilirisiniz:

neo5k@phobos> vsftpd &

Aşağıdaki komutla sunucunun arama yoltanımında yer alıp almadığını denetleyebilirsiniz:

neo5k@phobos> echo $PATH
/usr/sbin:/bin:/usr/bin:/sbin:/usr/X11R6/bin

vsftp'nin tek başına başlatılması durumunda inetd veya xinetd tarafından başlatılmamasından emin olun.

Çalışma testi

Başarılı bir yükleme ve yapılandırmadan sonra, FTP sunucusuna olan erişimi deneyebiliriz.
neo5k@phobos> ftp phobos
Connected to phobos
220 "Welcome to neo5k's FTP service."
Name (phobos:neo5k): testuser
331 Please specify the password.
Password:
230 Login successful
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -l
229 Entering Extended Passive Mode
150 Here comes the directory listing
drwxr-xr-x      11  500      100        400  May 07 16:22  docs
drwxr-xr-x       9  500      100        464  Feb 01 23:05  hlds
drwxr-xr-x      39  500      100       4168  May 10 09:15  projects
226 Directory send OK.
ftp>

Sonuç

Fark ettiğimiz gibi vsftp sunucusunun ne yüklenmesinde ne de yapılandırmasında zorluk yoktur. Sunucu birçok özellik ve yüksek derece güvenlik sağlamaktadır.

Tabii bu yazı, vsftpd'nin sunduğu sayısız seçenekler göz önünde bulundurursa, bu yazı sadece kısa bir giriş niteliğinde olduğunu hemen söyleyebiliriz. vsftpd'yi yakından incelemek isteyenler, projenin[6] sanaldoku yöresini ziyaret edebilir ve oradaki belgelerden yararlanabilirler.

Bağlantılar

[1] ftp://ftp.rfc-editor.org/in-notes/rfc959.txt [RFC 959 - File Transfer Protocol]
[2] ftp://ftp.rfc-editor.org/in-notes/rfc2228.txt [RFC 2228 - FTP Security Extensions]
[3] linuxfocus.org: 225 nolu yazı, Ocak 2002 [chroot]
[4] http://vsftpd.beasts.org/DESIGN [Security vsftpd]
[5] http://www.wu-ftpd.org/ [WU-FTPD]
[6] http://www.vsftpd.beasts.org/ [Home of vsftpd]
[7] linuxfocus.org: 175 nolu yazı, Kasım 2000 [xinetd]