Help FTP gestion utilisateurs sur dossier commun

Bonjour à toutes et à tous.

Je galère pour faire la chose suivante (en lignes de commande ou mieux encore, sous Gnome [Version 2.22.3]… ?) :

Je veux, sur ma Lenny (Debian GNU/Linux 5.0.4), créer un dossier "/var/ftp/mon_groupe"
dossier qui serait en commun entre tous les utilisateurs du groupe “mon_groupe”.

Ainsi, “Jacques” pourrait se connecter en FTP à son dossier “/var/ftp/mon_groupe/jacques” pour lequel il aurait les droits de lecture / écriture, mais également voir le contenu (droit de lecture uniquement) des autres utilisateurs de ce même groupe (en clair, il verrait le contenu de “/var/ftp/mon_groupe”, c’est à dire le contenu de “/var/ftp/mon_groupe/pierre” etc…).

/
|
+-var
   |
   +-ftp
      |
      +-mon_groupe
            |
            +-pierre
            |
            +-paul
            |
            +-jacques

Comment puis-je faire ça ?..

Idem, dans le même style, quand je crée un utilisateur et que je connecte sur son compte en FTP (avec FileZilla par exemple), je vois toute l’arborescence jusque la racine !.. je voudrait que “sa racine” soit “mon-groupe” …/… je n’y arrive pas…

Merci pour vos précieux conseils.

Bon week-end !

Signé “un petit pingouin sur la banquise” :wink:

Personne n’a de petite idée ?..

En résumé :

  • comment (en FTP) créer des utilisateurs qui voient les dossiers des autres utilisateurs du groupe
  • avec un droit de lecture/écriture uniquement sur leur propre dossier
  • et un droit de lecture uniquement sur les autres dossiers du groupe

=> parait que c’est simple…

Par avance merci !

Je n’ai pas exactement la même configuration chez moi, mais en la modifiant un peu tu devrai t’en sortir.

Comme serveur ftp j’utilise : ftpd avec le plugin mysql
pour l’instalation j’ai utiliser le lien : http://www.howtoforge.com/pureftpd_mysql_virtual_hosting

En résumer

  • Instalation :
  • Création des utilisateurs

groupadd -g 2001 ftpgroup puis dans ton cas pour chaque utilisateur se baser sur : ( avec 2001,2002... ) useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftppierre useradd -u 2002 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftppaul useradd -u 2003 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpjaques

  • Configuration des droits : la partie mysql

mysql -u root -p CREATE DATABASE ftpd; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON ftpd.* TO 'ftpd'@'localhost' IDENTIFIED BY 'ftpd_password -> met ton choix'; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON ftpd.* TO 'ftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpd_password'; FLUSH PRIVILEGES; USE ftpd; ALTER DATABASE `ftpd` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE TABLE ftpd_user ( User varchar(16) NOT NULL default '', status enum('0','1') NOT NULL default '0', Password varchar(64) NOT NULL default '', Uid varchar(11) NOT NULL default '-1', Gid varchar(11) NOT NULL default '-1', Dir varchar(128) NOT NULL default '', ULBandwidth smallint(5) NOT NULL default '0', DLBandwidth smallint(5) NOT NULL default '0', comment tinytext NOT NULL, ipaccess varchar(15) NOT NULL default '*', QuotaSize smallint(5) NOT NULL default '0', QuotaFiles int(11) NOT NULL default 0, PRIMARY KEY (User), UNIQUE KEY User (User) ) TYPE=MyISAM;

  • la liaison ftpd / mysql se fait dans le fichier /etc/pure-ftpd/db/mysql.conf
    il faut mettre se genre de commande :

MYSQLSocket /var/run/mysqld/mysqld.sock #MYSQLServer localhost #MYSQLPort 3306 MYSQLUser ftpd MYSQLPassword ftpd_password MYSQLDatabase ftpd #MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext MYSQLCrypt md5 MYSQLGetPW SELECT Password FROM ftpd_user WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetUID SELECT Uid FROM ftpd_user WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetGID SELECT Gid FROM ftpd_user WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetDir SELECT Dir FROM ftpd_user WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd_user WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd_user WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTASZ SELECT QuotaSize FROM ftpd_user WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTAFS SELECT QuotaFiles FROM ftpd_user WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")

  • Aprés un peut de restriction pour ne pas utiliser directement les comptes unix + chrooter

