Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
linux:proftpd [2009/07/22 00:40] matthieu |
linux:proftpd [2011/01/08 15:24] (Version actuelle) matthieu |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag>fr fr:linux fr:serveur fr:transfert_de_fichier}} | ||
====== Proftpd ====== | ====== Proftpd ====== | ||
Proftpd est un serveur FTP offrant de nombreuses fonctions. | Proftpd est un serveur FTP offrant de nombreuses fonctions. | ||
Ci dessous est expliquée l'intallation d'un FTP utilisant une authentification LDAP ou Mysql. | Ci dessous est expliquée l'intallation d'un FTP utilisant une authentification LDAP ou Mysql. | ||
- | |||
- | Utilisé pour le [[bender]]. | ||
===== Principaux avantages ===== | ===== Principaux avantages ===== | ||
Ligne 44: | Ligne 43: | ||
===== Configuration générale ===== | ===== Configuration générale ===== | ||
- | Après une installation standard, voici quelques paramètres à modifier dans /etc/proftpd/proftpd.conf | + | Après une installation standard, voici quelques paramètres à modifier dans ///etc/proftpd/proftpd.conf// |
* modifier le nom du serveur : | * modifier le nom du serveur : | ||
Ligne 132: | Ligne 131: | ||
</code> | </code> | ||
- | * editier /etc/proftpd/proftpd.conf et décommenter la ligne : | + | * editier ///etc/proftpd/proftpd.conf// et décommenter la ligne : |
Include /etc/proftpd/tls.conf | Include /etc/proftpd/tls.conf | ||
- | * dans /etc/proftpd/tls.conf, décommenter les lignes : | + | * dans ///etc/proftpd/tls.conf//, décommenter les lignes : |
<code> | <code> | ||
TLSEngine on | TLSEngine on | ||
Ligne 146: | Ligne 145: | ||
</code> | </code> | ||
- | * toujours dans /etc/proftpd/tls.conf, indiquer les fichiers de clef et de certificat : | + | * toujours dans ///etc/proftpd/tls.conf//, indiquer les fichiers de clef et de certificat : |
<code> | <code> | ||
TLSRSACertificateFile /etc/proftpd/ftp.bouthors.fr.crt | TLSRSACertificateFile /etc/proftpd/ftp.bouthors.fr.crt | ||
Ligne 155: | Ligne 154: | ||
Pour un exemple de configuration de client ftp en ftps, voir [[desktop:filezilla]]. | Pour un exemple de configuration de client ftp en ftps, voir [[desktop:filezilla]]. | ||
+ | |||
+ | :!: Un mise à jour récente provoque un blocage de la négociation TLS.\\ | ||
+ | Message d'erreur : mod_tls/2.2.2: client-initiated session renegotiation detected, aborting connection\\ | ||
+ | Solution : ajouter l'option "TLSOptions AllowClientRenegotiations"\\ | ||
+ | Plus d'info : http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=558597 | ||
===== Authentification LDAP ===== | ===== Authentification LDAP ===== | ||
Ligne 166: | Ligne 170: | ||
Pour pouvoir utiliser l'authentification LDAP, installer le paquet proftpd-mod-ldap. | Pour pouvoir utiliser l'authentification LDAP, installer le paquet proftpd-mod-ldap. | ||
- | ==== Activation de le LDAP ==== | + | ==== Activation de l'authentification LDAP ==== |
- | Dans /etc/proftpd/modules.conf, décommenter : | + | Dans ///etc/proftpd/modules.conf//, décommenter : |
LoadModule mod_ldap.c | LoadModule mod_ldap.c | ||
- | Dans /etc/proftpd/proftpd.conf, décommenter : | + | Dans ///etc/proftpd/proftpd.conf//, décommenter : |
Include /etc/proftpd/ldap.conf | Include /etc/proftpd/ldap.conf | ||
==== Configuration ==== | ==== Configuration ==== | ||
- | Dans /etc/proftpd/proftpd.conf, effectuer la configuration suivante : | + | Dans ///etc/proftpd/proftpd.conf//, effectuer la configuration suivante : |
* AuthOrder active et définit l'ordre les authentifications. | * AuthOrder active et définit l'ordre les authentifications. | ||
Ligne 188: | Ligne 192: | ||
- | Dans /etc/proftpd/ldap.conf, effectuer la configuration suivante : | + | Dans ///etc/proftpd/ldap.conf//, effectuer la configuration suivante : |
* Nom/IP du serveur ldap avec LDAPServer : | * Nom/IP du serveur ldap avec LDAPServer : | ||
Ligne 221: | Ligne 225: | ||
==== Configuration des restrictions ==== | ==== Configuration des restrictions ==== | ||
- | En utilisant les directives Directory et Limit, il est possible de limiter les accès au serveur FTP dans /etc/proftpd/proftpd.conf. | + | En utilisant les directives Directory et Limit, il est possible de limiter les accès au serveur FTP dans ///etc/proftpd/proftpd.conf//. |
Voici un exemple simple qui limite l'accès au serveur FTP aux seuls membres du groupe "ftp" : | Voici un exemple simple qui limite l'accès au serveur FTP aux seuls membres du groupe "ftp" : | ||
Ligne 235: | Ligne 239: | ||
==== Exemple de configuration ==== | ==== Exemple de configuration ==== | ||
+ | **proftpd.conf** | ||
<file> | <file> | ||
+ | ... | ||
RequireValidShell off | RequireValidShell off | ||
+ | ... | ||
AuthPAM off | AuthPAM off | ||
+ | ... | ||
AuthOrder mod_ldap.c | AuthOrder mod_ldap.c | ||
- | LDAPServer "localhost:389" | ||
- | LDAPDNInfo "cn=proftpd,ou=services,dc=bouthors,dc=fr" "****" | ||
- | LDAPAuthBinds on | ||
- | LDAPAttr uid cn | ||
- | |||
- | LDAPDoAuth on "dc=bouthors, dc=fr" "(&(cn=%v)(objectclass=mboUser))" | ||
- | LDAPDoGIDLookups on "dc=bouthors, dc=fr" "(&(cn=%u)(objectclass=posixGroup))" "(&(gidNumber=%u)(objectclass=mboGroup))" "(&(uniqueMember=cn=%v,ou=users,dc=bouthors,dc=fr)(objectclass=mboGroup))" | ||
- | |||
<Directory /> | <Directory /> | ||
Ligne 260: | Ligne 260: | ||
Umask 006 007 | Umask 006 007 | ||
</Directory> | </Directory> | ||
+ | </file> | ||
+ | |||
+ | |||
+ | **ldap.conf** | ||
+ | <file> | ||
+ | # | ||
+ | # Proftpd sample configuration for LDAP authentication. | ||
+ | # | ||
+ | # (This is not to be used if you prefer a PAM-based SQL authentication) | ||
+ | # | ||
+ | |||
+ | <IfModule mod_ldap.c> | ||
+ | # | ||
+ | # This is used for ordinary LDAP connections, with or without TLS | ||
+ | # | ||
+ | #LDAPServer ldap://ldap.example.com | ||
+ | #LDAPDNInfo "cn=admin,dc=example,dc=com" "admin_password" | ||
+ | #LDAPDoAuth on "dc=users,dc=example,dc=com" | ||
+ | LDAPServer localhost:389 | ||
+ | LDAPDNInfo "cn=proftpd,ou=services,dc=bouthors,dc=fr" "***" | ||
+ | LDAPAttr uid cn | ||
+ | LDAPDoAuth on "dc=bouthors, dc=fr" "(&(cn=%v)(objectclass=mboUser))" | ||
+ | LDAPDoGIDLookups on "dc=bouthors, dc=fr" "(&(cn=%u)(objectclass=posixGroup))" "(&(gidNumber=%u)(objectclass=mboGroup))" "(&(uniqueMember=cn=%v,ou=users,dc=bouthors,dc=fr)(objectclass=mboGroup))" | ||
+ | # | ||
+ | # To be set on only for LDAP/TLS on ordinary port, for LDAP+SSL see below | ||
+ | #LDAPUseTLS on | ||
+ | # | ||
+ | |||
+ | # | ||
+ | # This is used for encrypted LDAPS connections | ||
+ | # | ||
+ | #LDAPServer ldaps://ldap.example.com | ||
+ | #LDAPDNInfo "cn=admin,dc=example,dc=com" "admin_password" | ||
+ | #LDAPDoAuth on "dc=users,dc=example,dc=com" | ||
+ | # | ||
+ | </IfModule> | ||
</file> | </file> | ||
===== Authentification SQL ===== | ===== Authentification SQL ===== | ||
+ | :!: Paragraphe archivé non mis à jour. | ||
+ | |||
Cette partie décrit comment configurer l'authentification SQL. Etant donné que j'utilise actuellement LDAP, il se peut que la configuration différe dans les nouvelles versions. | Cette partie décrit comment configurer l'authentification SQL. Etant donné que j'utilise actuellement LDAP, il se peut que la configuration différe dans les nouvelles versions. | ||
==== Installation ==== | ==== Installation ==== | ||
Afin d'activer le support de mysql, il faut ajouter le paquet : | Afin d'activer le support de mysql, il faut ajouter le paquet : | ||
- | * proftpd-mysql | + | * proftpd-mod-mysql |
Concernant la création des utilisateurs, voir [[authent_sql|Utiliser une base sql pour l'authentification]]. | Concernant la création des utilisateurs, voir [[authent_sql|Utiliser une base sql pour l'authentification]]. | ||
- | ==== Configuration ==== | + | ==== Activation de l'authentification SQL ==== |
+ | Dans ///etc/proftpd/modules.conf//, décommenter : | ||
+ | LoadModule mod_sql.c | ||
- | === RequireValidShell === | + | Dans ///etc/proftpd/proftpd.conf//, décommenter : |
- | Si vous utilisez des shells invalides pour vos utilisateurs ftp (pour éviter qu'ils se loguent), désactivez la validation du shell : | + | Include /etc/proftpd/sql.conf |
- | RequireValidShell off | + | |
- | === AuthPAM === | + | ==== Configuration ==== |
- | Pour désactiver le PAM (qui permet d'utiliser l'authentification classique du Linux), utilisez l'option suivante : | + | Dans ///etc/proftpd/proftpd.conf//, effectuer la configuration suivante : |
- | AuthPAM off | + | * AuthOrder active et définit l'ordre les authentifications. |
- | === AuthOrder === | ||
- | AuthOrder active et définit l'ordre les authentifications. | ||
AuthOrder mod_sql.c mod_auth_unix.c | AuthOrder mod_sql.c mod_auth_unix.c | ||
mod_auth_unix.c est utilisé pour récupérer le nom des groupes ainsi que pour authentifier les utilisateurs du système. | mod_auth_unix.c est utilisé pour récupérer le nom des groupes ainsi que pour authentifier les utilisateurs du système. | ||
- | === SQLConnectInfo === | + | * Pour désactiver le PAM (qui permet d'utiliser l'authentification classique du Linux), ajouter l'option suivante : |
- | SQLConnectInfo définit la connexion SQL : le serveur, la base de données, l'utilisateur et son mot de passe. | + | |
+ | AuthPAM off | ||
+ | |||
+ | * Si vous utilisez des shells invalides, désactiver la validation du shell pour le FTP en décommentant : | ||
+ | |||
+ | RequireValidShell off | ||
+ | |||
+ | Dans ///etc/proftpd/sql.conf//, effectuer la configuration suivante : | ||
+ | * SQLConnectInfo définit la connexion SQL : le serveur, la base de données, l'utilisateur et son mot de passe. | ||
SQLConnectInfo users@localhost proftpd ***password*** | SQLConnectInfo users@localhost proftpd ***password*** | ||
- | === SQLUserInfo === | + | * SQLUserInfo définit la table qui contient les utilisateurs : |
- | SQLUserInfo définit la table qui contient les utilisateurs : | + | - le nom de la table |
- | - le nom de la table | + | - la colonne des utilisateurs |
- | - la colonne des utilisateurs | + | - la colonne des mots de passe |
- | - la colonne des mots de passe | + | - la colonne des UID |
- | - la colonne des UID | + | - la colonne des GID |
- | - la colonne des GID | + | - la colonne des répertoires utilisateurs |
- | - la colonne des répertoires utilisateurs | + | - la colonne des shells+ |
- | - la colonne des shells+ | + | |
SQLUserInfo auth username password uid gid homedir shell | SQLUserInfo auth username password uid gid homedir shell | ||
- | === SQLAuthTypes === | + | * SQLAuthTypes définit le type de cryptage utilisé pour les mots de passe : |
- | SQLAuthTypes définit le type de cryptage utilisé pour les mots de passe : | + | |
SQLAuthTypes Crypt | SQLAuthTypes Crypt | ||
- | === SQLAuthenticate === | + | * SQLAuthenticate définit comment le mod SQL doit authentifier : |
- | SQLAuthenticate définit comment le mod SQL doit authentifier : | + | |
SQLAuthenticate users* usersetfast | SQLAuthenticate users* usersetfast | ||
+ | |||
Dans cet exemple, on demande une authentification uniquement des utilisateurs (sans table de groupe) en indiquant une optimisation des requetes SQL au détriment de la mémoire. | Dans cet exemple, on demande une authentification uniquement des utilisateurs (sans table de groupe) en indiquant une optimisation des requetes SQL au détriment de la mémoire. | ||
- | === SQLNamedQuery === | + | * SQLNamedQuery permet de définir des requêtes SQL utilisée par les options ci-après : |
- | SQLNamedQuery permet de définir des requêtes SQL utilisée par les options ci-après : | + | |
SQLNamedQuery updatecount UPDATE "count=count+1 WHERE username='%u'" auth | SQLNamedQuery updatecount UPDATE "count=count+1 WHERE username='%u'" auth | ||
SQLNamedQuery count SELECT "count from auth where username='%u'" | SQLNamedQuery count SELECT "count from auth where username='%u'" | ||
- | * Updatecount réalise l'incrémentation du champ "count" de l'utilisateur. | + | Updatecount réalise l'incrémentation du champ "count" de l'utilisateur.\\ |
- | * Count renvoie le champ count de l'utilisateur. | + | Count renvoie le champ count de l'utilisateur. |
- | === SQLLog === | + | * SQLLog permet d'exécuter une requête SQL en fonction des actions de l'utilisateur :\\ |
- | SQLLog permet d'exécuter une requête SQL en fonction des actions de l'utilisateur : | + | |
Par exemple, l'option suivante exécute la requête //updatecount// lorsque l'utilisateur se connecte : | Par exemple, l'option suivante exécute la requête //updatecount// lorsque l'utilisateur se connecte : | ||
+ | |||
SQLLog PASS updatecount | SQLLog PASS updatecount | ||
- | === SQLShowInfo === | + | * SQLShowInfo permet d'afficher des informations à l'utilisateur en utilisant un requête SQL.\\ |
- | SQLShowInfo permet d'afficher des informations à l'utilisateur en utilisant un requête SQL. | + | |
Par exemple, la ligne suivante indique le nombre de connexions de l'utilisateur : | Par exemple, la ligne suivante indique le nombre de connexions de l'utilisateur : | ||
+ | |||
SQLShowInfo PASS "230" "Vous vous êtes logué(e) %{count} fois, %u" | SQLShowInfo PASS "230" "Vous vous êtes logué(e) %{count} fois, %u" | ||
- | === SQLMinID === | + | * SQLMinID définit les valeurs par défaut pour UID et GID : |
- | SQLMinID définit les valeurs par défaut pour UID et GID : | + | |
SQLMinID 499 | SQLMinID 499 | ||
- | === SQLDefaultUID === | + | * SQLDefaultUID définit la valeur par défaut de UID : |
- | SQLDefaultUID définit la valeur par défaut de UID : | + | |
SQLDefaultUID 500 | SQLDefaultUID 500 | ||
- | === SQLDefaultGID === | + | * SQLDefaultGID définit la valeur par défaut de GID : |
- | SQLDefaultGID définit la valeur par défaut de GID : | + | |
SQLDefaultGID 500 | SQLDefaultGID 500 | ||
- | === SQLDefaultHomedir === | + | * SQLDefaultHomedir définit le répertoire home par défaut : |
- | SQLDefaultHomedir définit le répertoire home par défaut : | + | |
SQLDefaultHomedir /ftp | SQLDefaultHomedir /ftp | ||
+ | ==== Exemple de configuration complète ==== | ||
+ | :!: Archive ! à adapter ! | ||
- | |||
- | ==== Exemple de configuration complète ==== | ||
Fichier ///etc/proftpd.conf// | Fichier ///etc/proftpd.conf// | ||
<file> | <file> | ||
Ligne 524: | Ligne 570: | ||
Date : %T | Date : %T | ||
- | |||
- | Descriptif du serveur : | ||
- | - Liaison 9online 1024 (download : 1024kbits/s, upload : 256kbits/s) | ||
- | - Processeur Athlon 700 | ||
- | - Ram 512Mo | ||
- | - Disques (540Go) | ||
Bonne journée ;-) | Bonne journée ;-) | ||
Ligne 538: | Ligne 578: | ||
==== Script de maintenance ==== | ==== Script de maintenance ==== | ||
- | La gestion d'un ftp nécessite quelques opérations de maintenance, en particulier pour réaliser les "petits plus" décrits en objectif : | + | Voici un script qui réalise les taches suivantes : |
- | * création du fichier index | + | * création d'un fichier index |
- | * création du fichier history | + | * création d'un fichier history |
- | * création du SFV | + | * création d'un SFV |
* remise à zéro des propriétaires et droits des fichiers en lecture : | * remise à zéro des propriétaires et droits des fichiers en lecture : | ||
| ^ valeur ^ droits ^ | | ^ valeur ^ droits ^ | ||
- | ^utilisateur | admin | r w X | | + | ^utilisateur | matthieu | r w X | |
^groupe | ftp | r - X | | ^groupe | ftp | r - X | | ||
^autre | | - - - | | ^autre | | - - - | | ||
Ligne 556: | Ligne 596: | ||
# | # | ||
# Matthieu Bouthors | # Matthieu Bouthors | ||
- | # MAJ : 13/09/07 | + | # MAJ : 20/07/09 |
# Traitement sur tous les répertoires | # Traitement sur tous les répertoires | ||
- | for rep in /ftp/Appz /ftp/BD /ftp/Series-Animes /ftp/Games /ftp/MP3 /ftp/Video /ftp/OnDemand | + | for rep in /ftp/dir1 /ftp/dir2 /ftp/dir3 |
do | do | ||
#Supprime les SFV de la racine | #Supprime les SFV de la racine | ||
Ligne 582: | Ligne 622: | ||
==== Rotation des logs ==== | ==== Rotation des logs ==== | ||
- | La rotation des logs est gérée par ///etc/cron.monthly/proftpd//, qui contient par défaut : | + | La rotation des logs est gérée par ///etc/logrotate.de/proftpd-basic//, qui contient par défaut : |
<file> | <file> | ||
- | #!/bin/sh | + | /var/log/proftpd/proftpd.log |
- | # | + | /var/log/proftpd/controls.log |
- | # cron script to rotate the proftpd server logfile, based on the | + | /var/log/proftpd/xferlog |
- | # wu-ftpd script by Peter Tobias <tobias@et-inf.fho-emden.de>. | + | /var/log/proftpd/xferreport |
- | + | { | |
- | [ -x /usr/sbin/ftpstats ] || exit 0 | + | weekly |
- | + | missingok | |
- | cd /var/log/proftpd | + | rotate 7 |
- | savelog -q -u root -g adm -m 640 -c 12 /var/log/proftpd/xferreport | + | compress |
- | ftpstats -a -r -l 2 -d 2>/dev/null >/var/log/proftpd/xferreport | + | delaycompress |
- | savelog -q -u root -g adm -m 640 -c 7 /var/log/proftpd/xferlog | + | notifempty |
- | savelog -q -u root -g adm -m 640 -c 7 /var/log/proftpd/proftpd.log | + | create 640 root adm |
- | savelog -q -u root -g adm -m 640 -c 7 /var/log/proftpd/controls.log | + | 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 | ||
+ | } | ||
</file> | </file> | ||
- | Pour conserver les logs 1 an, il suffit de modifier la ligne | + | Pour conserver les logs 1 an, il suffit de modifier la ligne rotate : |
- | savelog -q -u root -g adm -m 640 -c 12 /var/log/proftpd/xferlog | + | rotate 12 |
===== Debug ===== | ===== Debug ===== | ||
Ligne 607: | Ligne 652: | ||
===== Backup ===== | ===== Backup ===== | ||
- | * /etc/proftpd.conf | + | * /etc/proftpd/ |
- | * /etc/cron.monthly/proftpd | + | * /etc/logrotate.d/proftpd |
- | * /home/scripts/ftp/maintenance_ftp | + | * /home/scripts/maintenance_ftp |
* /ftp/welcome.msg | * /ftp/welcome.msg | ||
+ | * /var/log/proftpd | ||
* le répertoire du ftp | * le répertoire du ftp | ||
- | |||
- | |||
===== Links ===== | ===== Links ===== | ||
- | * [[start]] | ||
- | * [[bender]] | ||
* [[mysql]] | * [[mysql]] | ||
* [[openldap]] | * [[openldap]] |