FTP —
FTP è un modo comodo anzi molto comodo per trasferire grosse moli di dati.
La sua principale caratteristica è la stabilità una volta avviata una sessione di ftp a meno di cadute di linea o di interruzioni di servizio (per la serie si spegne il server) arriva sempre a buon fine.
A volte in ditta succede che si debbano trasferire dei filmati di macchine o presentazioni che sono pesantissime la soluzione canonica e’ fare il classico cd/dvd e spedire con corriere, ma un server FTP può essere una valida alternativa.
Il grosso contro di un server FTP e’ che tutto passa in chiaro, password messaggi files e questo è MALE.
Inoltre la macchina non è direttamente su internet ma bensì all’interno della lan, infatti le chiamate da internet alla porta 21 vengono reindirizzate dal firewall a una macchina specifica e questo aggrava ulteriormente la questione sicurezza.
Per cercare di ovviare alla cosa ho pensato di mettere il servizio ftp in chroot.
Premetto che questa realizzazione è volutamente fatta in modo da rendere difficile la vita a chi volesse “sfondare” il servizio, infatti oltre al chroot fatto con debootstrap la directory in cui gira il tutto (/jail) è vincolata da ACL posix, non è permesso il login anonimo, lo stesso utente che puo’ operare ha limitazioni ed inoltre nella configurazione di proftp è stata imposta la condizione di chrooting alla home stessa dell’utente (~), la sicurezza “sicura” non esiste, ma almeno il rendere dura la vita a chi non ha nulla di meglio da fare che far vedere quanto sia bravo si può fare.
Da questo punto in poi tutto è riferito all’ambiente chrootato.
Per pura comodità ho creato un utente archivio con pw archivio con home /home/ftp e per complicare ulteriormente la vita ai probabili malintenzionati ho anche imposto come /bin/false la shell dell’utente, archivio è la login che diamo ai clienti ed è come vedremo di seguito limitata.
quindi nel file passwd troveremo una riga come questa:
archivio:x:1000:1000:,,,:/home/ftp:/bin/false
/bin/false va aggiunto anche al file shells in /etc.
Mi serviva però una login che non fosse root per poter gestire senza particolari problemi le direcory e ho quindi creato l’utente manager con password $unabellapasswordlungaecomplicata che può fare tutto.
Ho quindi creato due directory sotto /home/ftp upload e download e ho imposto con le acl quanto segue:
setfacl -R -d -m u:archivio:rx download/
setfacl -R -d -m u:manager:rwx download/
setfacl -R -d -m u:manager:rwx upload/
setfacl -R -d -m u:archivio:wx upload/
in altre parole l’utente manager può tutto in entrambe le directory, l’utente archivio può leggere nella directory download ma non scrivere, viceversa può di contro scrivere ma non leggere nella directory upload.
Una spiegazione mi pare opportuna per i meno smaliziati, la directory download e’ di pubblico dominio per tutti quelli che hanno la login di archivio, quindi è nostra cura mettere in quella directory materiale non riservato ne sensibile, di contro la directory upload può contenere documenti delicati e non è pensabile che il cliente B possa leggere quello che ci ha spedito via FTP il cliente A che ha la stessa login.
La scelta del server FTP è caduta su proftpd che non è certo il migliore però permette parecchie più cose di quante a noi servano e ha il non trascurabile vantaggio di essere facile da configurare.
Di seguito il file di configurazione che si trova in /etc/proftpd (siamo sempre nella chroot).
#
# /etc/proftpd/proftpd.conf — This is a basic ProFTPD configuration file.
# To really apply changes reload proftpd after modifications.
#
# Includes DSO modules
Include /etc/proftpd/modules.conf
# Set off to disable IPv6 support which is annoying on IPv4 only boxes.
UseIPv6 off
# If set on you can experience a longer connection delay in many cases.
IdentLookups off
ServerName “grecale FTP server”
ServerType standalone
DeferWelcome on
ServerAdmin my_address@my_company.com
MultilineRFC2228 on
DefaultServer on
ShowSymlinks on
TimeoutLogin 120
TimeoutNoTransfer 120
TimeoutStalled 240
TimeoutIdle 300
DisplayLogin welcome.msg
DisplayChdir .message true
ListOptions “-l”
DenyFilter \*.*/
# Use this to jail all users in their homes
DefaultRoot ~
# Port 21 is the standard FTP port.
Port 21
MaxInstances 30
# Set the user and group that the server normally runs at.
#User proftpd
User nobody
Group nogroup
# Umask 022 is a good standard umask to prevent new files and dirs
# (second parm) from being group and world writable.
Umask 022 022
# Normally, we want files to be overwriteable.
AllowOverwrite on
TransferLog /var/log/proftpd/xferlog
SystemLog /var/log/proftpd/proftpd.log
<IfModule mod_quotatab.c>
QuotaEngine off
</IfModule>
<IfModule mod_ratio.c>
Ratios off
</IfMo<IfModule mod_delay.c>
DelayEngine on
</IfModule>
<IfModule mod_ctrls.c>
ControlsEngine off
ControlsMaxClients 2
ControlsLog /var/log/proftpd/controls.log
ControlsInterval 5
ControlsSocket /var/run/proftpd/proftpd.sock
</IfModule>
<IfModule mod_ctrls_admin.c>
AdminControlsEngine off
</IfModule>
<Directory /*>
AllowOverwrite on
</Directory>
<Anonymous ~archivio>
AccessGrantMsg “Accesso consentito all’utente %u.”
AllowRetrieveRestart on
AllowStoreRestart on
DisplayChdir .primo_cambio
DisplayLogin .welcome.msg
ExtendedLog /var/log/ftp.log read,write,auth
AnonRequirePassword yes
MaxClients 10 “E’ stato raggiunto il limite di utenti ammessi The limit of allowed users has been (%m).”
MaxClientsPerHost 1 “E’ gia’ connesso 1 utente dal tuo dominio. 1 user is already connected from your domain”
RequireValidShell yes
<Directory *>
<Limit WRITE>
DenyAll
</Limit>
<Limit READ>
DenyAll
</Limit>
<Limit DIRS>
AllowAll
</Limit>
</Directory>
<Directory /home/ftp/download>
<Limit STOR>
Order deny,allow
Deny from 192.168.2.239
Deny from 192.168.2.240
Deny from 192.168.2.241
Allow 192.168.2.0/24
AllowUser manager
Deny from all
DenyAll
</Limit>
</Directory>
<Directory /home/ftp/upload>
Umask 222
<Limit STOR>
AllowAll
</Limit>
<Limit READ>
Order deny,allow
Deny from 192.168.2.239
Deny from 192.168.2.240
Deny from 192.168.2.241
Allow 192.168.2.0/24
AllowUser manager
DenyAll
</Limit>
</Directory>
</Anonymous>
Resta solo da far partire il servizio chrootato al boot della macchina a questo provvedono i due script
chroot_start che a sua volta chiama il jail.sh
Abbiamo ottenuto un server ftp funzionante e per quanto questo possa signficare qualcosa informaticamente parlando relativamente sicuro
Categorised as: Linux | Sistemi operativi | Work
Comments are disabled on this post