echo 'yes' > /etc/pure-ftpd/conf/ChrootEveryone; echo 'yes' > /etc/pure-ftpd/conf/CreateHomeDir;

  • Ajouter les utilisateurs dans la base de donnée :

Maintenant un peu d’explication,
le group ftp permet de choisir les droits par fichier, le group sera commun as tous, et chaqu’un aura ses propres droits.
donc chaqu’un pourra restrindre les droits a sa guise.
pense bien sur a crée les dossiers pour chaque utilisateur ( man mkdir )
suivit d’une attribition de l’user:group ( man chown )

Si tu désire vraiment que les droits soit fixée je te conseil de modifier les droits des fichiers via un script bash qui se lance a la fin d’un transphére, le programme est écrit en perl ca ne dois pas être impossible.

J’espére que cette piste t’aidera de mon coter je suis rester avant n’ayant pas les même besoin.

Merci pour l’info… mais ça semble bien complexe comme solution, il n’y a pas plus simple ?..
=> Pourquoi passer par une base de données MySQL ?.. ne peut-on pas faire ça sans DB ?

Ensuite, faire un “shell”, jamais fait… (un .sh, c’est ça ?) et comment le lancer automatiquement après chaque transfert ?..

Il me semblait qu’on pouvait faire ça plus facilement… mais je me trompe certainement :wink:

Bonne soirée ! et encore merci… si d’autres idées…

Tente de regarder vers FilleZilla serveur si il ont sorti leur version sous linux.
Elle peut être gérée par un GUI sur un autre ordinateur.
Sinon il y as aussi proFTPd si tu donne un groupe commun as tes utilisateurs, mais je ne connai aucune de ces solutions.

Je te souhaite bonne chance.

Merci pour cette nouvelle info… je creuse… :wink:

DidUngar,

J’ai enfin pris le temps de faire la procédure complète que tu m’as décrite pour pureftpd.

Par contre, comment puis-je tester pour voir si ça marche ?

Quand j’essaye de me connecter en FTP avec les comptes créés, le serveur ftp ne répond pas…

par avance merci… :wink:

Info : pour se faire, j’ai du désinstaller proftpd et donc je n’ai plus accès à mes fichiers depuis… oups !

Se qui te bloquée c’est probablement le port d’écoute.
Tu aurais donc simplement pus le couper. ( /etc/int.d/proftpd stop )

