====== Pure-ftpd ====== ===== Déléguer l'authentification à un script externe ===== Pure-ftpd permet de déléguer l'authentification à un script externe. Pour cela, l'idée est : * d'écrire un script qui acceptera les informations de la demande de connexion via des variables d'environnement et qui retournera le résultat de la connexion sur sa sortie standard. * de mettre en place le service //pure-authd// qui sera en écoute sur une socket UNIX et traitera les demandes de connexion client. Son rôle sera alors de : * définir des variables d'environnement qui contiendront les informations de la demande de connexion * appeler le script externe * retourner le résultat de l’authentification à //pure-ftpd// * Mettre en place un script init de gestion du service //pure-authd// (non-fourni par le paquet Debian) * Configurer l'authentification externe dans //pure-ftpd// ==== Écriture du script d'authentification ==== Ce script recevra les informations de la demande de connexion via les variables d'environnement suivantes : * AUTHD_ACCOUNT : le login * AUTHD_PASSWORD : le mot de passe * AUTHD_LOCAL_IP : l'adresse IP locale sur laquelle l'utilisateur s'est connecté * AUTHD_LOCAL_PORT : le port local sur lequel l'utilisateur s'est connecté * AUTHD_REMOTE_IP : l'adresse IP du client FTP Une fois l'authentification, le script devra retourner le résultat sur sa sortie standard : auth_ok:1 uid:33 gid:33 dir:/srv/websites end Avec : * auth_ok : le résultat de l'authentification : * 1 = auth réussie * 0 = utilisateur inconnu * -1 = erreur d'authentification * uid : UID Unix de l'utilisateur une fois connecté sur le système * gid : GID Unix de l'utilisateur une fois connecté sur le système * dir : chemin absolu du dossier personnel de l'utilisateur * end : mot clé indiquant la fin de la réponse D'autres informations peuvent être retournées, voir `man pure-authd`. Dans le reste de cette documentation, nous partirons du principe que ce script est ''/usr/local/share/pure-authd/external_auth''. ==== Mise en place du service pure-authd ==== Créez le fichier ''/etc/init.d/pure-authd'' : #! /bin/sh ### BEGIN INIT INFO # Provides: pure-authd # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Should-Start: slapd # Should-Stop: slapd # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 ### END INIT INFO # # pure-authd starts and stops the pure-authd daemon # NAME=pure-authd DESC="$NAME Daemon" RUN_AS_USER=root EXTERNAL_SCRIPT_PATH=/usr/local/share/pure-authd/external_auth [ -f /etc/default/$NAME ] && . /etc/default/$NAME SOCKET_PATH=/var/run/pure-ftpd/$NAME.sock DAEMON="/usr/sbin/pure-authd" DAEMON_OPT="-s $SOCKET_PATH -r $EXTERNAL_SCRIPT_PATH" PIDFILE=/var/run/pure-ftpd/$NAME.pid test -x $DAEMON || exit 0 test -x $EXTERNAL_SCRIPT_PATH || exit 0 test -d $( dirname "$PIDFILE" ) || mkdir -p $( dirname "$PIDFILE" ) test -d $( dirname "$SOCKET_PATH" ) || mkdir -p $( dirname "$SOCKET_PATH" ) . /lib/lsb/init-functions do_start () { log_daemon_msg "Starting $DESC" start-stop-daemon --start --name $NAME --background --quiet \ --user "$RUN_AS_USER" --pidfile "$PIDFILE" --make-pidfile \ --exec $DAEMON -- $DAEMON_OPT log_end_msg $? } do_stop () { log_daemon_msg "Stopping $DESC" start-stop-daemon --stop --name $NAME --retry 5 --oknodo --pidfile "$PIDFILE" log_end_msg $? } case "$1" in start|stop) do_${1} ;; restart|reload|force-reload) do_stop && do_start ;; status) status_of_proc -p "$PIDFILE" $DAEMON $NAME && exit 0 || exit $? ;; *) echo "Usage: /etc/init.d/$NAME {start|stop|restart|reload|force-reload|status}" exit 1 ;; esac exit 0 Créer le fichier ''/etc/default/pure-authd'' : # Configuration for pure-authd # (this file is sourced by /bin/sh, edit accordingly) # Set to the user pure-authd should run as RUN_AS_USER=root # Set your external script path EXTERNAL_SCRIPT_PATH=/usr/local/share/pure-authd/external_auth Ajustez les droits de ces deux nouveaux fichiers et lancez le service: chmod 755 /etc/init.d/pure-authd chmod 644 /etc/default/pure-authd Configurez le démarrage automatique de ce service et lancez-le : systemctl daemon-reload systemctl enable pure-authd systemctl start pure-authd ==== Configurer l'authentification externe dans pure-ftpd ==== Créez le fichier ''/var/run/pure-ftpd/'' : echo "/var/run/pure-ftpd/pure-authd.sock" > /etc/pure-ftpd/auth/50extauth Désactivez l'authentification ''pam'' : echo no > /etc/pure-ftpd/auth/70pam Redémarrer le service ''pure-ftpd'' pour prise en compte : service pure-ftpd restart