[résolu]problème upload avec pureftpd

bonjour, c’est encore moi ! :wink:

toujours dans l’install de mon serveur distant, j’ai mis en place un serveur ftp pure-ftpd-mysql. j’ai tout configuré comme je le voulais. quand je me connecte à partir d’une machine distante, je peux visualiser et télécharger les fichiers, parcourir l’arborescence des répertoires, et même supprimer des fichiers ! mais je ne peux ni uploader des fichiers ni créer des dossiers.
au niveau des droits, a priori c’est bon, c’est le groupe ftpgroup qui a les droits

pour info, j’ai suivi ce tuto : http://www.dexmon.be/article.php3?id_article=13

C’est le groupe ftpgroup qui POSSEDE, mais est ce que les droits “w” sont ouverts pour ce groupe ?
Je ne connais pas pureftp, mais n’est il pas necessaire de déclarer l’ouverture de ton arborescence (ça ne m’etonnerait pas que pour des raison de securité, la publication d’un repertoire ftp se fasse par defaut en read only indépendament des droits sur le filesystem) ?

Salut, j’ai bien étudier ce serveur et je peux dire que je le connait par coeur et c’est mon tutorial.
Qu’est-ce que tu as comme fichiers dans le dossier /etc/pure-ftpd/conf/ ?
Peux-tu nous afficher ton fichier /etc/pure-ftpd/db/mysql.conf sans le mot de passe.

dans le dossier /etc/pure-ftpd/conf j’ai ca :

  • Altlog
  • ChrootEveryone
  • MinUID
  • MySQLConfigFile
  • NoAnonymous
  • PAMAuthenthication
  • PureDB

et mysql.conf :

##############################################
#                                            #
# Sample Pure-FTPd Mysql configuration file. #
# See README.MySQL for explanations.         #
#                                            #
##############################################


# Optional : MySQL server name or IP. Don't define this for unix sockets.

# MYSQLServer     127.0.0.1


# Optional : MySQL port. Don't define this if a local unix socket is used.

# MYSQLPort       3306


# Optional : define the location of mysql.sock if the server runs on this host.

MYSQLSocket      /var/run/mysqld/mysqld.sock


# Mandatory : user to bind the server as.

MYSQLUser       pureftpd


# Mandatory : user password. You must have a password.

MYSQLPassword   ********


# Mandatory : database to open.

MYSQLDatabase   pureftpd


# Mandatory : how passwords are stored
# Valid values are : "cleartext", "crypt", "md5" and "password"
# ("password" = MySQL password() function)
# You can also use "any" to try "crypt", "md5" *and* "password"

MYSQLCrypt     md5


# In the following directives, parts of the strings are replaced at
# run-time before performing queries :
#
# \L is replaced by the login of the user trying to authenticate.
# \I is replaced by the IP address the user connected to.
# \P is replaced by the port number the user connected to.
# \R is replaced by the IP address the user connected from.
# \D is replaced by the remote IP address, as a long decimal number.
#
# Very complex queries can be performed using these substitution strings,
# especially for virtual hosting.


# Query to execute in order to fetch the password

MYSQLGetPW      SELECT Password FROM ftpd WHERE User="\L" AND status="1"


# Query to execute in order to fetch the system user name or uid

MYSQLGetUID     SELECT Uid FROM ftpd WHERE User="\L" AND status="1"


# Optional : default UID - if set this overrides MYSQLGetUID

#MYSQLDefaultUID 1000


# Query to execute in order to fetch the system user group or gid

MYSQLGetGID     SELECT Gid FROM ftpd WHERE User="\L" AND status="1"


# Optional : default GID - if set this overrides MYSQLGetGID

#MYSQLDefaultGID 1000


# Query to execute in order to fetch the home directory

MYSQLGetDir     SELECT Dir FROM ftpd WHERE User="\L" AND status="1"


