====== 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