25. Telnet et FTP mise en oeuvre

25.1. Consigne pour la réalisation du TP

Dans un premier temps, le deamon inetd sera utilisé (et non pas sa version améliorée xinetd) avec telnetd, tcpd et proftpd. Je vérifie que tout est bien installé :


vanvincq@CP2L ~ $ dpkg --get-selections openbsd-inetd tcpd proftpd telnetd
openbsd-inetd					install
tcpd						install
Aucun paquet ne correspond à proftpd.
Aucun paquet ne correspond à telnetd.

Effectivement, il me manque deux paquets. Pour proftpd, j'ai choisi le lancement à partir de inetd/xinetd.


vanvincq@CP2L ~ $ sudo apt-get install telnetd proftpd

vanvincq@CP2L ~ $ dpkg --get-selections openbsd-inetd tcpd proftpd-basic telnetd
openbsd-inetd					install
tcpd						install
proftpd-basic					install
telnetd						install

Une fois les paquets installés :

25.2. Procédure de tests

Premier test du service telnet :


vanvincq@CP2L ~ $ telnet 127.0.0.1
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

Il semble y avoir un problème. En lançant le deamon nécessaire, cela ira certainement mieux.


vanvincq@CP2L ~ $ sudo /etc/init.d/openbsd-inetd start
Starting internet superserver: inetd.

vanvincq@CP2L ~ $ telnet 127.0.0.1
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Debian GNU/Linux 6.0
CP2L login: vanvincq
Password: 
Last login: Sat Feb  4 13:07:41 CET 2012 on tty1
Linux CP2L 2.6.32-5-amd64 #1 SMP Mon Jan 16 16:22:28 UTC 2012 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

Maintenant, réessayons mais en ajoutant cette fois quelques règles dans le fichier /etc/hosts.deny.


vanvincq@CP2L ~ $ cat /etc/hosts.deny 
# /etc/hosts.deny: list of hosts that are _not_ allowed to access the system.
#                  See the manual pages hosts_access(5) and hosts_options(5).
#
# Example:    ALL: some.host.name, .some.domain
#             ALL EXCEPT in.fingerd: other.host.name, .other.domain
#
# If you're going to protect the portmapper use the name "portmap" for the
# daemon name. Remember that you can only use the keyword "ALL" and IP
# addresses (NOT host or domain names) for the portmapper, as well as for
# rpc.mountd (the NFS mount daemon). See portmap(8) and rpc.mountd(8)
# for further information.
#
# The PARANOID wildcard matches any host whose name does not match its
# address.
#
# You may wish to enable this to ensure any programs that don't
# validate looked up hostnames still leave understandable logs. In past
# versions of Debian this has been the default.
# ALL: PARANOID
in.telnetd: ALL

vanvincq@CP2L ~ $ telnet 127.0.0.1
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Connection closed by foreign host.

En regardant ce qu'il se passe dans les logs (/var/log/syslog), on peut remarquer que la connection est refusée pour telnetd. Ce qui est normal car on a interdit l'accès pour tous.


...
Feb 19 10:53:53 CP2L in.telnetd[4672]: refused connect from 127.0.0.1 (127.0.0.1)
Feb 19 10:57:05 CP2L in.telnetd[4695]: refused connect from 127.0.0.1 (127.0.0.1)
Feb 19 10:59:01 CP2L in.telnetd[4700]: refused connect from 127.0.0.1 (127.0.0.1)

Rajoutons maintenant une autorisation pour l'hôte CP2L (i.e moi).


vanvincq@CP2L ~ $ cat /etc/hosts.allow 
# /etc/hosts.allow: list of hosts that are allowed to access the system.
#                   See the manual pages hosts_access(5) and hosts_options(5).
#
# Example:    ALL: LOCAL @some_netgroup
#             ALL: .foobar.edu EXCEPT terminalserver.foobar.edu
#
# If you're going to protect the portmapper use the name "portmap" for the
# daemon name. Remember that you can only use the keyword "ALL" and IP
# addresses (NOT host or domain names) for the portmapper, as well as for
# rpc.mountd (the NFS mount daemon). See portmap(8) and rpc.mountd(8)
# for further information.
#
in.telnetd: CP2L