Revenons a nos moutons :

  • As tu une réponse au ping ? ( le serveur est-il allumée / le pare-feu te laisse-t-il passée …)
  • As tu tentée avec un autre client-ftp ? ( problème de compatibilité … )
  • As tu une réponse du serveur ? ( Problème de login, au erreur de configuration … )
  • Que dises tes fichiers logs ? ( /var/log/pure-ftpd/* )

En fait, j’ai tout repris à “zéro” si je puis dire, en suivant le lien suivant ci-dessous.

http://www.howtoforge.com/virtual-hosting-with-pureftpd-mysql-on-debian-lenny

J’ai voulu tester si déjà ça marchait, pour ensuite faire les modifs comme tu me proposais… mais en fait, tout semble avoir été correctement configuré, sauf que quand j’essaye de me connecter avec un client ftp, il me donne une erreur de connexion…

Commande : USER exampleuser Réponse : 331 User exampleuser OK. Password required Commande : PASS ****** Réponse : 530 Login authentication failed Erreur : Erreur critique Erreur : Impossible d'établir une connexion au serveur

J’ai tout refait 3 fois de suite et même finalité à chaque fois… je craque !!!..

Sinon, pour ta solution, je n’ai pas re-essayé vu l’heure… l’installation avait à priori désinstallé proftpd…

Sinon, j’arrive à me connecter avec un user créé dans l’interface Gnome directement sur le serveur… (pour répondre au ping/firewal…)… et rien dans les logs…

Aucune idée ?..

Je viens encore de passer plusieurs heure sur l’affaire et j’ai un peu avancé mais là, je bloque :

J’ai trouvé une erreur dans /var/log/syslog concernant l’accès à la base de données mysql (problème de GRANT) : c’est réglé, plus d’erreur…

J’ai créé mon utilisateur (exampleuser) dans mysql (base pureftpd) mais quand je me connecte avec un Filezilla par exemple :

-> j’ai un message dans Filezilla :

Statut : Résolution de l'adresse de monsite.org Statut : Connexion à 82.82.82.82:21... Statut : Connexion établie, attente du message d'accueil... Réponse : 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------- Réponse : 220-You are user number 1 of 50 allowed. Réponse : 220-Local time is now 20:48. Server port: 21. Réponse : 220-This is a private system - No anonymous login Réponse : 220-IPv6 connections are also welcome on this server. Réponse : 220 You will be disconnected after 15 minutes of inactivity. Commande : USER exampleuser Réponse : 331 User exampleuser OK. Password required Commande : PASS ****** Réponse : 530 Login authentication failed Erreur : Erreur critique Erreur : Impossible d'établir une connexion au serveur

-> quand je regarde dans /var/log/syslog :

Mar 5 20:48:34 serveur pure-ftpd: (?@192.168.15.254) [INFO] New connection from 192.168.15.254 Mar 5 20:48:34 serveur pure-ftpd: (?@192.168.15.254) [INFO] PAM_RHOST enabled. Getting the peer address Mar 5 20:48:36 serveur pure-ftpd: (?@192.168.15.254) [WARNING] Authentication failed for user [exampleuser] Mar 5 20:48:40 serveur pure-ftpd: (?@192.168.15.254) [INFO] Logout.

J’ai retapé le mot de passe (MD5), essayé moult choses mais rien n’y fait…

Je sèche… quelqu’un peu m’aider ?..

Merci

Déjà tu as une erreur d’identification donc toute la partie logiciel est bonne ainsi que la partie réseaux.

Nous avons donc un probléme de configuration :
As-tu donné dans le fichier de configuration du ftp l’encryptage de tes codes ?
As-tu bien écrits tes commandes mysql pour qu’elle renvoie le code en-crypter en md5.
( donc le champ code qui lui est en-crypter )

eh… non, je ne sais pas… que dire :

dans le fichier /etc/pure-ftpd/db/mysql.conf, j’ai une ligne :

S’agit-il de cela ?.. ou alors, dans quel fichier dois-je chercher ?

par contre, en cherchant, j’ai remarqué quelque chose de bizarre (peut-être est-ce normal ?) :

Dans le dossier /etc/pure-ftpd/auth
j’ai 3 liens symboliques dont :

et deux autres

-> ../conf/UnixAuthentication -> ../conf/PAMAuthentication

sauf que les 2 derniers liens symboliques pointent bien vers un fichier mais le premier pointe vers… rien !

dans …/conf/ je n’ai aucun fichier nommé MySQLConfigFile ???..

oups !

Remplace : MUSQLCrypt md5 par MYSQLCrypt md5

Les fichiers :

-> ../conf/UnixAuthentication -> ../conf/PAMAuthentication
Sont utiliser pour savoir si oui ou non tu accepte les user unix.
Personnelement j’ai No et No dedant, a toi de voir si tu veut y mettre yes.

Dans /etc/pure-ftpd/conf/MySQLConfigFile on écrit l’uri du fichier de configuration mysql pour pure-ftpd :

Dans le quel tu as ta configuration avec l’erreur de frappe.

pour MUSQLCrypt md5
c’était une erreur de frappe dans le post… c’est bien orthographié sur le serveur

j’ai “yes” uniquement pour “PAMAuthentication”

sinon j’ai fait la modif :

ajout de “/etc/pure-ftpd/db/mysql.conf” dans le fichier “/etc/pure-ftpd/conf/MySQLConfigFile” qui contenait “no”…

mais toujours pas :

Commande : USER exampleuser Réponse : 331 User exampleuser OK. Password required Commande : PASS ****** Réponse : 530 Login authentication failed Erreur : Erreur critique Erreur : Impossible d'établir une connexion au serveur

Peut tu me montrée :
/etc/pure-ftpd/conf/MySQLConfigFile
et
/etc/pure-ftpd/db/mysql.conf
( pense a en retirée tes codes d’accées )
ainsi qu’un dump de ta table
( retire aussi les codes même en md5 ca se retrouve )

serveur:~# cat /etc/pure-ftpd/conf/MySQLConfigFile /etc/pure-ftpd/db/mysql.conf

et

aurore:~# cat /etc/pure-ftpd/db/mysql.conf MYSQLSocket /var/run/mysqld/mysqld.sock #MYSQLServer localhost #MYSQLPort 3306 MYSQLUser xxxxx MYSQLPassword xxxxx MYSQLDatabase pureftpd #MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext MYSQLCrypt md5 MYSQLGetPW SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetUID SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetGID SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetDir SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")

dump de la base :

[code]-- phpMyAdmin SQL Dump
– version 2.11.8.1deb5+lenny3
http://www.phpmyadmin.net

– Serveur: localhost
– Généré le : Dim 07 Mars 2010 à 21:27
– Version du serveur: 5.0.51
– Version de PHP: 5.2.6-1+lenny6

SET SQL_MODE=“NO_AUTO_VALUE_ON_ZERO”;

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT /;
/
!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS /;
/
!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION /;
/
!40101 SET NAMES utf8 */;


– Base de données: pureftpd



– Structure de la table ftpd

CREATE TABLE IF NOT EXISTS ftpd (
User varchar(16) NOT NULL default ‘’,
status enum(‘0’,‘1’) NOT NULL default ‘0’,
Password varchar(64) NOT NULL default ‘’,
Uid varchar(11) NOT NULL default ‘2001’,
Gid varchar(11) NOT NULL default ‘2001’,
Dir varchar(128) NOT NULL default ‘’,
ULBandwidth smallint(5) NOT NULL default ‘0’,
DLBandwidth smallint(5) NOT NULL default ‘0’,
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default ‘*’,
QuotaSize smallint(5) NOT NULL default ‘0’,
QuotaFiles int(11) NOT NULL default ‘0’,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


– Contenu de la table ftpd

INSERT INTO ftpd (User, status, Password, Uid, Gid, Dir, ULBandwidth, DLBandwidth, comment, ipaccess, QuotaSize, QuotaFiles) VALUES
(‘user01’, ‘1’, ‘5ebe2294ecd0e0f08eab769054258869’, ‘2001’, ‘2001’, ‘/home/www.example.com’, 100, 100, ‘’, ‘*’, 50, 0);
[/code]

Attention : 5ebe22*********** suffit pour trouver un code qui fonctionne ! ( pas forcement l’initial )
Bien que le md5 ne soit pas reversible, il existe des tables avec des listes de hash ( md5 ) et quel code sont fonctionnel avec.
Je te conseil d’êditer ton poste pour supprimer la valeur du md5.

MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
Il manque 2 espaces, mais c’est plus pour la lisibilitée je pense pas que le probléme viennent de la.

As-tu crée un utilisateur pour le ftp ayant comme id : 2001 et un groupe pour le ftp ayant lui aussi un id : 2001 ?

Il est interessant a noter que ce ftpd crée lui même l’arboraissance que l’on lui demande pour l’user user01 mais encore faut-il qu’il en est le droit system.
As-tu donc le repertoire /home/www.example.com accessible ou pouvant être crée par l’user 2001
J’entand par la que user_ftp ( l’user a l’id 2001 ) puisse
soit ecrire dans /home pour crée www.example.com
soit /home/www.example.com existe est il as des droits suffisant dedant.
( “ls -l /home/www.example.com” pour avoir la liste des droits et les labels de l’user / group )

=> pas de soucis pour le md5, j’ai mis des chiffres “au pif…” :wink:

j’ai ajouté les 2 espaces,

pour les utilisateurs et groupes, oui, j’ai fait avec 2001 pour id,

j’ai bien créé le dossier drwxr-xr-x 2 ftpuser ftpgroup 48 mar 9 01:13 www.example.com

mais toujours rien … :wink:

Utilise :

au lieu de :

J’espère que ça résoudra le problème.