
VSFTPD - bezpečný ftp daemon pre každého
S ftp službami sa stretávame každodenne, či už pri získavaní súborov z internetu alebo pri updatovaní internetových prezentácií a podobne. Existuje mnoho spôsobov, ako túto službu realizovať, dôležité je však dbať na bezpečnosť.
V poslednom čase sa objavilo viacero závažných chýb v spojení s ftp daemonmi, ktoré vykonali nemalý rozruch, mnohí administrátori začali hľadať bezpečné alternatívy. Už dlhšiu dobu je však k dispozícii ftp daemon s názvom vsftpd, ktorého hlavným cieľom je zabezpečiť vysoký výkon pri vysokej miere bezpečnosti s možnosťou širokej konfigurácie a nastavení jednotlivých užívateľských politík. Pri jeho tvorbe boli brané do úvahy všetky aspekty pre dokonalú vnútornú architektúru zabezpečujúcu vhodný bezpečnostný model s použitím všetkých možností, ktoré nám linux ponúka. Pozrime sa teda na neho bližšie.
1. Inštalácia
Po získaní zdrojového kódu na adrese ftp://ferret.lmh.ox.ac.uk/pub/linux/vsftpd-1.0.1.tar.gz je potrebné vykonať dekomprimáciu a uskutočniť skompilovanie. Nenájdete tu žiadne konfiguračné skripty, konfigurácia na väčšine strojov by mala prebehnúť bezproblémovo.
tar xzvf vsftpd-1.0.1.tar.gz
cd vsftpd-1.0.1
make
Nasleduje distribúcia potrebných súborov na ich príslušné pozície. Po spustení make install sú rozdistribuované do filesystému nasledujúce súbory:
/usr/local/sbin/vsftpd
/usr/local/man/man8/vsftpd.8
/usr/local/man/man5/vsftpd.conf.5
/etc/xinetd.d/vsftpd
Teraz je potrebné skontrolovať, či sú v systéme zadefinovaní užívatelia ftp, ftpsecure a nobody, ktorých je potrebné v prípade ich neexistencie doplniť. Takisto je vhodné pripraviť si adresár /usr/share/empty s nulovým obsahom pre neskoršie použitie
Ako ste si povšimli, vsftpd nie je k dispozícii ako standalone daemon, pracuje v spolupráci s ľubovoľným superserverom. Inštalačný skript priamo podporuje xinetd, pre iné bude potrebné príslušnú konfiguráciu previesť ručne. Pre xinetd je pripravená nasledujúca implicitná konfigurácia, ktorú je vhodné upraviť si pre vlastné podmienky s nastavením príslušných obmedzení ako napríklad počet súčasných spojení a podobne.
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/vsftpd
nice = 10
disable = no
}
Pri používaní vsftpd okrem anonymného prístupu aj pre prístup lokálnych užívateľov je vhodné využiť authentikačný mechanizmus PAM pre ktorý je pripravený konfiguračný súbor s nasledovným obsahom:
#%PAM-1.0
auth required /lib/security/pam_listfile.so \
item=user sense=deny file=/etc/ftpusers onerr=succeed
auth required /lib/security/pam_pwdb.so shadow nullok
auth required /lib/security/pam_shells.so
account required /lib/security/pam_pwdb.so
session required /lib/security/pam_pwdb.so
2. Konfigurácia
Teraz je vhodný časť prejsť na konfiguráciu daemonu. Implicitne sa pre nastavenie prevádzkových parametrov používa základný konfiguračný súbor /etc/vsftpd.conf, ktorého príklad nájdete pribalený priamo so zdrojovým kódom. Pozrieme sa teda na ponúkané možnosti.
Najprv je potrebné rozhodnúť sa pre ktorú skupinu užívateľov budeme ftp služby poskytovať, čím vlastne vyšpecifikujeme základné použitie. Pod lokálnymi užívateľmi sa rozumejú užívatelia so zápisom v /etc/passwd.
anonymous_enable = YES | NO
local_enable = YES | NO
V prípade povolenia anonymného prístupu je vhodné špecifikovať potrené parametre pre túto prevádzku
anon_root <dir>
anon_upload_enable = YES | NO
chown_uploads = YES | NO
chown_username=ftpadmin
V prvom rade je potrebné špecifikovať root adresár pre anonymných užívateľov, na ktorý sa po prihlásení uskutoční chroot. Parametrom anon_upload_enable povoľujeme v prípade potreby možnosť uploadu súborov anonymným užívateľom, príslušné vlastníctvo takto zapísaných súborov je možné regulovať prostredníctvom parametrov chown_uploads a chown_username. Takisto môžeme špecifikovať jednotlivé povolenia k činnostiam a obmedzenie dátového toku.
anon_mkdir_write_enable = YES | NO
anon_other_write_enable = YES | NO
anon_world_readable_only = YES | NO
anon_max_rate= rate b/s
anon_umask=077
Prostredníctvom parametra anon_mkdir_write_enable umožňujeme anonymným užívateľom vytvárať nové adresáre, anon_other_write_enable navyše povoľuje iné operácie vyžadujúce zápis ako premenovávanie a mazanie. V prípade povoleného zápisu je definovaná umask pre nové súbory. Parameter anon_world_readable_only umožňuje špecifikovať možnosť downloadu súborov anonymným užívateľom, ktoré majú nastavený príznak r pre other. Navyše s použitím parametra anon_max_rate je možné obmedziť maximálny dátový tok v b/s pre anonymných užívateľov.
Pri uploadoch je možné automaticky vykonať zmenu vlastníka pre zabezpečenie novovložených súborov, čo je určite vhodný bezpečnostný prostriedok, k čomu slúžia nasledujúce dva parametre:
chown_uploads = YES | NO
chown_username=ftpadmin
Pre reguláciu možnosti anonymného prihlásenia na základe poskytnutého hesla máme nasledovnú možnosť.
deny_email_enable = YES | NO
banned_email_file = /etc/vsftpd.banned_emails
Anonymní užívatelia sa identifikujú namiesto hesla pri prihlasovaní svojou emailovou adresou. Definíciou zakázaných emailov definičnom súbore /etc/vsftpd.banned_emails je možné zamedziť prístup k systému, čim môžeme dosiahnuť určité filtrácie podľa lokálnej politiky.
Pre nastavenie jednotlivých timeoutov pre automatické uzavretie otvorených spojení sú k dispozícii dva parametre, reprezentujúce príslušné časové intervaly:
idle_session_timeout=600
data_connection_timeout=120
Jednotlivé prenosy je možné logovať do príslušných logových súborov.
xferlog_enable = YES | NO
xferlog_file=/var/log/vsftpd.log
log_ftp_protocol = YES | NO
xferlog_std_format = YES | NO
xferlog_enable umožňuje tvorbu xferlog súboru so zápisom do súboru definovaného parametrom xferlog_file. Navyše tu máme možnosti zapisovania celkovej komunikácie pri použití parametra log_ftp_protokol čo je vhodné pre vyladenie a dignostiku. Pre možnosť kompatibility je tu voľba xferlog_std_format umožňujúca zápis xferlogu vo formáte wu-ftpd pre možnosť využitia existujúcich nástrojov na analýzu xferlogu.
write_enable = YES | NO
Parameter write_enable určuje, či je možné uskutočňovať nasledujúce príkazy: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE a SITE. V prípade, že chceme vsftpd používať pre ukladanie súborov na server, je nevyhnutné túto voľbu aktivovať.
local_umask=077
Pre nastavenie flagov uploadnutých súborov lokálnymi užívateľmi je k dispozícii definícia umask. Implicitná hodnota je 077, avšak pre zabezpečenie prístupnosti takto vložených súborov pri implementáciách ftp služby pre aktualizáciu webových prezentácií je vhodné zmeniť ju na 022.
local_max_rate= rate b/s
Ako pri anonymných užívateľoch, celkový objem trafficu tvoreného lokálnymi užívateľmi je možné obmedziť na hornú hranicu špecifikovaním v b/s.
Veľmi používanou voľbou je možnosť chrootovania.
chroot_local_user = YES | NO
chroot_list_enable = YES | NO
chroot_list_file=/etc/vsftpd.chroot_list
secure_chroot_dir=/usr/share/empty
Tu máme viacero možností. Buď budeme chrootovať iba vybraných užívateľov definovaných v súbore /etc/vsftpd.chroot_list kde sa na každom riadku nachádza meno užívateľa a adresár, do ktorého sa má chroot uskutočniť, alebo použijeme globálne chrootovanie lokálnych užívateľov do ich domovských adresárov. Už pri inštalácii sme si hovorili, že je potrebné vytvoriť si adresár /usr/share/empty. Tento adresár by nemal byť prístupný pre zápis užívateľovi ftp. Práve do tohto adresára sa vykonáva chroot v prípade nulovej potreby prístupu k lokálnym súborom pre vyššie zabezpečenie.
nopriv_user=ftpsecure
Pre vyššiu bezpečnosť slúži aj definícia nopriv_user, ktorá špecifikuje neprivilegovaného užívateľa pre bezpečnostné účely. Je vhodné použiť užívateľa iného ako nobody, takže je vhodné pre tento účel si vytvoriť v systéme špeciálne konto, napríklad s názvom fpsecure.
pasv_enable = YES | NO
port_enable = YES|NO
ascii_upload_enable = YES | NO
ascii_download_enable = YES | NO
async_abor_enable = YES | NO
connect_from_port_20 = YES | NO
Pre regulovanie spojení a komunikácie máme k dispozícii viacero parametrov. pasv_enable a port_enable nám špecifikujú jednotlivé povolené možnosti pre dosiahnutie nového spojenia, ascii_upload_enable a ascii_download_enable umožňujú používanie ascii prenosov, async_abor_enable reguluje možnosť asynchrónneho ukončenia prenosu, čo však v súčasnosti už nie je priveľmi používaná možnosť, aj keď niektorí ftp klienti s obľubou túto možnosť používajú.
Medzi posledné možnosti môžeme zaradiť parametre:
dirmessage_enable = YES | NO
message_file=.message
ls_recurse_enable = YES | NO
one_process_model = YES | NO
pam_service_name = ftp
dirmessage_enable aktivuje možnosť zobrazovania správ umiestnených v message_file pri vstupe do príslušného adresára, čo môže byť vhodné pre umiestnenie rôznych informácií. ls_recurse_enable špecifikuje možnosť výpisu súborov vo všetkých vnorených podadresároch. Štandardne je táto voľba vypnutá kvôli možnosti vyššieho zaťaženia CPU a diskového systému na rozsiahlych ftp stromoch, niektorí ftp klienti, ako napríklad mirror a ncftp môžu mať pri zakázaní tejto možnosti problémy. pam_service_name určuje identifikáciu vsftpd pre authentikačnú vrstvu PAM s preddefinovanou hodnotou ftp. V prípadoch nutnosti zmeny identifikácie je možné túto možnosť využiť. Pre zvýšenie výkonu pri kerneloch rady 2.4 je možné využiť parameter one_process_model pri čiastočnom znížení bezpečnosti.
3. Vyladenie a záver
Pre zabezpečenie vyššieho výkonu sú na systémoch doporučované drobné úpravy. Ak systém aktívne nevyužíva nis, je vhodné v etc/nsswitch.conf pri definíciách passwd, shadow a group odstrániť voľby nis a nisplus pre zníženie pamäťových nárokov zavádzaním nepoužívaných knižníc. Pri používaní vsftpd na kerneloch rady 2.2 a vyššie je pre prenos využívaná funkcia sendfile pre zabezpečenie nižšieho vyťaženia procesoru a tým úsporu strojového času, takže ak nič tomu nebráni, je vhodné vykonať upgrade starších kernelov. V prípadoch veľmi frekventovaných ftp serverov je na čiastočný úkor bezpečnosti možné využiť parameter one_process_model.
Ako vidno, vsftpd je veľmi flexibilný a konfigurovateľný ftp server, vhodný pre implementáciu do skoro každého systému. Jediným nedostatkom, ktorý možno podotknúť je nemožnosť spustenia v standalone móde s natívnou podporou virtualhostov. Vývoj však ešte neskončil, možno sa dočkáme aj tejto možnosti.
|