Outils pour utilisateurs

Outils du site


linux:pureftp (lu 42574 fois)

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
linux:pureftp [29-01-2012 12:16]
edmc73 Document déplacé depuis tuto:network:pureftp
linux:pureftp [12-02-2014 10:35] (Version actuelle)
edmc73
Ligne 4: Ligne 4:
 Pure-ftpd est un serveur FTP que j'aime bien et qui est simple à configurer.\\ Pure-ftpd est un serveur FTP que j'aime bien et qui est simple à configurer.\\
 Pour s'identifier on peut utiliser soit les comptes unix de la machine soit une base de données indépendantes. Pour s'identifier on peut utiliser soit les comptes unix de la machine soit une base de données indépendantes.
 +
 +Dans notre cas, nous allons utiliser le ftp pour ce connecter en tant que www-data qui est le compte d'apache et pour cela nous n'allons pas utiliser la base de données d'utilisateur unix (pam). Nous allons créer notre propre base de données utilisateur.
  
 ===== Installation ===== ===== Installation =====
 Classique  Classique 
   aptitude install pure-ftpd-common   aptitude install pure-ftpd-common
 +  
 +Le message suivant peut apparaître
 +  update-rc.d: warning: pure-ftpd stop runlevel arguments (1) do not match LSB Default-Stop values (0 1 6)
 +  Starting ftp server: Running: /usr/sbin/pure-ftpd -l pam -O clf:/var/log/pure-ftpd/transfer.log -E -u 1000 -8 UTF-8 -B
 +
 +Ne pas en tenir compte...
      
 ===== Configuration ===== ===== Configuration =====
 +
 +==== Avec l'outil dpkg-reconfigure ====
 On peut utiliser  On peut utiliser 
   dpkg-reconfigure pure-ftpd-common   dpkg-reconfigure pure-ftpd-common
 +  
 +Lancement de pure-ftpd
 +  Serveur autonome
  
-Il y a aussi des fichiers de configuration à modifier dans certain cas+Pure-ftpwho doit-il s'exécuter avec les droits du superutilisateur ?  
 +  Non  si vous en avant pas besoin sinon Oui
  
-Créer un fichier PassivePortRange dans etc/pure-ftpd/conf/ :+Faut-il activer les environnement fermés (« chroots ») virtuels ?  
 +  Non  sauf si vous n'avez pas de lien symbolique dans vos dossiers utilisateurs, mettez plutot Oui par sécurité 
 +   
 +Voila les seules choses configurable via cet outils... 
 + 
 +==== Avec les fichiers de config ==== 
 + 
 +<note>Tous les paramètres de configuration se trouvent dans le man de pure-ftpd-wrapper, c'est une spécificité de debian.</note> 
 + 
 +Passons aux fichiers de configuration à modifier dans notre cas 
 + 
 +Créer un fichier PassivePortRange dans /etc/pure-ftpd/conf/ :
   ~$ vi /etc/pure-ftpd/conf/PassivePortRange   ~$ vi /etc/pure-ftpd/conf/PassivePortRange
  
 Lui entrer deux valeur numériques entre 1024 et 65535. Lui entrer deux valeur numériques entre 1024 et 65535.
 Exemple : Exemple :
-  3000 3100+  40000 40100
  
-Pure-ftp utilisera alors un port entre 3000 et 3100 pour le transport de données.+Pure-ftp utilisera alors un port entre 40000 et 40100 pour le transport de données.
  
 Dans le mode FTP passif , le client demande au serveur de choisir un port aléatoire sur lequel ce dernier se mettra à l'écoute en attente de la connexion de données. Le serveur communique au client le port qu'il a choisi pour le transfert des données. Dans le mode FTP passif , le client demande au serveur de choisir un port aléatoire sur lequel ce dernier se mettra à l'écoute en attente de la connexion de données. Le serveur communique au client le port qu'il a choisi pour le transfert des données.
Ligne 36: Ligne 61:
 Redémarrer pure-ftp : Redémarrer pure-ftp :
   ~$ /etc/init.d/pure-ftpd restart   ~$ /etc/init.d/pure-ftpd restart
 +  Restarting ftp server: Running: /usr/sbin/pure-ftpd -l pam -O clf:/var/log/pure-ftpd/transfer.log -E -u 1000 -p 40000:40100 -8 UTF-8 -B
 +
 +On constate que nos ports ont été ajouté à la ligne de commande ci-dessus.
  
 Règle du firewall mais je suis sur de rien, c'est pour le mode passif Règle du firewall mais je suis sur de rien, c'est pour le mode passif
