Table des matières
< retour à la page de l'administration technique
Le serveur FTP de FedeRez se trouve sur dodecagon.
Infos de connexion
Hôte | ftp.federez.net |
Port | 21 |
Protocole | FTPES (FTP avec connexion TLS explicite) obligatoire |
Login | Pseudo (tiré du LDAP). |
Mot de passe | Celui du compte LDAP. Cf https://webldap.federez.net en cas d'oubli. |
Infos générales
Voici l'arborescence mise en place initialement. Sera probablement à actualiser par la suite mais ça donne déjà une idée.
/home/ftp ├── administratif │ └── statuts.pdf ├── admin_tech ├── journees │ └── 2014 │ ├── presentations │ │ ├── federez_ag_2014_aliens.pdf │ │ └── ... │ └── videos │ ├── Conférence IPv6.mp4 │ └── ... ├── README_FTP_FedeRez.txt ├── tournee ├── upload └── visuel ├── font ├── kakemono └── logo
Niveau sécurité, tous les échanges doivent se faire de façon chiffrée (aussi bien pour le canal de contrôle que pour les données) et tous les utilisateurs ont les mêmes droits sur le serveurs (uid ftp, group ftp).
Mise en place
Pour la mise en place d'un serveur vsftpd
(qui était installé auparavant à FedeRez), on pourra se référer à la page dédiée. Ce qui suit concerne proftpd
, logiciel utilisé actuellement à FedeRez.
Le choix de proftpd
a été fait parce que la gestion du LDAP y semblait meilleure qu'avec pure-ftpd
(point discutable, mais proftpd répond à nos attentes, donc je ne vois pas de raison d'en changer).
On commence par installer les paquets nécessaires (la doc à consulter dans /usr/share/doc/proftpd-doc/
n'est pas requise mais peut se révéler utile) :
apt-get install proftpd proftpd-mod-ldap proftpd-doc
On crée un utilisateur système “ftp” :
useradd --system --home-dir /srv/ftp --no-create-home --shell /usr/sbin/nologin ftp
Si l'utilisateur existe, on s'assure que tous soit bon avec :
getent passwd ftp getent group ftp
qui doivent renvoyer :
ftp:x:129:999::/srv/ftp:/usr/sbin/nologin ftp:x:999:
Sinon, on adapte avec :
groupadd --system ftp usermod --gid ftp --home /srv/ftp --shell /usr/sbin/nologin ftp
On note ensuite l'uid et le gid de ftp :
id ftp
Dans notre cas, on a : uid=129(ftp) gid=999(ftp) groupes=999(ftp)
, valeurs utilisées dans /etc/proftpd/ldap.conf
.
On modifie le fichier /etc/proftpd/proftpd.conf
pour avoir ce qui suit (le reste de la configuration par défaut n'ayant pas besoin d'être modifié) :
- "/etc/proftpd/proftpd.conf"
### Lignes à décommenter : Include /etc/proftpd/tls.conf Include /etc/proftpd/ldap.conf ### Ligne à modifier : DisplayLogin /etc/proftpd/welcome.msg ### Lignes à ajouter : # Autoriser uniquement les connexions depuis le LDAP AuthOrder mod_ldap.c # Chroot des utilisateurs dans /srv/ftp DefaultRoot /srv/ftp
On crée /etc/proftpd/welcome.msg
avec par exemple :
- "/etc/proftpd/welcome.msg"
================================================= | | | Bienvenue sur le serveur FTP de FedeRez ! | | | ================================================= Vous êtes identifié en tant que %U@%R ------- En cas de questions, contacter admin@federez.net
On décommente dans /etc/proftpd/modules.conf
:
- "/etc/proftpd/modules.conf"
LoadModule mod_ldap.c
On modifie /etc/proftpd/tls.conf
pour avoir : (cf http://www.proftpd.org/docs/howto/TLS.html pour les détails)
- "/etc/proftpd/tls.conf"
<IfModule mod_tls.c> TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol TLSv1.2 TLSRSACertificateFile /etc/letsencrypt/live/federez.net/fullchain.pem TLSRSACertificateKeyFile /etc/letsencrypt/live/federez.net/privkey.pem TLSOptions NoCertRequest EnableDiags TLSVerifyClient off TLSRequired on </IfModule>
Toutes les autres lignes devraient être commentées.
On restreint les permissions sur /etc/proftpd/ldap.conf
qui va contenir un mot de passe (pour récupérer les informations dans le LDAP) :
chmod o-r /etc/proftpd/ldap.conf
On modifie /etc/proftpd/ldap.conf
: (cf http://www.proftpd.org/docs/contrib/mod_ldap.html pour les détails)
- "/etc/proftpd/ldap.conf"
<IfModule mod_ldap.c> LDAPServer "ldaps://ldap.federez.net/??sub" "ldaps://ldap-ro.federez.net/??sub" LDAPBindDN "cn=proftpd,ou=service-users,dc=federez,dc=net" "mot_de_passe" LDAPUsers "ou=users,dc=federez,dc=net" (uid=%v) LDAPSearchScope subtree LDAPForceDefaultUID on LDAPForceDefaultGID on LDAPDefaultUID 129 LDAPDefaultGID 999 LDAPLog /var/log/proftpd/ldap.log LDAPAuthBinds on </IfModule>
Toutes les autres lignes devraient être commentées.
On configure ensuite les accès aux fichiers en créant le fichier /etc/proftpd/conf.d/acl.conf
avec :
- /etc/proftpd/conf.d/acl.conf
<Directory /> <Limit READ WRITE DIR> DenyAll </Limit> </Directory> <Directory /srv/ftp/> <Limit READ DIR> AllowAll </Limit> <Limit WRITE> AllowGroup sudoldap #AllowUser DenyAll </Limit> </Directory> <Directory /srv/ftp/upload> <Limit WRITE> AllowAll </Limit> </Directory>
Enfin, on relance le service :
systemctl restart proftpd.service
En cas de soucis, on pourra ajouter à /etc/proftpd/proftpd.conf
les lignes suivantes pour activer le débug :
Trace ldap:10 # niveau entre 0 et 10 Trace *:10
On s'assurera de ne pas laisser des fichiers de log non gérés par logrotate en créant /etc/logrotate.d/proftpd-custom
avec :
- /etc/logrotate.d/proftpd-custom
/var/log/proftpd/tls.log /var/log/proftpd/ldap.log { weekly missingok rotate 7 compress delaycompress notifempty create 640 root adm sharedscripts postrotate # reload could be not sufficient for all logs, a restart is safer invoke-rc.d proftpd restart 2>/dev/null >/dev/null || true endscript }