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.