vanvincq@CP2L ~ $ telnet 127.0.0.1
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Debian GNU/Linux 6.0
CP2L login: ^CConnection closed by foreign host.

Dans /var/log/syslog et /var/log/auth.log:


Feb 19 11:53:15 CP2L in.telnetd[5678]: connect from CP2L (127.0.0.1)

Feb 19 11:53:20 CP2L login[5680]: pam_unix(login:session): session opened for user vanvincq by (uid=0)

25.3. Travaux pratiques : Telnet

25.3.1. Configuration de telnet

  1. Relevez le port utilisé par telnet dans le fichier /etc/services et notez le.

    
vanvincq@CP2L ~ $ cat /etc/services | grep ^telnet
    telnet		23/tcp
    telnets		992/tcp				# Telnet over SSL
    telnets		992/udp
    

    Le port utilisé par telnet est le port 23.

  2. Décommentez la ligne qui concerne telnet dans /etc/inetd.conf et relancez le service.

    Vérification si la ligne est décommentée pour le service telnet.

    
vanvincq@CP2L ~ $ cat /etc/inetd.conf | grep telnet
    telnet		stream	tcp	nowait	root	/usr/sbin/tcpd	/usr/sbin/in.telnetd
    

    Redémarrage du service :

    
vanvincq@CP2L ~ $ sudo /etc/init.d/openbsd-inetd restart
    [sudo] password for vanvincq: 
    Restarting internet superserver: inetd.
    

  3. Vérifiez que le port est bien ouvert avec la commande netstat.

    
vanvincq@CP2L ~ $ netstat -l | grep telnet
    tcp        0      0 *:telnet                *:*                     LISTEN  
    

    Ou encore :

    
vanvincq@CP2L ~ $ sudo netstat -atup | grep LISTEN
    [sudo] password for vanvincq: 
    tcp        0      0 *:sunrpc                *:*                     LISTEN      1105/portmap    
    tcp        0      0 *:ftp                   *:*                     LISTEN      5277/inetd      
    tcp        0      0 *:ssh                   *:*                     LISTEN      2126/sshd       
    tcp        0      0 *:telnet                *:*                     LISTEN      5277/inetd      
    tcp        0      0 CP2L:ipp                *:*                     LISTEN      1634/cupsd      
    tcp        0      0 CP2L:smtp               *:*                     LISTEN      1991/exim4      
    tcp        0      0 *:57882                 *:*                     LISTEN      1117/rpc.statd  
    tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      2126/sshd       
    tcp6       0      0 ip6-localhost:ipp       [::]:*                  LISTEN      1634/cupsd      
    tcp6       0      0 ip6-localhost:smtp      [::]:*                  LISTEN      1991/exim4
    

    Vérification que le processus est bien lancé (ici inetd) :

    
vanvincq@CP2L ~ $ ps aux | grep [i]netd
    root      5277  0.0  0.0  10216   680 ?        Ss   11:23   0:00 /usr/sbin/inetd
    

  4. Vérifiez que rien dans tcpwrapper n'interdit l'accès au service telnet.

    
vanvincq@CP2L ~ $ cat /etc/hosts.allow 
    # /etc/hosts.allow: list of hosts that are allowed to access the system.
    #                   See the manual pages hosts_access(5) and hosts_options(5).
    #
    # Example:    ALL: LOCAL @some_netgroup
    #             ALL: .foobar.edu EXCEPT terminalserver.foobar.edu
    #
    # If you're going to protect the portmapper use the name "portmap" for the
    # daemon name. Remember that you can only use the keyword "ALL" and IP
    # addresses (NOT host or domain names) for the portmapper, as well as for
    # rpc.mountd (the NFS mount daemon). See portmap(8) and rpc.mountd(8)
    # for further information.
    #
    in.telnetd: CP2L
    

    Tester l'accès à Telnet et vérifier la connection avec netstat.

    
