Table des matières

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 :

Écriture du script d'authentification

Ce script recevra les informations de la demande de connexion via les variables d'environnement suivantes :

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 :

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