Outils pour utilisateurs

Outils du site


admin:services:ftp

< 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
}
admin/services/ftp.txt · Dernière modification: 2020/04/25 19:02 de zertrin