Le protocole de transfert de fichier est décrit par la RFC 959. Deux extensions sont proposées :
Le modèle classique de communication entre un client FTP et un serveur FTP (d'autres modèles sont possibles) utilise deux concepts :
lesquels communiquent selon le schéma suivant :
La liaison de commande véhicule les commandes définies par le protocole (plus
celles propres aux extensions proposées par l'implémentation courante du
serveur). Y circulent aussi les réponses à ces mêmes commandes.
La liaison de données transporte les données proprement dites, c'est-à-dire le contenu des objets à échanger.
Les commandes standard de la liaison de commande sont regroupées en différentes catégories :
Un serveur minimal doît implémenter les commandes suivantes : TYPE, MODE, USER, QUIT, PORT, STRU, RETR, STOR et NOOP.
Chaque commande du protocole reçoit en retour une réponse. Celle-ci est constituée d'un code de trois chiffres (code de retour xyz), suivit d'un caractère d'espacement puis d'une ligne de texte à caractère informationnel. Il est possible que le texte soit constitué de plusieurs lignes; dans ce cas le caractère d'espacement doit être remplacé par un tiret, et la lecture est terminée par une ligne présentant le même code de retour suivi d'un caractère d'espacement puis de la dernière ligne. Par exemple :
100-Ceci est la première ligne. Vous avez là la seconde. 333 la troisième (attention le serveur y a ajouté des caractères pour éviter trop de confusion...) 100 et la quatrième et dernière.
Le code de retour a une sémantique particulière, le premier chiffre x peut prendre cinq valeurs différentes :
Le second chiffre y a la signification suivante :
Le troisième chiffre z est un simple raffinement sémantique du second.
Voici un exemple de session ftp anonyme :
$ ftp machine.domaine Connected to machine.domaine 220- 220- Bienvenue sur le serveur FTP de notre organisation 220- 220- 220 machine.domaine FTP server ready. Name (votre machine:votre login): ftp 331 Guest login ok, send your complete e-mail address as password. Password: tapez votre adresse électronique Ce qui suit est la bannière 230- 230- Bienvenue ftp ([unknown]) ! 230- 230- Vous êtes connecté sur machine.domaine depuis votremachine.domaine. 230- Il y a actuellement 1 utilisateur(s) de ce service. 230- 230- Note : Aucun abus ne sera toléré. 230- 230-En cas de problème, contactez ftp-admin@machine.domaine 230- Ce qui suit est probablement un message 230- 230- Il n'y a pas encore grand-chose ici... 230- 230- 230 User ftp logged in. Access restrictions apply. On tente de lire le répertoire principal ftp> dir 200 PORT command successful. 150 Opening ASCII mode data connection for /bin/ls. total 16 -rw-r--r-- 1 cheval 42 Sep 13 1999 .message d--x--x--x 2 cheval 512 Sep 13 1999 bin d--x--x--x 2 cheval 512 Sep 13 1999 dev d--x--x--x 3 cheval 512 Sep 13 1999 etc lrwxrwxrwx 1 cheval 7 Sep 13 1999 lib -> usr/lib dr-xr-xr-x 3 ftp 512 Oct 19 09:47 pub drwxr-x--- 2 chile 512 Oct 12 18:23 pub2 d--x--x--x 4 cheval 512 Oct 12 15:23 usr 226 Transfer complete. 427 bytes received in 0,0073 seconds (57,34 Kbytes/s) On tente de se déplacer dans le répertoire /etc ftp> cd etc 250 CWD command successful. On tente de récupérer le contenu du fichier des mots de passe ftp> get passwd 200 PORT command successful. 550 /etc/passwd is marked unretrievable On tente de se déplacer dans le répertoire /pub2 ftp> cd pub2 550 pub2: Permission denied. On tente de se déplacer dans le répertoire /pub ftp> cd /pub Ce qui suit est un message 250- 250- Pour l'instant, pas grand chose... 250- 250- Le serveur nous informe de l'existence d'un fichier à lire 250-Please read the file README 250- it was last modified on Thu Oct 19 09:47:46 2000 - 0 days ago 250 CWD command successful. COnsultons la liste des fichiers et répertoires ftp> dir 200 PORT command successful. 150 Opening ASCII mode data connection for /bin/ls. total 8 -rw-r--r-- 1 cheval 38 Sep 13 1999 .message -rw-r--r-- 1 ftp 33 Oct 19 09:47 README -rw-r--r-- 1 cheval 13 Oct 12 17:31 essai drwxrwxrwx 2 ftp 512 Oct 19 12:45 up-load 226 Transfer complete. 223 bytes received in 0,007 seconds (30,91 Kbytes/s) Essayons de lire le fichier en question en mode compressé ftp> get README.gz 200 PORT command successful. 550 This is a BINARY file, using ASCII mode to transfer will corrupt it. Le serveur nous encourage à utiliser le mode de transfert binaire ftp> bi 200 Type set to I. ftp> get README.gz 200 PORT command successful. 150 Opening BINARY mode data connection for /bin/gzip. 226 Transfer complete. local: README.gz remote: README.gz 60 bytes received in 0,069 seconds (0,85 Kbytes/s) Essayons de déposer un fichier ftp> put README.gz 200 PORT command successful. 553 README.gz: Permission denied on server. (Upload) Essayons de le faire dans le répertoire de dépot ftp> cd up-load 250 CWD command successful. ftp> dir 200 PORT command successful. 150 Opening ASCII mode data connection for /bin/ls. total 10 -rw-r--r-- 1 cheval 0 Oct 19 12:45 .notar ---------- 1 ftp 52 Oct 19 11:15 bibop ---------- 1 ftp 52 Oct 19 10:56 essai ---------- 1 ftp 52 Oct 19 11:06 momo ---------- 1 ftp 52 Oct 19 11:01 toto ---------- 1 ftp 52 Oct 19 11:03 tutu 226 Transfer complete. 320 bytes received in 0,0049 seconds (63,28 Kbytes/s) Essayons de le déposer avec un nom bizarre ftp> put README.gz .bidule 200 PORT command successful. 550-Votre syntaxe est plutôt douteuse... 550 .bidule: Permission denied on server. (Filename (deny)) Essayons d'écraser un fichier existant ftp> put README.gz essai 200 PORT command successful. 553 essai: Permission denied on server. (Overwrite) Essayons de le déposer (attention il n'y a pas de décompression) ftp> put README.gz readme 200 PORT command successful. 150 Opening BINARY mode data connection for readme. 226 Transfer complete. local: README.gz remote: readme 60 bytes sent in 0,022 seconds (2,65 Kbytes/s) Voyons voir ftp> dir 200 PORT command successful. 150 Opening ASCII mode data connection for /bin/ls. total 12 -rw-r--r-- 1 cheval 0 Oct 19 12:45 .notar ---------- 1 ftp 52 Oct 19 11:15 bibop ---------- 1 ftp 52 Oct 19 10:56 essai ---------- 1 ftp 52 Oct 19 11:06 momo ---------- 1 ftp 60 Oct 19 13:26 readme ---------- 1 ftp 52 Oct 19 11:01 toto ---------- 1 ftp 52 Oct 19 11:03 tutu 226 Transfer complete. 373 bytes received in 0,0062 seconds (58,95 Kbytes/s) Essayons maintenant d'acquerir des droits étendus ftp> quote site group test 200 Request for access to group test accepted. ftp> quote site gpass mot-de-passe 200 Group access enabled. Voyons voir /pub2 encore une fois ftp> cd /pub2 250 CWD command successful. ftp> quit 221-You have transferred 120 bytes in 2 files. 221-Total traffic for this session was xxxx bytes in x transfers. 221-Thank you for using the FTP service on machine.domaine. 221 Goodbye.
Les systèmes Unix sont généralement livrés avec un démon de service FTP par défaut. Celui-ci est habituellement nommé ftpd ou in.ftpd. Il est activé en ajoutant la ligne suivante dans le fichier inetd.conf contenant la configuration du super-démon inetd :
ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd
Cette ligne est parfois présente mais commentée par la présence du caractère # en premiêre colonne, auquel cas il suffit de le retirer et forcer le super-démon inetd à lire sa nouvelle configuration en lui délivrant le signal SIGHUP.
Ce démon peut être utilisé pour fournir un accès anonyme au service : c'est-à-dire un accès ouvert à des utilisateurs distants ne disposant pas obligatoirement d'un compte régulier sur le système.
Pour cela il suffit d'effectuer quelques paramétrages :
Un exemple :
ftp:x:uid:gid:FTP Daemon:/bebopalula/ftp:/bin/falsePrévoir par ailleurs un groupe spécial pour cet utilisateur. Le répertoire principal /bebopalula/ftp sera la racine protégée (par un appel à chroot()) de l'arborescence anonyme. D'autre part il est recommandé de lui attribuer un mot de passe impossible ainsi qu'un shell stupide (ici /bin/false), de façon à rendre ce compte inutilisable.
ftp-admin: utilisateur@machinepuis d'exécuter la commande newaliases
Une précaution supplémentaire s'impose : modifier chaque ligne des fichiers .../ftp/etc/passwd et .../ftp/etc/group de façon a maquiller les véritables utilisateurs du système. Purger aussi ces fichiers des identités superflues
Bien entendu à partir de là quelques possibilités sont offertes. Il est possible d'autoriser ou d'interdire de déposer (upload) des fichiers, de consulter librement certains répertoires, voire même de créer des utilisateurs fictifs.
Il est possible d'interdire la connexion ftp pour certains utilisateurs critiques, pour cela il suffit de créer le fichier /etc/ftpusers et d'y faire apparaître les logins interdits (ex : root).
Le fichier /etc/ftpusers est utilisé afin d'interdire tout accès au service ftp aux utilisateurs sensibles. Il suffit donc d'y faire figurer entre autres les comptes d'administration système. Par exemple :
root daemon bin sys adm lp smtp uucp nuucp listen nobody noaccess nobody4 majordom www postgres pop
À l'origine développé à l'Université Washington de Saint-Louis ce produit n'y est plus supporté, c'est maintenant un groupe de développeurs indépendants qui s'en chargent. C'est un produit de remplaçement du démon standard dont les fonctionnalités ne permettent pas une véritable gestion de service anonyme grand public. La version courante (au moment de la rédaction de ce document est la 2.6.2.
Le démon wu-ftpd permet de réaliser des contrôles d'accès plus fins en classant les utilisateurs anonymes selon divers critères et en autorisant ou interdisant certaines fonctionnalités à partir de ces classes. D'autre part des traces de session plus évoluées sont possibles, ainsi que des compressions ou décompressions à la volée.
La configuration de base est strictement identique à celle du démon standard. Nous ne nous attacherons donc à ne décrire que les points divergents.
Le fichier de configuration ftpservers permet de créer des serveurs virtuels très similaires à ce que l'on peut obtenir avec un serveur Web Apache.
Outre le contrôle d'accès réalisé par l'intermédiaire du fichier /etc/ftpusers, il est possible d'autoriser ou interdire explicitement le service ftp en contrôlant l'accès à partir de la machine cliente : /etc/ftphosts.
Deux directives sont utilisables :
Les adresses peuvent ètre précédées du caractère ! pour indiquer une négation. D'autre part le caractère * est utilisable en tant que joker. Par exemple :
allow toto !*.com
autorise l'utilisateur toto à se connecter depuis n'importe quelle machine ne se trouvant pas dans le domaine commercial
Par exemple :
deny bidule * deny * *.com
interdit tout accès au service à bidule et ce d'où qu'il vienne ainsi qu'à n'importe quel utilisateur en provenance du domaine commercial.
Divers raffinement sont possibles : filtrer à l'aide du masque de sous-réseau ou d'adresses IP. L'ordre apparition des directives est significatif et naturel, on applique les règles dans l'ordre d'apparition. Donc :
allow toto * deny toto ga.bu.zo.meu
autorise toto à se connecter depuis n'importe quelle machine sauf ga.bu.zo.meu. Alors que :
deny toto ga.bu.zo.meu allow toto *
autorise toto à se connecter depuis n'importe quel endroit.
Cette fonctionnalité assez méconnue permet aux utilisateurs de réaliser des compressions ou décompressions à la volée des données à télécharger.
Plutôt que d'offrir les mêmes données compressées sous divers formats afin que les utilisateurs économisent du temps lors des transferts, il est possible d'économiser de la place sur le serveur en n'offrant qu'un exemplaire de base tout en permettant aux clients de choisir son format préféré de compression.
C'est le rôle du fichier /etc/ftpconversions, qui contient des lignes au format suivant :
pa:sa:pc:sc:cmd:type:options:description
où :
Voici un exemple :
:.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP : : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP : : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR : : :.tar.gz:/bin/tar -c -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP
La première ligne indique que si l'utilisateur à demandé le transfert du fichier fic alors que n'existe sur l'archive que le fichier fic.gz, le serveur décompressera ce dernier à la volée.
On dévine aisément ce que permet la deuxième ligne : une compression automatique pour un fichier non compressé de l'archive.
La troisième ligne s'applique sur des fichiers ou des répertoires et permet donc de télécharger des données au format tar.
La quatrième ligne s'applique sur des fichiers ou des répertoires et permet donc de télécharger des données au format tar compressé.
Attention : pour que cela fonctionne il ne faut pas oublier de placer dans le répertoire /bin de l'arborescence anonyme les commandes utilisées, ainsi que les bibliothèques dynamiques éventuellement nécessaires à leur bon fonctionnement.
Le fichier ftpaccess permet de configurer le démon. Il contient de très nombreuses directives (que nous ne verrons pas toutes) classées dans les catégories suivantes : contrôles d'accês, informations, traces, ratios, divers et permissions.
Trois types d'utilisateurs y sont distinguables :
class classe liste-de-type adresse [adresse ...]
permet de définir une classe d'utilisateurs en combinant des types (real, guest ou anonymous) et des localisations. Par exemple :
class utilisateurs real * class locaux guest,anonymous *.jussieu.fr class exterieurs guest,anonymous *
définit la classe utilisateurs de tous ceux qui possèdent un compte sur la machine, la classe locaux de tous ceux qui sont invités ou anonymes mais qui se connectent depuis le domaine jussieu.fr et la classe exterieurs de tous ceux qui sont invités ou anonymes et qui se connectent depuis le reste du monde. En effet l'ordre d'apparition de ces directives stipule qu'une connexion est classée par la première directive rencontrée et qui correspond.
deny adresse fichier de message
permet d'interdire l'accès au service depuis certaines machines tout en permettant d'afficher le message contenu dans le fichier indiqué. Par exemple :
deny *.com /etc/msgs/deny.com
prévient toute tentative de connection depuis le domaine commercial en affichant le contenu du fichier /etc/msgs/deny.com lequel contient par exemple :
Désolé, ce service est réservé aux utilisateurs du cyber-monde libre ! Vous vous êtes connectés depuis %R. Pour toute réclamation contactez %E.
dans ce cas les indicateurs %R et %E seront remplaçés dynamiquement par le nom de la machine cliente et l'adresse électronique de l'administrateur du service (voir la directive email).
guestgroup groupe [groupe ...]
permet de créer un groupe d'utilisateurs invités (voir utilisateurs invités).
guestuser utilisateur [utilisateur ...]
permet de créer un utilisateur invité (voir utilisateurs invités).
limit classe nombre horaires fichier de messsage
permet de limiter les accès pour une classe d'utilisateurs. Par exemple :
limit utilisateurs 5 Any /etc/msgs/msg.toomany limit locaux 10 Any /etc/msgs/msg.toomany limit exterieurs 20 SaSu|Any1800-0600 /etc/msgs/msg.toomany limit exterieurs 10 Any /etc/msgs/msg.toomany
interdit plus de 5 sessions simultanées aux usagers de la classe utilisateurs, plus de 10 sessions simultanées aux usagers de la classe locaux, plus de 20 sessions simultanées aux usagers de la classe exterieurs les samedis, dimanche et autres jours de la semaine entre 18h00 et 6h00 et plus de 10 sessions simultanées le reste du temps. Tout accès supplémentaire sera voué à l'échec et le message contenu dans le fichier indiqué sera affiché. Par exemple :
Bonjour %U, Il nous semble qu'en ce moment vous êtes de trop. En effet les règles en vigueur n'autorisent pas plus de %M utilisateurs simultanément à ce moment précis de la journée %T. Veuillez réessayer plus tard. Pour toute réclamation contactez %E.
loginfails nombre
permet de limiter le nombre de tentatives d'identification ratées pour une session donnée.
noretrieve [absolute|relative] [class=classe] ...
permet de rendre impossible toute tentative d'accès à certains fichiers ou répertoires de l'archive. Par exemple :
noretrieve /etc /usr /dev /bin /lib core
interdit l'accès à tout fichier situé sous les répertoires /etc, /usr, /dev, /bin et /lib ainsi qu'aux fichiers de nom core où qu'ils se trouvent.
private yes|no
permet d'autoriser ou d'interdire l'utilisation d'identifications étendues à travers les commandes étendues SITE GROUP et SITE GPASS.
Cette fonctionnalité permet d'obtenir des droits différents de ceux de l'utilisateur ftp après s'être identifié en tant qu'anonyme. C'est très utile dans le cas où il n'est pas possible de repérer de telles connexions par le type ou la provenance.
Pour cela il faut utiliser le fichier /etc/ftpgroups
autogroup, realgroup, realuser, nice, defumask, tcpwindow, keepalive, timeout accept, timeout connect, timeout data, timeout idle, timeout maxidle, timeout RFC931, file-limit, data-limit, guestserver, allow-retrieve
banner fichier
permet d'afficher le contenu du fichier en question avant la procédure d'identification. Par exemple :
banner /etc/msgs/msg.banner
Le fichier /etc/msgs/msg.banner ayant par exemple pour contenu :
Bienvenue sur le serveur FTP de notre organisation
Attention certains clients FTP ne supportent pas la présence de messages de plus d'une ligne.
email mél
permet de définir l'adresse électronique de l'administrateur du service (que chaque utilisateur est en droit de contacter en cas de problèmes) et qui apparaîtra en remplacement de la chaîne %E dans les différents messsages.
greeting full|brief|terse
greeting text message
permet de contrôler le message envoyé lors de la connexion. L'option full employée par défaut mais non recommandée fait apparaître le nom de la machine ainsi que la version du serveur. L'option brief ne fait apparaître que le nom de la machine. Quant à la troisième forme elle ne fait apparaître qu'un message minimal. La quatrième forme permet de préciser le message lui-même.
message chemin [LOGIN|CWD=répertoire [classe ...]]
permet de définir des messages à afficher lorsque certains évènements se produisent : identification réussie (LOGIN) ou changement de répertoire courant (CWD=). Pour rendre agréable l'interaction avec l'utilisateur ces messages ne seront affichées qu'une seule fois par session. Par exemple :
message /etc/msgs/msg.bienvenue login message .message cwd=*
affichera le contenu du fichier /etc/msgs/msg.bienvenue dès qu'un utilisateur se sera identifié, et le contenu du fichier .message s'il existe pour chaque répertoire dans lequel l'utilisateur se placera pour la première fois. Le fichier /etc/msgs/msg.bienvenue contiendra par exemple :
Bienvenue %U (%u) ! Vous êtes connecté sur %L depuis %R. Il y a actuellement %N utilisateur(s) de ce service. Note : Aucun abus ne sera toléré. En cas de problème, contactez %E
pour connaître l'effet des différentes directives %x, reportez-vous plus loin dans ce document.
readme chemin [LOGIN|CWD=répertoire [classe ...]]
permet de prévenir l'utilisateur qu'un fichier particulier existe et a été modifié â telle ou telle date afin de l'inviter à le télécharger puis le consulter. Ceci lors d'évènements particuliers : identification réussie (LOGIN) ou changement de répertoire courant (CWD=). Pour rendre agréable l'interaction avec l'utilisateur ces messages ne seront affichées qu'une seule fois par session. Par exemple :
readme README* login readme README* cwd=*
préviendra l'utilisateur de l'existence de fichiers README* dès qu'un utilisateur se sera identifié, et de fichiers README* pour chaque répertoire dans lequel l'utilisateur se placera pour la première fois.
log commands liste de types
permet d'activer le traçage des commandes du protocole effectuées par les clients dont le type apparaît dans la liste.
log transfers liste de types directions
permet d'activer le traçage des transferts effectués par les clients dont le type apparaît dans la liste. Les directions possibles sont inbound pour les transferts du client vers le serveur ou outbound du serveur vers le client.
log security liste de types
permet de tracer les violations de sécurité effectuées par les clients dont le type apparaît dans la liste.
Il existe trois directives ul-dl-rate, dl-free et dl-free-dir.
alias pseudo-répertoire répertoire
permet de définir des raccourcis dénommant des répertoires particuliers. Par exemple :
alias gnu /pub/software/mirror/gnu
autorise l'utilisateur à utiliser la commande cd gnu: afin de se placer dans le répertoire correspondant.
Il est préférable d'indiquer l'existence de tels raccourcis dans l'un des messages affichés en début de session
compress yes|no classe [classe ...]
permet d'autoriser ou interdire la fonctionnalité de compression ou décompression à certaines classes d'utiliseteurs.
shutdown fichier
permet de réaliser des extinctions propres du service. Lorsque le fichier désigné est présent, les clients sont prévenus d'une prochaine interruption du service et les nouveaux arrivant interdits d'accès. Par exemple :
shutdown /etc/msgs/shutmsg
Le fichier en question doit être structuré de façon particulière. Son contenu est une ligne du type :
année mois jour heure minutes interdiction déconnection texte
où l'on désigne la date et l'heure précise d'interruption du service (les mois, heures et minutes sont respectivement notées de 00 à 11, 23 et 59). L'heure d'interdiction de connexion est indiquée en utilisant le format HHMM, cette mesure est relative à l'heure de fin de service, idem pour les déconnections. Par exemple :
2001 00 20 10 00 0030 0015 Interruption de service à %s.
déclare une interruption de service pour le 20 janvier 2001 à 10 heures du matin. De plus les accès seront bloqués 30 minutes auparavant et les connexiions automatiquement coupées 15 minutes auparavant.
Ce fichier peut être automatiquement généré à l'aide de la commande ftpshut.
tar yes|no classe [classe ...]
permet d'autoriser ou interdire la fonctionnalité d'archivage ou désarchivage à certaines classes d'utiliseteurs.
chmod yes|no liste de types
permet d'autoriser ou interdire aux clients dont le type apparaît dans la liste de modifier les droits d'accès des fichiers.
delete yes|no liste de types
permet d'autoriser ou interdire aux clients dont le type apparaît dans la liste de supprimer des fichiers.
deny-email mél
permet d'invalider certains mot de passe utilisés lors d'une connexion anonyme même s'ils sont conformes au contrôle réalisé (voir passwd-check). Par exemple :
deny-email mozilla@ deny-email ie30user@ deny-email ie40user@ deny-email ie50user@
refuse les mots de passe indiqués. Ceux-ci sont automatiquement générés par des navigateurs mal configurés.
overwrite yes|no liste de types
permet d'autoriser ou interdire aux clients dont le type apparaît dans la liste de modifier des fichiers.
passwd-check none|trivial|rfc822 enforce|warn
définit le niveau de contrôle réalisé sur les mots de passe fournis par les clients anonymes. none permet d'utiliser n'importe quel chaîne de caractères. trivial ne contrôle que la présence du caractère @. rfc822 assure que le mot de passe est une adresse électronique conforme à la RFC 822.
Le test de conformité réalisée n'est que syntaxique.
Si le niveau de contrôle est warn et que le mot de passe n'est pas conforme à ce qui est précisé, l'identification est acceptée mais un message sera affiché. Si le niveau de contrôle est enforce alors un message d'erreur sera renvoyé et l'identification rejetée.
path-filter liste de types fichier autorisés [interdits ...]
permet de contrôler quels sont les noms de fichiers autorisés lors d'un dépot. La règle s'applique aux utilisateurs appartenant à l'un des types indiqués. En cas de non conformité le message est affiché. autorisés décrit les noms autorisés et interdits permet d'en retirer de la liste. Par exemple :
path-filter anonymous,guest /etc/msgs/pathmsg ^[-A-Za-z0-9_\.]*$ ^\. ^-
permet aux utilisateurs anonymous et guest de créer des fichiers dont le nom contient n'importe quel suite de caractères alphabétiques majuscules ou minuscules, chiffres, point, soulignement (_) et tiret, sauf s'il commence par un point ou un tiret.
Le fichier /etc/msgs/pathmsg contient un message indiquant l'erreur :
Le nom de fichier utilisé est plutôt douteux...
rename yes|no liste de types
permet d'autoriser ou interdire aux clients dont le type apparaît dans la liste de renommer des fichiers.
umask yes|no liste de types
permet d'autoriser ou interdire aux clients dont le type apparaît dans la liste de modifier son masque de droits d'accès.
upload [absolute|relative] [class=classe] racine répertoire \ yes|no [propriétaire groupe mode [dirs|nodirs] [mode répertoire]]
Cette directive est assez compliquée, il est donc recommandé de lire la documentation accompagnant le serveur.
Elle permet de contrôler les dépots. Par exemple :
upload /home/ftp * no upload /home/ftp /pub/up-load yes ftp ftp 0000 nodirs
La première ligne interdit aux utilisateurs dont la racine est /home/ftp de réaliser un quelconque dépôt.
La seconde autorise n'importe quel utilisateur dont le répertoire racine est /home/ftp à déposer des fichiers dans le répertoire /pub/up-load. Dans ce cas le fichier déposé est propriété de l'utilisateur ftp du groupe ftp et ses droits d'accès seront nuls. De plus la création de sous-répertoires y sera interdite.
L'autorisation de déposer doît être configurée avec beaucoup d'attention afin d'éviter que l'archive anonyme soit utilisée comme dépôt clandestin d'informations à caractère douteux ou illégal.
Ce fichier contient une liste de pseudo-groupes associés à de véritables groupes identifiés dans le système et protégés par un mot de passe permettant au serveur ftp d'utiliser les droits d'accès de ce dernier pour accéder aux fichiers et répertoires. Chaque ligne de ce fichier est au format suivant :
pseudo-groupe:mot de passe:groupe
Où :
Par exemple :
test:mot de passe crypté:hendrix
La modification de ce fichier peut-être réalisée avec la commande privatepw.
Les fichiers contenant des messages sont paramétrables de façon à y faire apparaître certaines informations sur le ou les systèmes intervenant voire la configuration du serveur lui-même. Ces paramètres sont les suivants :
Cookie | Sémantique |
---|---|
%T | date et heure locale |
%F | espace libre (exprimé en octets) sur la partition courante |
%C | répertoire courant |
%E | mél de l'administrateur du service |
%R | adresse Internet de la machine cliente |
%L | adresse Internet du serveur |
%u | identification de l'utilisateur (identd, RFC 931) |
%U | identification fournie lors de la connexion |
%M | nombre maximal d'utilisateur dans la classe courante |
%N | nombre d'utilisateurs actuellement connectés dans la classe courante |
%B | limite absolue de blocs disque alloués |
%b | limite courante de blocs disque alloués |
%Q | nombre de blocs disque courant |
%I | limite absolue d'inoeuds alloués |
%i | limite courante d'inoeuds alloués |
%q | nombre d'inoeuds courant |
%H | délai maximal pour utilisation excessive du disque |
%h | délai maximal pour dépassement de quotas disque |
Cookie | Sémantique |
---|---|
%xu | nombre d'octets déposés |
%xd | nombre d'octets téléchargés |
%xR | ratio de téléchargement |
%xc | crédit d'octets |
%xT | délai limite |
%xE | temps écoulé depuis le début de session (en minutes) |
%xL | crédit temps |
%xU | limite de dépôt |
%xD | limite de téléchargement |
Pour créer un invité il suffit de créer un utilisateur sur la machine en respectant les règles données pour l'utilisateur ftp mais en utilisant un répertoire pouvant contenir par défaut contenant /./. Par exemple :
jimi:x:1031:200:Jimi Hendrix:/home/ftp/./pub2:/bin/false
Il faut par ailleurs activer guestuser dans le fichier ftpaccess. Par exemple :
guestuser jimi
Dans ce cas d'une connexion ftp avec le couple identifiant (jimi,mot-de-passe), le serveur ftp exécute un chroot() dans le répertoire /home/ftp puis positionne par défaut le répertoire de travail à /pub2.
Le serveur wu-ftpd est fournit avec quelques utilitaires : ftpwho, ftpcount, ftpshut et ftprestart.
Il existe d'autre démon de service ftp: ProFTPD, Pure-FTPd, vsftpd.