Pure-ftpd
Un article de neufbox 4.
Présentation
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
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é
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