J'utilise Pure-ftpd-mysql et j'en suis très content. Efficace, simple et orienté sécurité (semble-t-il). Dans une utilisation normal chrooter c parfait. Seulement j'ai des comptes qui doivent pouvoir accéder aux mêmes ressources. La seule solution que je connais : faire un montage "BIND" dans fstab. Et ça fonctionne pas mal.
Seulement je veux ajouter la gestion des quotas virtuels gérer par pure-ftpd. Et ça complique tout ! En effet qd un user1 envoi des fichiers, son ".ftpquota" est mis à jour. Pour un compte ne partageant pas de données, pas de soucis. Mais qd le user1 a en commun un répertoire avec un user2 le ".ftpuota" n'est mis à jour que pour le user qui upload des fichiers...
Je cherche donc à mettre à jour les quotas des users en même temps.
Solutions que g trouvé (pas top) :
-1ere soluce : Un script qui est lancer toutes les minutes et qui met à jour les quotas de tous les users si le log du FTP à changé :
#!/bin/bash
diff --brief /var/log/pure-ftpd/essai.log /var/log/pure-ftpd/essai.log.tmp > /dev/null
if [ $? -eq 1 ]
then
for users in /home/FTP/*
do
if [ -e $users/.ftpquota ]
then
pure-quotacheck -u ftpuser -d $users
fi
done
cp /var/log/pure-ftpd/essai.log /var/log/pure-ftpd/essai.log.tmp
fi
2 eme soluce : un script appeler par "pure-uploadscript" qui met à jour les quotas des peronnes gérant le même site:
#!/usr/bin/php
<?php
exec("logger UPLOADSCRIPT LANCE pour $argv[2]");
$user_mysql="root";
$password_mysql="xxxxx";
$database="xxxxx";
mysql_connect("localhost",$user_mysql,$password_mysql);
@mysql_select_db($database) or die( "Unable to select database");
#On recupere les sites que gere l'utilisateur
$query="SELECT nom_site FROM ftpusersquotas WHERE user='$argv[7]' AND type='enti
te'";
$result1=mysql_query($query) or die("Query failed\n");
while ($row_site = mysql_fetch_array($result1)){
exec("logger site : $row_site[nom_site]");
#On recupere les utilisateurs qui ont le même site à gérer
$query="SELECT user FROM ftpusersquotas WHERE user!='$argv[7]' AND nom_s
ite='$row_site[nom_site]'";
$result2=mysql_query($query) or die("Query failed\n");
while ($row_user = mysql_fetch_array($result2)){
exec("logger user : $row_user[user]");
exec("/usr/sbin/pure-quotacheck -u ftpuser -d /home/FTP/$row_use
r[user]");
}
}
mysql_close();
?>
3 eme soluce : je pensais détecter dans les logs un connexion FTP et mettre à jour du coup....
Pour l'instant je mixe de la soluce 1 et 2 mais c vraiment pas top....
J'aimerais des conseils, je suis pas sur que la solution 2 sois mieux. Alors les proposions simple et peu gourmandes sont TRES bienvenues ;)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.