Clark's Home page

Tecnicismi vari di un Sysadmin Linux ma anche qualcosa della sua vita

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


Comments are closed.


Hide picture