Ligne 41: Ligne 69:
   iptables -A OUTPUT -p tcp -o eth0 --sport 40000:40100 -j ACCEPT   iptables -A OUTPUT -p tcp -o eth0 --sport 40000:40100 -j ACCEPT
  
-===== Administration ===== +==== Configuration du système d'authentification ====
-==== Ajouter un utilisateur ==== +
-Dans cet exemple, je vais créer une liste d'utilisateur virtuel c'est à dire des utilisateurs qui n'existe pas dans le system.\\ +
-Nous allons donc utiliser une database de pure-ftpd appelé puredb\\ +
-Créons maintenant un utilisateur : +
-  pure-pw useradd toto -u totounix -d /home/totounix -m +
-   +
-L'utilisateur toto est maintenant créé et aura les mêmes droit que l'utilisateur local totounix.\\ +
-L'argument -m permet de retourner l'ajout de cet utilisateur dans la puredb.\\ +
-Si on oublie -m on peut toujours recompiler la puredb par cette commande : +
-  pure-pw mkdb +
-  +
 Pour s'assurer que pure-ftpd va bien utiliser la base d'utilisateur puredb assurez-vous de ce qui suit. Pour s'assurer que pure-ftpd va bien utiliser la base d'utilisateur puredb assurez-vous de ce qui suit.
  
Ligne 60: Ligne 77:
      
 Vérifiez donc l'existence de ce fichier. Vérifiez donc l'existence de ce fichier.
 +  # ls
 +  auth  conf  db  pureftpd-dir-aliases
  
-Maintenant vérifions que cette base est pris en compte lors du lancement du serveur FTP+Et bien non, par défaut il n'existe pas... Nous vérifierons plus tard.
  
-<code> +Nous allons faire en sorte que cette base soit pris en compte lors du lancement du serveur FTP 
-# cd /etc/pure-ftpd/auth + 
-# ls -l +  # cd /etc/pure-ftpd/auth 
-# total 0 +  # ls -l 
-lrwxrwxrwx 1 root root 26 2005-11-08 10:24 65unix -> ../conf/UnixAuthentication +  # total 0 
-lrwxrwxrwx 1 root root 25 2005-11-08 10:24 70pam -> ../conf/PAMAuthentication+  lrwxrwxrwx 1 root root 26 2005-11-08 10:24 65unix -> ../conf/UnixAuthentication 
 +  lrwxrwxrwx 1 root root 25 2005-11-08 10:24 70pam -> ../conf/PAMAuthentication
  
 Par défaut il n'y a que les 2 autorisations des utilisateurs systèmes. Par défaut il n'y a que les 2 autorisations des utilisateurs systèmes.
 Il n'y a pas notre base d'utilisateurs virtuels. Il n'y a pas notre base d'utilisateurs virtuels.
  
-# rm * Supprimons ces autorisations. +  # rm * Supprimons ces autorisations. 
-# ln -s /etc/pure-ftpd/conf/PureDB 75puredb +  # ln -s /etc/pure-ftpd/conf/PureDB 75puredb  
 On crée un lien symbolique vers notre fichier de config. On crée un lien symbolique vers notre fichier de config.
 Cela permet au programme de prendre en compte notre base de données. Cela permet au programme de prendre en compte notre base de données.
-</code> 
  