# Optional : query to get the maximal number of files 
# Pure-FTPd must have been compiled with virtual quotas support.

 MySQLGetQTAFS  SELECT QuotaFiles FROM ftpd WHERE User="\L" AND status="1"


# Optional : query to get the maximal disk usage (virtual quotas)
# The number should be in Megabytes.
# Pure-FTPd must have been compiled with virtual quotas support.

 MySQLGetQTASZ  SELECT QuotaSize FROM ftpd WHERE User="\L" AND status="1"


# Optional : ratios. The server has to be compiled with ratio support.

# MySQLGetRatioUL SELECT ULRatio FROM users WHERE User="\L"
# MySQLGetRatioDL SELECT DLRatio FROM users WHERE User="\L"


# Optional : bandwidth throttling.
# The server has to be compiled with throttling support.
# Values are in KB/s .

 MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L" AND status="1"
 MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L" AND status="1"

# Enable ~ expansion. NEVER ENABLE THIS BLINDLY UNLESS :
# 1) You know what you are doing.
# 2) Real and virtual users match.

# MySQLForceTildeExpansion 1


# If you upgraded your tables to transactionnal tables (Gemini,
# BerkeleyDB, Innobase...), you can enable SQL transactions to
# avoid races. Leave this commented if you are using the
# traditionnal MyIsam databases or old (< 3.23.x) MySQL versions.

# MySQLTransactions On

Il n’est pas bon regarde celui du tuto :

MYSQLSocket /var/run/mysqld/mysqld.sock #MYSQLServer localhost #MYSQLPort 3306 MYSQLUser pureftpd MYSQLPassword ******** 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") MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")

Il manque des infos après status=“1” dans ton fichier.

C’est donc bien ce que je disais: droits du filesystem, ET droits dans pureftp.
J’imagine que tu pourrais en plus être bloqué par le host.allow si tu avais installé le serveur en inetd…
On voit bien la difference: dans certains OS, le problême est de protèger les données, dans d’autres, d’y accèder.
C’est un choix. :laughing:

je fais quoi alors pour les droits ??? j’avoue que je suis un peu paumé là…

T’occupes pas de moi. Ce que je disais était une remarque complémentaire sans importance. Fais confiance à dexmon: ta config de droits sur les repertoires semble bonne, il faut que tu fasse ce qu’il te dit, et que tu mettes dans la config de pure ftp un droit d’accés aux IPs que tu veux autoriser en ecriture (si j’ai bien compris le fichier de config que montre dexmon).

sur tous les dossiers accessibles pour le serveur ftp, j’ai ca :

mais ca ne marche toujours pas.
pour info, dans les champs Uid et Gid de ma table MySql, je mets quoi ???

Tu dois créer un fichier nommé CreateHomeDir (respecte la casse) avec comme valeur yes dans ton répertoire /etc/pure-ftpd/conf/
voici ce qu’il te faut dans tes champs :

[code]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 ») [/code]

Sinon dans la colonne valeur des tes champs UID et GID c’est 2001 pour les deux.

Et reload le serveur : /etc/init.d/pure-ftpd-mysql restart

j’ai fais toutes les modfis que tu m’as décrites, mais aucune évolution, je reste un peu perplexe

Tu dois créer un fichier nommé CreateHomeDir (respecte la casse) avec comme valeur yes dans ton répertoire /etc/pure-ftpd/conf/

et reload le serveur.

ca, ca va me créer un dossier d’accueil pr les gens qui se connectent si je ne me trompe pas. or moi je souhaite que les gens arrivent sur le dossier défini dans la table et puissent uploader dessus

Non ça va créer un dossier pour l’utilisateur que tu as créer, c’est le champ Dir !!

bon, ben on a trouvé le problème avec un pote, en fait le disque dur est plein
le truc, c’est que le fournisseur du serveur s’est un peu planté, il nous a fournit un DD de 40go au lieu de 120, et donc je pensais pas ke le DD était plein…