[testé sur vsftp installé sur debian etch]
[origine: une discussion sur le forum: http://forum.debian-fr.org/viewtopic.php?t=9493&start=0 ]
EN CONSTRUCTION
On utilise la ligne suivante (en console sous root):
# lsof -i :21 -u^root -u^nobody | mawk '{print $3 " "$2" "$8}' | sort -u | | grep -v 'USER'
Cela donne si les utilisateurs “tyrtamos” et “jeanpaul” sont connectés à partir de la machine “192.168.0.99”:
jeanpaul 5103 192.168.0.215:ftp->192.168.0.99:1105 tyrtamos 5089 192.168.0.215:ftp->192.168.0.99:1103
Commentaires:
Amélioration possible: il est inutile de répéter le nom de la machine serveur. Il faudrait que la colonne:
nestidebian.local:ftp->192.168.0.99:1103
devienne:
192.168.0.99:1103
On devrait pouvoir faire ça par une expression régulière.
La commande est assez lente à cause de la tentative de convertion adresse IP → nom de domaine. Si on ne veut que les adresses IP, on utilise l'option “-n” de “lsof”, et la réponse est très rapide.
Avec tout cela, on a bien la liste demandée: les utilisateurs connectés à un moment donné au serveur ftp, avec l'IP de leur machine.
Mais je ne sais pas ce que ça donne si on configure vsftp avec des utilisateurs virtuels. Dans mes essais, mon vsftp est configuré avec les utilisateurs ayant un compte linux sur la machine qui a le serveur ftp.
En complétant par une recherche dans le fichier log, on devrait pouvoir dire depuis combien de temps la connexion est active, et donner la liste des fichiers téléchargés (dans les 2 sens).