-Par défaut, pureftpd autorise seulement les utilisateurs qui ont pour UID une valeur de 1000.\\ +Par défaut, pureftpd autorise seulement les utilisateurs qui ont pour UID une valeur minimum de 1000.\\ 
-Pour régler ce problème, modifier le fichier /etc/pure-ftpd/conf/MinUID et remplacez 1000 soit par l'UID de l'utilisateur concerné ( voir le fichier /etc/pure-ftpd/pureftpd.passwd ) ou alors supprimez ou commentez avec # la valeur 1000+Notre utilisateur www-data a pour UID 33 ce qui va nous poser problème.\\ 
- +Pour résoudre ce problème,mettez la valeur à 33.
-Dans le cas d'un serveur webon peut mettre la valeur 33 qui correspond à l'utilisateur www-data+
  
 Redémarrons maintenant le serveur Redémarrons maintenant le serveur
   # /etc/init.d/pure-ftpd restart   # /etc/init.d/pure-ftpd restart
 +  Restarting ftp server: /usr/sbin/pure-ftpd-wrapper: Invalid configuration file /etc/pure-ftpd/auth/../conf/PureDB: "/etc/pure-ftpd/pureftpd.pdb": No such file
  
 +Et la c'est la CATA, le fichier /etc/pure-ftpd/pureftpd.pdb n'existe pas !!
  
 +Pour créer ce fichier, il va falloir ajouter au moins un utilisateur en suivant le chapitre qui suit.
  
 +===== Administration =====
 +==== Ajouter un utilisateur ====
 +Dans cet exemple, je vais créer une liste d'utilisateur virtuel c'est à dire des utilisateurs qui n'existe pas dans le system.\\
 +Nous allons donc utiliser une database de pure-ftpd appelé puredb\\
 +Créons maintenant un utilisateur toto qui aura les droits de l'utilisateur totounix qui doit exister dans votre système unix :
 +  pure-pw useradd toto -u totounix -d /home/totounix -m
 +  
 +  
 +L'utilisateur toto est maintenant créé et aura les mêmes droit que l'utilisateur local totounix.\\
 +L'option -d définit le répertoire de l'utilisateur.
 +<note tip>-d ne permet pas à l'utilisateur de remonter au dela de son répertoire\\
 +contrairement à\\
 +-D qui permet cette possibilité.</note>
 +L'argument -m permet de mettre à jour la base de données puredb.\\
 +Si on oublie -m on peut toujours mettre à jour la puredb par cette commande :
 +  pure-pw mkdb
 +  
 +===== Vérification =====
 +Maintenant que vous avez créé vos utilisateurs, démarrons le serveur.
  
 +  # /etc/init.d/pure-ftpd restart
 +  Restarting ftp server: Running: /usr/sbin/pure-ftpd -l puredb:/etc/pure-ftpd/pureftpd.pdb -O clf:/var/log/pure-ftpd/transfer.log -E -u 33 -p 40000:40100 -8 UTF-8 -B
  
 +On voit que la ligne de commande a complètement changé, notre fichier de base de données utilisateur est bien le fichier /etc/pure-ftpd/pureftpd.pdb
 +
 +===== Exécuter un script à la réception d'un fichier =====
 +
 +  vi /etc/default/pure-ftpd-common
 +
 +Renseigner la variable **UPLOADSCRIPT**
 +<code bash>
 +# UPLOADSCRIPT: if this is set and the daemon is run in standalone mode,
 +# pure-uploadscript will also be run to spawn the program given below
 +# for handling uploads. see /usr/share/doc/pure-ftpd/README.gz or
 +# pure-uploadscript(8)
 +
 +# example: UPLOADSCRIPT=/usr/local/sbin/uploadhandler.pl
 +UPLOADSCRIPT=/root/script/test.bash
 +</code>
 +
 +Les variables suivantes sont accessible dans votre script bash
 +  * $1 est le chemin et le nom du fichier.
 +  * UPLOAD_SIZE The size of the file, in bytes.  
 +  * UPLOAD_PERMS The permissions, as an octal integer.
 +  * UPLOAD_UID The numerical UID of the owner.  
 +  * UPLOAD_GID The numerical GID of the owner.  
 +  * UPLOAD_USER The login of the owner.  
 +  * UPLOAD_GROUP The group name the files belongs to.  
 +  * UPLOAD_VUSER The full user name, or the virtual user name (127 chars max) .
 +
 +Du coup vous pouvez exécuter une commande en fonction de l'utilisateur
 +<code bash>
 +if [ "$UPLOAD_USER" = "toto" ]; then
 +        echo -e `date "+%Y-%m-%d %H:%M:%S"` >> /var/log/toto.log
 +        echo -e "Contenu du fichier envoyé : "`cat $1` | mail -s "L'utilisateur toto a envoyé un fichier" Votre_email@toto.com
 +fi
 +</code>
 +
 +ou en fonction du fichier
 +
 +<code bash>
 +if [ "$1" = "/home/ftp/fichier.txt" ]; then
 +        echo -e `date "+%Y-%m-%d %H:%M:%S"` >> /var/log/toto.log
 +        echo -e "Contenu du fichier envoyé : "`cat $1` | mail -s "Un fichier fichier.txt a été envoyé" Votre_email@toto.com
 +fi
 +</code>
linux/pureftp.1327835783.txt.gz · Dernière modification: 04-04-2013 22:05 (modification externe)