vanvincq@CP2L ~ $ telnet 127.0.0.1
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    ...
    
    
vanvincq@CP2L ~ $ sudo netstat -natupw | grep ESTABLISHED
    tcp        0      0 127.0.0.1:48829         127.0.0.1:23            ESTABLISHED 5677/telnet     
    tcp        0      0 192.168.1.13:58624      130.239.18.172:6667     ESTABLISHED 2519/xchat      
    tcp        0      0 192.168.1.13:49652      212.24.104.237:6667     ESTABLISHED 2519/xchat      
    tcp        0      0 127.0.0.1:23            127.0.0.1:48829         ESTABLISHED 5678/in.telnetd: CP
    

25.3.2. Configuration de TCP-Wrapper

La configuration de tcpwrapper se fait à travers les fichiers /etc/hosts.allow et /etc/host.deny (cf. 25.2. Procédure de tests pour plus d'informations).

25.4. Travaux pratiques : FTP

25.4.1. Accès FTP authentifié

  1. Relevez les ports utilisés par FTP dans /etc/services.

    
vanvincq@CP2L ~ $ cat /etc/services | grep ftp
    ftp-data	20/tcp
    ftp		21/tcp
    tftp		69/udp
    sftp		115/tcp
    ftps-data	989/tcp				# FTP over SSL (data)
    ftps		990/tcp
    venus-se	2431/udp			# udp sftp side effect
    codasrv-se	2433/udp			# udp sftp side effect
    gsiftp		2811/tcp
    gsiftp		2811/udp
    frox		2121/tcp			# frox: caching ftp proxy
    zope-ftp	8021/tcp			# zope management by ftp
    

    Le service FTP utilise le port 21 dans sa version classique.

  2. Lancez le service en mode autonome.

    Comme lors de l'installation, j'ai choisi de lier proftpd avec le deamon inetd j'effectue une reconfiguration :

    
vanvincq@CP2L ~ $ sudo dpkg-reconfigure proftpd-basic
    ProFTPd is started from inetd/xinetd.
    ProFTPd warning: cannot start neither in standalone nor in inetd/xinetd mode. Check your configuration.
    

    Pour ne pas à avoir à modifier les scripts de contrôle qui ne permet pas le lancement indépendant de proftpd (même si inetd est à l'arrêt), je décide de laisser la gestion du service FTP par inetd.

  3. Vérifiez que le port est bien ouvert avec la commande netstat :

    
vanvincq@CP2L ~ $ sudo netstat -atup | grep -E "ftp.*LISTEN"
    tcp        0      0 *:ftp                   *:*                     LISTEN      4035/inetd
    

    Le port 21 (ftp) est en écoute. Néanmoins dans notre cas c'est inetd qui se charge de l'écoute et non pas le deamon proftpd.

  4. Faites un test en utilisant un compte système existant. Utilisez ftp si lftp n’est pas installé.

    
vanvincq@CP2L ~ $ ftp
    ftp> open 127.0.0.1
    Connected to 127.0.0.1.
    220 ProFTPD 1.3.3a Server (Debian) [127.0.0.1]
    Name (127.0.0.1:vanvincq): vanvincq
    331 Mot de passe requis pour vanvincq
    Password:
    230 Utilisateur vanvincq authentifié
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    200 Commande PORT exécutée avec succès
    150 Ouverture d'une connexion de données en mode ASCII pour file list
    drwxr-xr-x   2 vanvincq vanvincq     4096 Feb 18 12:29 Bureau
    drwxr-xr-x   5 vanvincq vanvincq     4096 Feb 17 08:36 Documents
    drwxr-xr-x   2 vanvincq vanvincq     4096 Jan 25 07:46 Images
    drwxr-xr-x   2 vanvincq vanvincq     4096 Jan 24 20:20 Mod??les
    drwxr-xr-x   2 vanvincq vanvincq     4096 Jan 24 20:20 Musique
    drwxr-xr-x   6 vanvincq vanvincq     4096 Feb 13 20:28 pt
    drwxr-xr-x   2 vanvincq vanvincq     4096 Jan 24 20:20 Public
    drwxr-xr-x   4 vanvincq vanvincq     4096 Feb 17 09:15 T??l??chargements
    drwxr-xr-x   2 vanvincq vanvincq     4096 Jan 24 20:20 Vid??os
    226 Téléchargement terminé
    ftp> bye
    221 Au revoir.
    

25.4.2. Accès FTP anonyme

Extrait du cours : La mise en place d'un service ftp anonyme demande plus de manipulations car elle nécessite de prendre des précautions. En effet, il faut créer un dépôt accessible par tout le monde (public), on ne peut donc pas prendre de risques. On crée ce qu’on appelle en jargon un environnement chrooté, c’est à dire une prison afin qu'un utilisateur anonyme qui se connecterait ne puisse pas se promener sur tout le disque. Comme cet utilisateur n’aura pas accès au reste du disque (/etc, /lib. . .) et que les programmes en ont besoin, on va créer un environnement minimaliste mais suffisant pour les programmes dont on aura besoin.

Vous allez mettre le dépôt et tout l’environnement dans /home/ftp.

  1. Vérifiez que le fichier /etc/passwd dispose bien d'un compte ftp.

    
vanvincq@CP2L ~ $ grep ftp /etc/passwd
    proftpd:x:112:65534::/var/run/proftpd:/bin/false
    ftp:x:113:65534::/home/ftp:/bin/false
    

    Affectation d'un UID et GID arbitraires à 1010.

    
vanvincq@CP2L ~ $ grep ftp /etc/passwd
    proftpd:x:112:65534::/var/run/proftpd:/bin/false
    ftp:x:1010:1010::/home/ftp:/bin/true
    

  2. Créez un compte de groupe dans le fichier /etc/group :

    
vanvincq@CP2L ~ $ sudo groupadd -g 1010 ftp
    vanvincq@CP2L ~ $ grep ftp /etc/group
    ftp:x:1010:
    

  3. Utilisez la commande pwconv pour mettre à jour le fichier shadow.

    
vanvincq@CP2L ~ $ sudo pwconv
    

  4. Sous le compte root vous allez créer l’environnement pour le service ftp :

    
vanvincq@CP2L /home $ sudo mkdir -p ftp/lib ftp/bin ftp/pub ftp/incoming ftp/etc
    

    On copie le programme ls dans ftp/bin. Vous pouvez en mettre d’autres, mais soyez prudent.

    
vanvincq@CP2L /home $ sudo cp /bin/ls ./ftp/bin/
    

    Il reste à créer les comptes dans un fichier local passwd etgroup. On y met juste les comptes nécessaires pour l'utilisation des programmes mis dans ftp/bin. On rappelle que ceci est nécessaire car ftp ne peut pas aller consulter /etc/passwd lors d’une tentative d'accés anonyme.

    
root@CP2L:/home# grep ftp /etc/group > ./ftp/etc/group
    root@CP2L:/home# grep root /etc/passwd > ./ftp/etc/passwd
    root@CP2L:/home# grep ftp /etc/passwd >> ./ftp/etc/passwd
    

    Vérifiez que vous avez bien les informations dans les fichiers ftp/passwd et ftp/group. On change les permissions.

    
root@CP2L:/home# chmod -R 111 ftp/bin/
    root@CP2L:/home# chmod 111 ftp/etc/
    root@CP2L:/home# chmod 444 ftp/etc/*
    root@CP2L:/home# chmod 555 ftp/pub/
    root@CP2L:/home# chmod 1733 ftp/incoming/
    
    
root@CP2L:/home# ls -Rl ./ftp/
    ./ftp/:
    total 24
    d--x--x--x 2 root root 4096 20 févr. 09:54 bin
    d--x--x--x 2 root root 4096 20 févr. 10:00 etc
    drwx-wx-wt 2 root root 4096 20 févr. 09:52 incoming
    drwxr-xr-x 2 root root 4096 20 févr. 09:52 lib
    dr-xr-xr-x 2 root root 4096 20 févr. 09:52 pub
    -rw-r--r-- 1 root root  170 13 nov.  23:41 welcome.msg
    
    ./ftp/bin:
    total 112
    ---x--x--x 1 root root 108008 20 févr. 09:54 ls
    
    ./ftp/etc:
    total 8
    -r--r--r-- 1 root root  12 20 févr. 09:59 group
    -r--r--r-- 1 root root 145 20 févr. 10:01 passwd
    
    ./ftp/incoming:
    total 0
    
    ./ftp/lib:
    total 0
    
    ./ftp/pub:
    total 0
    

    On rajoute dans ftp/lib les librairies utilisées par les programmes mis dans ftp/bin. Les librairies utilisées par les programmes sont visibles avec la commande ldd. Si vous ajoutez d’autres programmes, il faudra y mettre également les bonnes librairies.

    
root@CP2L:/home# ldd /bin/ls
    	linux-vdso.so.1 =>  (0x00007fffba09a000)
    	libselinux.so.1 => /lib/libselinux.so.1 (0x00007fd3c2e74000)
    	librt.so.1 => /lib/librt.so.1 (0x00007fd3c2c6c000)
    	libacl.so.1 => /lib/libacl.so.1 (0x00007fd3c2a64000)
    	libc.so.6 => /lib/libc.so.6 (0x00007fd3c2702000)
    	libdl.so.2 => /lib/libdl.so.2 (0x00007fd3c24fe000)
    	/lib64/ld-linux-x86-64.so.2 (0x00007fd3c30ae000)
    	libpthread.so.0 => /lib/libpthread.so.0 (0x00007fd3c22e1000)
    	libattr.so.1 => /lib/libattr.so.1 (0x00007fd3c20dd000)
    

    On copie les librairies nécessaires.

    
root@CP2L:/home# cp /lib/libselinux.so.1 ~ftp/lib
    root@CP2L:/home# cp /lib/librt.so.1 ~ftp/lib
    root@CP2L:/home# cp /lib/libacl.so.1 ~ftp/lib
    root@CP2L:/home# cp /lib/libc.so.6 ~ftp/lib
    root@CP2L:/home# cp /lib/libdl.so.2 ~ftp/lib
    root@CP2L:/home# cp /lib64/ld-linux-x86-64.so.2 ~ftp/lib64
    root@CP2L:/home# cp /lib/libpthread.so.0 ~ftp/lib
    root@CP2L:/home# cp /lib/libattr.so.1 ~ftp/lib
    

    Voici ce qu'on obtient à la fin :

    
root@CP2L:/home# cd /home && ls -alR ftp
    ftp:
    total 36
    drwxr-xr-x 8  113 nogroup 4096 20 févr. 10:13 .
    drwxr-xr-x 4 root root    4096 19 févr. 10:06 ..
    d--x--x--x 2 root root    4096 20 févr. 09:54 bin
    d--x--x--x 2 root root    4096 20 févr. 10:00 etc
    drwx-wx-wt 2 root root    4096 20 févr. 09:52 incoming
    drwxr-xr-x 2 root root    4096 20 févr. 10:13 lib
    drwxr-xr-x 2 root root    4096 20 févr. 10:13 lib64
    dr-xr-xr-x 2 root root    4096 20 févr. 09:52 pub
    -rw-r--r-- 1 root root     170 13 nov.  23:41 welcome.msg
    
    ftp/bin:
    total 120
    d--x--x--x 2 root root      4096 20 févr. 09:54 .
    drwxr-xr-x 8  113 nogroup   4096 20 févr. 10:13 ..
    ---x--x--x 1 root root    108008 20 févr. 09:54 ls
    
    ftp/etc:
    total 16
    d--x--x--x 2 root root    4096 20 févr. 10:00 .
    drwxr-xr-x 8  113 nogroup 4096 20 févr. 10:13 ..
    -r--r--r-- 1 root root      12 20 févr. 09:59 group
    -r--r--r-- 1 root root     145 20 févr. 10:01 passwd
    
    ftp/incoming:
    total 8
    drwx-wx-wt 2 root root    4096 20 févr. 09:52 .
    drwxr-xr-x 8  113 nogroup 4096 20 févr. 10:13 ..
    
    ftp/lib:
    total 1772
    drwxr-xr-x 2 root root       4096 20 févr. 10:13 .
    drwxr-xr-x 8  113 nogroup    4096 20 févr. 10:13 ..
    -rw-r--r-- 1 root root      30408 20 févr. 10:13 libacl.so.1
    -rw-r--r-- 1 root root      17608 20 févr. 10:13 libattr.so.1
    -rwxr-xr-x 1 root root    1437064 20 févr. 10:13 libc.so.6
    -rw-r--r-- 1 root root      14696 20 févr. 10:13 libdl.so.2
    -rwxr-xr-x 1 root root     131258 20 févr. 10:13 libpthread.so.0
    -rw-r--r-- 1 root root      31744 20 févr. 10:13 librt.so.1
    -rw-r--r-- 1 root root     117848 20 févr. 10:13 libselinux.so.1
    
    ftp/lib64:
    total 140
    drwxr-xr-x 2 root root      4096 20 févr. 10:13 .
    drwxr-xr-x 8  113 nogroup   4096 20 févr. 10:13 ..
    -rwxr-xr-x 1 root root    128744 20 févr. 10:13 ld-linux-x86-64.so.2
    
    ftp/pub:
    total 8
    dr-xr-xr-x 2 root root    4096 20 févr. 09:52 .
    drwxr-xr-x 8  113 nogroup 4096 20 févr. 10:13 ..
    

25.4.3. Test de l'accès ftp et sécurisation du service

  1. Vérifiez que le port ftp est bien ouvert.

    
vanvincq@CP2L /home $ sudo netstat -atup | grep -E "ftp.*LISTEN"
    tcp        0      0 *:ftp                   *:*                     LISTEN      2593/inetd 
    
  2. Commentez dans le fichier /etc/ftpusers les lignes comme indiqué ci-dessous pour autoriser l’accès anonyme pour les comptes anonymous et et ftp :

    
vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ cat /etc/ftpusers 
    # /etc/ftpusers: list of users disallowed FTP access. See ftpusers(5).
    
    root
    daemon
    bin
    sys
    sync
    games
    man
    lp
    mail
    news
    uucp
    nobody
    

    Rien à commenter, tout est en ordre.

  3. Testez et vérifiez le bon fonctionnement de l'accès ftp anonyme (en utilisant le compte ftp ou anonymous) avec la commande : lftp localhost -u ftp

    
vanvincq@CP2L /home $ lftp 127.0.0.1 -u ftp
    Mot de passe : 
    lftp ftp@127.0.0.1:~>
    

    Tout semble en ordre. Essayons la commande ls.

    
lftp ftp@127.0.0.1:~> ls
    ls: L'authentification a échoué.: 530 Login incorrect.
    

    Ce problème a déjà été rencontré par l'un de mes collègues de la CP2L. La source de l'erreur se trouverait dans le fichier /etc/proftpd/proftpd.conf. Avant d'aller y jeter un oeil, regardons ce qu'on nous dit plus loin :

    "Si la connexion ne se fait pas, vérifier les ports ouverts, la table des processus, les messages dans les journaux. Vérifier enfin le fichier de configuration /etc/proftpd.conf. Vous devriez, au minimum, avoir ces valeurs :"

    
ServerType	standalone
    <Anonymous ~ftp>
    	User	ftp
    	Group	nogroup
    	UserAlias	anonymous ftp
    RequireValidShell off
    </Anonymous>
    

    Regardons maintenant le contenu du fichier /etc/proftpd/proftpd.conf :

    
vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ cat /etc/proftpd/proftpd.conf
    #
    # /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file.
    # To really apply changes reload proftpd after modifications.
    # 
    
    # Includes DSO modules
    Include /etc/proftpd/modules.conf
    
    # Set off to disable IPv6 support which is annoying on IPv4 only boxes.
    UseIPv6				on
    # If set on you can experience a longer connection delay in many cases.
    IdentLookups			off
    
    ServerName			"Debian"
    ServerType			inetd
    DeferWelcome			off
    
    MultilineRFC2228		on
    DefaultServer			on
    ShowSymlinks			on
    
    TimeoutNoTransfer		600
    TimeoutStalled			600
    TimeoutIdle			1200
    
    DisplayLogin                    welcome.msg
    DisplayChdir               	.message true
    ListOptions                	"-l"
    
    DenyFilter			\*.*/
    
    # Use this to jail all users in their homes 
    # DefaultRoot			~
    
    # Users require a valid shell listed in /etc/shells to login.
    # Use this directive to release that constrain.
    # RequireValidShell		off
    
    # Port 21 is the standard FTP port.
    Port				21
    
    # In some cases you have to specify passive ports range to by-pass
    # firewall limitations. Ephemeral ports can be used for that, but
    # feel free to use a more narrow range.
    # PassivePorts                  49152 65534
    
    # If your host was NATted, this option is useful in order to
    # allow passive tranfers to work. You have to use your public
    # address and opening the passive ports used on your firewall as well.
    # MasqueradeAddress		1.2.3.4
    
    # This is useful for masquerading address with dynamic IPs:
    # refresh any configured MasqueradeAddress directives every 8 hours
    <IfModule mod_dynmasq.c>
    # DynMasqRefresh 28800
    </IfModule>
    
    # To prevent DoS attacks, set the maximum number of child processes
    # to 30.  If you need to allow more than 30 concurrent connections
    # at once, simply increase this value.  Note that this ONLY works
    # in standalone mode, in inetd mode you should use an inetd server
    # that allows you to limit maximum number of processes per service
    # (such as xinetd)
    MaxInstances			30
    
    # Set the user and group that the server normally runs at.
    User				proftpd
    Group				nogroup
    
    # Umask 022 is a good standard umask to prevent new files and dirs
    # (second parm) from being group and world writable.
    Umask				022  022
    # Normally, we want files to be overwriteable.
    AllowOverwrite			on
    
    # Uncomment this if you are using NIS or LDAP via NSS to retrieve passwords:
    # PersistentPasswd		off
    
    # This is required to use both PAM-based authentication and local passwords
    # AuthOrder			mod_auth_pam.c* mod_auth_unix.c
    
    # Be warned: use of this directive impacts CPU average load!
    # Uncomment this if you like to see progress and transfer rate with ftpwho
    # in downloads. That is not needed for uploads rates.
    #
    # UseSendFile			off
    
    TransferLog /var/log/proftpd/xferlog
    SystemLog   /var/log/proftpd/proftpd.log
    
    <IfModule mod_quotatab.c>
    QuotaEngine off
    </IfModule>
    
    <IfModule mod_ratio.c>
    Ratios off
    </IfModule>
    
    
    # Delay engine reduces impact of the so-called Timing Attack described in
    # http://security.lss.hr/index.php?page=details&ID=LSS-2004-10-02
    # It is on by default. 
    <IfModule mod_delay.c>
    DelayEngine on
    </IfModule>
    
    <IfModule mod_ctrls.c>
    ControlsEngine        off
    ControlsMaxClients    2
    ControlsLog           /var/log/proftpd/controls.log
    ControlsInterval      5
    ControlsSocket        /var/run/proftpd/proftpd.sock
    </IfModule>
    
    <IfModule mod_ctrls_admin.c>
    AdminControlsEngine off
    </IfModule>
    
    #
    # Alternative authentication frameworks
    #
    #Include /etc/proftpd/ldap.conf
    #Include /etc/proftpd/sql.conf
    
    #
    # This is used for FTPS connections
    #
    #Include /etc/proftpd/tls.conf
    
    #
    # Useful to keep VirtualHost/VirtualRoot directives separated
    #
    #Include /etc/proftpd/virtuals.con
    
    # A basic anonymous configuration, no upload directories.
    
    # <Anonymous ~ftp>
    #   User				ftp
    #   Group				nogroup
    #   # We want clients to be able to login with "anonymous" as well as "ftp"
    #   UserAlias			anonymous ftp
    #   # Cosmetic changes, all files belongs to ftp user
    #   DirFakeUser	on ftp
    #   DirFakeGroup on ftp
    # 
    #   RequireValidShell		off
    # 
    #   # Limit the maximum number of anonymous logins
    #   MaxClients			10
    # 
    #   # We want 'welcome.msg' displayed at login, and '.message' displayed
    #   # in each newly chdired directory.
    #   DisplayLogin			welcome.msg
    #   DisplayChdir		.message
    # 
    #   # Limit WRITE everywhere in the anonymous chroot
    #   <Directory *>
    #     <Limit WRITE>
    #       DenyAll
    #     </Limit>
    #   </Directory>
    # 
    #   # Uncomment this if you're brave.
    #   # <Directory incoming>
    #   #   # Umask 022 is a good standard umask to prevent new files and dirs
    #   #   # (second parm) from being group and world writable.
    #   #   Umask				022  022
    #   #            <Limit READ WRITE>
    #   #            DenyAll
    #   #            </Limit>
    #   #            <Limit STOR>
    #   #            AllowAll
    #   #            </Limit>
    #   # </Directory>
    # 
    # </Anonymous>
    

    Le problème vient bien de là. Le compte anonyme est désactivé par défaut. Réessayons après avoir décommenté et modifié les lignes nécessaires.

    Version lftp :

    
vanvincq@CP2L /home $ lftp 127.0.0.1 -u ftp
    Mot de passe : 
    lftp ftp@127.0.0.1:~> ls          
    d--x--x--x   2 ftp      ftp          4096 Feb 20 08:54 bin
    d--x--x--x   2 ftp      ftp          4096 Feb 20 09:00 etc
    drwx-wx-wt   2 ftp      ftp          4096 Feb 20 08:52 incoming
    drwxr-xr-x   2 ftp      ftp          4096 Feb 20 09:13 lib
    drwxr-xr-x   2 ftp      ftp          4096 Feb 20 09:13 lib64
    dr-xr-xr-x   2 ftp      ftp          4096 Feb 20 08:52 pub
    -rw-r--r--   1 ftp      ftp           170 Nov 13 22:41 welcome.msg
    

    Version ftp :

    
vanvincq@CP2L /home $ ftp 127.0.0.1
    Connected to 127.0.0.1.
    220 ProFTPD 1.3.3a Server (Debian) [127.0.0.1]
    Name (127.0.0.1:vanvincq): ftp
    331 Anonymous login ok, send your complete email address as your password
    Password:
    230-Welcome, archive user ftp@CP2L !
    230-
    230-The local time is: Mon Feb 20 10:57:34 2012
    230-
    230-This is an experimental FTP server.  If you have any unusual problems,
    230-please report them via e-mail to <root@CP2L>.
    230-
    230 Anonymous access granted, restrictions apply
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    200 PORT command successful
    150 Opening ASCII mode data connection for file list
    d--x--x--x   2 ftp      ftp          4096 Feb 20 08:54 bin
    d--x--x--x   2 ftp      ftp          4096 Feb 20 09:00 etc
    drwx-wx-wt   2 ftp      ftp          4096 Feb 20 08:52 incoming
    drwxr-xr-x   2 ftp      ftp          4096 Feb 20 09:13 lib
    drwxr-xr-x   2 ftp      ftp          4096 Feb 20 09:13 lib64
    dr-xr-xr-x   2 ftp      ftp          4096 Feb 20 08:52 pub
    -rw-r--r--   1 ftp      ftp           170 Nov 13 22:41 welcome.msg
    226 Transfer complete
    
  4. Décommentez la ligne anonymous dans le fichier /etc/ftpusers et refaites un essai de connexion. Il doit être refusé.

    
vanvincq@CP2L /home $ cat /etc/ftpusers 
    # /etc/ftpusers: list of users disallowed FTP access. See ftpusers(5).
    
    root
    ftp
    anonymous
    daemon
    bin
    sys
    sync
    games
    man
    lp
    mail
    news
    uucp
    nobody
    
    
vanvincq@CP2L /home $ lftp 127.0.0.1 -u ftp
    Mot de passe : 
    lftp ftp@127.0.0.1:~> ls          
    ls: L'authentification a échoué.: 530 Login incorrect. 
    
    
vanvincq@CP2L /home $ ftp 127.0.0.1
    Connected to 127.0.0.1.
    220 ProFTPD 1.3.3a Server (Debian) [127.0.0.1]
    Name (127.0.0.1:vanvincq): ftp
    331 Anonymous login ok, send your complete email address as your password
    Password:
    530 Login incorrect.
    Login failed.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    

    La connection est bien refusée.