Bezpečný FTP server na Ubuntu 10.04 LTS

Potřeboval jsem rozjet zabezpečený FTP server pro jednoho uživatele. To znamená žádný anonymní přístup, přístup pouze pro lokálního uživatele. Jelikož byly nutné nějaké ty úpravy v konfiguračních souborech, tak se o to s vámi podělím.

Použil jsem vsftpd server.

# sudo apt-get install openssl vsftpd

Vytvořil jsem uživatele "upload" s domovským adresářem jinde než v /home.

# useradd -d /mnt/bigdata/UPLOAD -s /bin/false upload
# chown upload /mnt/bigdata/UPLOAD
# passwd upload

Nyní zapeklitý krok, který mě stál 20 minut bádání. Je potřeba vypnout kontrolu shellu pro uživatele. Toto se sice dá vypnout přímo v konfiguračním souboru vsftpd (check_shell=NO), ale pakliže vsftpd použivá PAM (v Ubuntu standardně ano), tak by to nefungovalo. Je potřeba zakomentovat řádek v souboru /etc/pam.d/vsftpd (ten poslední) takto:


# Standard behaviour for ftpd(8).
auth    required        pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
# Standard pam includes
@include common-account
@include common-session
@include common-auth
#auth   required        pam_shells.so


Nyní můžeme přistoupit ke konfiguraci vsftpd. Standardní konfigurace až na jednu výjimku bude vyhovovat, takže nejprve zeditujeme soubor /etc/vsftpd.conf, projdeme si nastavení a nastavíme tyto hodnoty:

# Vypnout anonymni ucet

anonymous_enable=NO

# Zapnout lokalni ucty

local_enable=YES
# Zapis ano
write_enable=YES


# Dalsi nastaveni dle libosti (neni nutne ale nic menit)


# Nasledujici radek ZAKOMENTUJTE
#rsa_cert_file=/etc/ssl/private/vsftpd.pem


Nyní by FTP server měl fungovat lokálně s lokálními účty. Můžete to vyzkoušet příkazem telnet localhost 21 a zadáním příkazů USER xxx a PASS xxx. Poté dejte QUIT.

Nyní nastavíme zabezpečení (SSL/TLS), jeho vynucení a nastavíme správné certifikáty (v default konfiguraci nebyla cesta k certifikátu správná):


# Certifikaty z Ubuntu LTS 10.04
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key


# Aktivace SSL a nastaveni (pouze pro lokalni)
ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES


# Omezeni portu kvuli firewallu
pasv_min_port=12000
pasv_max_port=12100


Nemusíte žádné certifikáty generovat - použil jsem ty základní, které se automaticky generují při instalaci balíku openssl. Restart.

# service vsftpd restart

A je to. Nyní zbývá nastavit firewall, aby byl server dostupný z internetu. Může to být ADSL modem nebo WIFI AP, cokoli. Stačí vám přesměřovat na lokální server následující externí porty: 21, 12000-12100.

Nyní se můžete připojit z internetu. Nezapomeňte použít TLS/SSL připojení (normální nebude fungovat) a také pasivní režim.
comments powered by Disqus
twitter.com linkedin.com
google.com/+ facebook.com
flickr.com youtube.com