Vous pouvez mettre en place un serveur FTP aussi facilement qu'un deux trois en utilisant pyftpdlib :
- Installer avec pip
pip install --user pyftpdlib
- Exécuter avec
python -m pyftpdlib
, ajouter -w
si vous voulez aussi un accès en écriture.
- il n'y a pas de troisième étape :)
Vous avez maintenant un serveur ftp auquel vous pouvez vous connecter de manière anonyme en partageant votre répertoire personnel. Il s'agit plus d'un test du module, mais il fait ce qu'il dit sur la boîte.
Cette commande :
python -m pyftpdlib --directory=FTP --port=2121 --write
servira, sans privilèges de root, sur le port 2121 et accordera un accès en écriture aux utilisateurs anonymes. Il utilisera également le répertoire FTP
dans le répertoire de travail actuel au lieu de votre répertoire personnel. Tapez python ftpserver.py --help
pour obtenir des informations sur toutes les options.
- Connectez-vous à l'adresse suivante
anonymous@localhost:2121/
Veuillez noter que ce logiciel est publié selon les termes de la loi sur la protection des données. Licence MIT ce qui signifie que vous pouvez en faire ce que vous voulez. Lisez le texte de la licence, il ne s'agit que de quelques lignes, et connaissez vos droits.
Maintenant, ce script ne supporte pas le nom d'utilisateur et le mot de passe dans le cadre de sa fonctionnalité autonome (pour des raisons de sécurité, j'imagine).
J'ai donc ajouté cette fonctionnalité :
Vous avez maintenant, en plus de toutes les options que j'ai mentionnées, les paramètres de la ligne de commande
--username=USERNAME
y --password=PASSWORD
:
python ftpserver.py --port=2121 --username=ftpuser --password=3r2u389r2u333j
Encore une fois, utilisez --help
pour les voir tous.
Cela devrait être aussi facile que possible.
J'ai aussi écrit un petit gui pour cela :
-
Téléchargez-le ici (mis à jour à la rév. 6)
Je suis désolé qu'il fasse 3999 lignes, mais il fera tout ce que l'original fait. Et je voulais garder tout ça dans un seul fichier. Lorsqu'il est lancé sans aucun paramètre (c'est-à-dire qu'il faut le rendre exécutable et le double-cliquer, ou bien créer un lanceur pour celui-ci ), il démarre un petit gui pour vous permettre de configurer votre serveur. Vous pouvez toujours l'importer comme un module Python ou utiliser la ligne de commande ci-dessus.
Problèmes connus :
-
Je ne me suis pas occupé d'autre chose que du port 2121. Cela devrait être simple, rendre le port configurable nécessite une gestion complexe des erreurs dont je ne veux pas que l'utilisateur s'embarrasse. Le port 2121 devrait toujours fonctionner correctement.
-
Il ne vous avertira pas, comme le fait la ligne de commande, de l'utilisation d'une configuration non sécurisée. Par exemple, si vous ne définissez pas de mot de passe ou quelque chose du genre.
EDIT : depuis que l'API de pyftpdlib
y ftpserver.py
a changé (et les liens ubuntu pastebin ont disparu) ; la plupart du post ci-dessus ne fonctionne plus. Pour la version (2014) de pyftpdlib
utilisez ce script ( ftpserver-cli.py
) pour obtenir la même chose que ci-dessus :
#!/usr/bin/env python
# ftpserver-cli.py
import sys
sys.path.append("/path/to/pyftpdlib-svn") # enter your proper path here
import argparse
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
def processCmdLineOptions():
global optparser
optparser = argparse.ArgumentParser(description="ftpserver-cli",
formatter_class=argparse.RawDescriptionHelpFormatter)
optparser.add_argument('-u', '--username', action='store', type=str,
default="user", help="username")
optparser.add_argument('-p', '--password', action='store', type=str,
default="12345", help="password")
optparser.add_argument('-t', '--port', action='store', type=int,
default="21", help="port")
optparser.add_argument('-d', '--directory', action='store', type=str,
default="/home/stefano/Projekte/", help="port")
optargs = optparser.parse_args(sys.argv[1:]) #(sys.argv)
return optargs
optargs = processCmdLineOptions()
print("Using: user: %s pass: %s port: %d dir: %s" % (optargs.username, optargs.password, optargs.port, optargs.directory))
authorizer = DummyAuthorizer()
authorizer.add_user(optargs.username, optargs.password, optargs.directory, perm="elradfmw")
#authorizer.add_anonymous("/home/nobody")
handler = FTPHandler
handler.authorizer = authorizer
server = FTPServer(("127.0.0.1", optargs.port), handler)
server.serve_forever()
appeler avec :
$ sudo python ftpserver-cli.py --directory=/tmp/srvtest
Using: user: user pass: 12345 port: 21 dir: /tmp/srvtest
[I 14-03-02 21:40:57] >>> starting FTP server on 127.0.0.1:21, pid=19286 <<<
...