Pure-ftpd

De neufbox 4
Aller à : navigation, rechercher

Présentation[modifier]

Pure-ftpd est un serveur de fichiers qui permet de partager les données des périphériques connectés aux ports USB. Vous pouvez le trouver sur ce site.

Configuration[modifier]

Il se configure par l'interface web de la NB4.

Pour l'utiliser vous devez absolument créer un utilisateur.

Il n'existe pas de fichier de configuration sur la NB4, tout se lance à partir du fichier rc.ftpd qui est lui-même lancé par usb_up_down.

Le fichier rc.ftpd

#!/bin/sh
IPTABLES=/bin/iptables
  LAN_NET="$(net `/bin/nvram get lan_ipaddr` `/bin/nvram get lan_netmask`)"
LAN_BR=`/bin/nvram get lan_ifname`

start () {
        if [ `/bin/nvram get ftpd_active` = "off" ]
        then
                /bin/nvram set ftpd_status down
                exit 0
        fi

        if [ `ls /var/mnt/ -1 | grep -c ".*"` = "0"  ]
        then
                /bin/nvram set ftpd_status down
                exit 0
        fi

        /bin/nvram set ftpd_status starting
        FTPD_LIST_COUNT=`/bin/nvram lcount ftpd_list`

        I=1
        # generating user / password
        echo > /var/pure.pw
        while [ "$I" -le "$FTPD_LIST_COUNT" ]
        do
                username=`/bin/nvram get ftpd_list_n${I}_user`
                password=`/bin/nvram get ftpd_list_n${I}_password`
                logger -s -t ftp -p daemon.debug "Adding $username / $password"
                pure-pw useradd $username -f /var/pure.pw -u $(( 1000 + $I)) -g 999 -d /var/mnt -p $password

                I=$(( $I + 1 ))
        done

        pure-pw mkdb /var/pure.pdb -f /var/pure.pw

        pure-ftpd  -A -c2 -B -C2 -D -E -fftp -H -I15 -L2000:8 -m2 -U99:999 -u1000 -k99 -Z -lpuredb:/var/pure.pdb

        if [ "$?" = "0" ]
        then
                logger -s -t lan_services -p daemon.debug "Running FTP Server                                     [OK]"
                /bin/nvram set ftpd_status up
        else
                logger -s -t lan_services -p daemon.debug "Running FTP Server                                     [KO]"
                exit 1
        fi

        $IPTABLES -A LAN_FILTER -p tcp -m tcp -i $LAN_BR -s $LAN_NET --dport 20 -m state --state NEW -j ACCEPT
        $IPTABLES -A LAN_FILTER -p tcp -m tcp -i $LAN_BR -s $LAN_NET --dport 21 -m state --state NEW -j ACCEPT
}


stop () {
        /bin/nvram set ftpd_status down
        $IPTABLES -D LAN_FILTER -p tcp -m tcp -i $LAN_BR -s $LAN_NET --dport 20 -m state --state NEW -j ACCEPT
        $IPTABLES -D LAN_FILTER -p tcp -m tcp -i $LAN_BR -s $LAN_NET --dport 21 -m state --state NEW -j ACCEPT

        killall -9 pure-ftpd
        rm /var/pure.pw /var/pure.pdb
}

case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        restart)
                stop
                /bin/nvram set ftpd_status starting
                sleep 2
                start
                ;;
esac

Pour être cohérent avec les règles iptables de rc.firewall, j'ai modifié les règles du fichier. LAN_FILTER remplace INPUT dans le fichier original.

Le fichier usb_up_down

#!/bin/sh

start () {
        /etc/init.d/rc.ftpd start
        /etc/init.d/rc.webdav start
}

stop () {
        /etc/init.d/rc.ftpd stop
        /etc/init.d/rc.webdav stop
}

case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        restart)
                stop
                sleep 2 
                start
                ;;
esac

Ce fichier lance également le serveur Webdav.

Problème rencontré[modifier]

En passant de la version du firmware de 1.2.10 à 1.3.11, le serveur ne fonctionne plus en mode passif.

Il s'agit de 2 modules qui ne sont plus chargés au démarrage, à savoir, ip_nat_ftp.ko et ip_conntrack_ftp.ko.

Pour réintégrer le mode passif, il faut modifier le fichier rc.kmod dans la fonction start() comme ceci :

        $INSMOD $MOD_PATH/ipt_CLASSIFY.ko
        $INSMOD $MOD_PATH/ipt_FTOS.ko
        $INSMOD $MOD_PATH/ip_conntrack_ftp.ko
        $INSMOD $MOD_PATH/ip_nat_tftp.ko
        $INSMOD $MOD_PATH/ip_nat_ftp.ko
        $INSMOD $MOD_PATH/ip_conntrack_tftp.ko

En mettant bien ip_conntrack_ftp.ko avant ip_nat_ftp.ko, sinon erreur au démarrage.

Il ne faut pas oublier d'enlever ces modules à l'arrêt.

        rmmod ip_nat_tftp.ko
        rmmod ip_nat_ftp.ko
        rmmod iptable_nat.ko
        rmmod ip_conntrack_tftp.ko
        rmmod ip_conntrack_ftp.ko