VsFTPd put permission denied

Bonjour à tous et à toutes.
Après un essaye non concluant de ProFTPD, j’essaye VsFTPd.
J’ai suivi le tuto suivant :
https://www.creatorpjs.com/fr/installer-un-serveur-web.html#installer-un-serveur-ftp
Avec Filezilla, je me connecte au serveur, très bien.
Je peux télécharger des fichiers, très bien.
Je ne peux pas envoyer des fichiers, pas bien.
Sur la console de Filezilla, j’ai :
Commande : put « /home/ignace/web/http/infos.php » « infos.php »
Erreur : /var/www/html/infos.php: open for write: permission denied
Si quelqu’un a une idée pour m’aider à résoudre ce problème ?
Merci.

Bonjour,

C’est très certainement encore un problème de droits: permission denied
Je vous invite à prendre le temps d’étudier ce que retourne man chmod, à pratiquer, à tester, pour bien assimiler cette notion essentielle que sont les droits ou permissions associés aux fichiers, aux répertoires.

Une fois cela, il est plus facile de faire la part des choses sans avoir besoin de changer d’outil FTP qui en soit ne résout pas le problème de base. N’hésitez pas alors à relire les précédents messages sur le même sujet publiés ces derniers jours.

Bon, j’ai fait un :
sudo adduser ftpuser1 www-data
Et maintenant je peux envoyer des fichiers.
Je me retrouve avec le même problème qu’avec ProFTPD : les fichiers envoyés on le propriétaire ftpuser1 et le groupe ftpgroup.
Bon en soit, ce n’est pas gênant car les fichiers sont lu parfaitement par Nginx, mais bon…
Y a-t-il une commande système pour imposer un propriétaire et un groupe à un répertoire (et sous-répertoires) à l’écriture ?

Bonjour,

La commande chmod permet d’octroyer ou de révoquer des droits. Sous linux, le terme fichier peut désigner aussi bien un fichier qu’un répertoire.

http://manpagesfr.free.fr/man/man1/chmod.1.html

Un chmod u+w mon_fichier devrait faire l’affaire pour ajouter des droits en écriture à mon_fichier au propriétaire (user). Un chmod gu+w mon_fichier devrait aussi fonctionner en étendant les droits d’écriture au groupe. Il faut que vous soyez en root pour effectuer cette opération, soit en vous connectant en tant que root, ou mieux en ayant les mêmes droits que root avec la commande sudo.

Ce lien devrait vous permettre de vous familiariser un peu plus avec chmod et rendre la page man plus facilement compréhensible. N’hésitez pas à faire des essais pour vous entraîner, vous familiariser avec cette commande essentielle.

https://www.malekal.com/exemples-utilisation-commande-chmod-linux-pour-changer-permissions/

Pour un effet récursif (descendre dans les sous-répertoires), l’option R vous sera utile aussi :slightly_smiling_face:

Bonjour, vbreton.
Corrige moi si je me trompe mais après avoir regardé la page man et ton lien de Malekal, je vois que chmod ne s’occupe que des droits en lecture, écriture et exécution des fichiers.
Il n’agit pas sur le propriétaire et le groupe des fichiers.
Que le propriétaire soit ignace, root ou tartempion, chmod s’en moque.
Ta commande ajoute les autorisations d’exécution au propriétaire et au groupe alors qu’un fichier d’un site web n’a pas à avoir de droit d’exécution.
Pour agir sur le propriétaire et le groupe d’un fichier il faut passer par chown.
Moi, ce que j’aimerai, c’est ne pas avoir à faire un chown à chaque fois que j’envoie un fichier sur le serveur.
J’aimerai que soit imposé le propriétaire www-data et le groupe www-data à tous les fichiers et dossiers qui sont écrit dans mon répertoire /var/www/html/.

Vous n’allez pas avoir le choix à moins de programmer des tâches avec cron et son fichier crontab sur le serveur pour lancer automatiquement et régulièrement un script pour changer les droits.
Vous pouvez aussi envisager de faire ça en amont pour un dossier particulier. Certains outils FTP graphiques permettent d’être personnalisés et l’on peut alors envisager d’ajouter un bouton pour changer les droits par exemple. Une autre manière serait de recompiler le logiciel FTP et en lui faisant exécuter un script approprié juste avant d’envoyer les fichiers.

Construisez-vous en premier lieu, un script que vous lancerez manuellement. Une fois que vous l’aurez mis au point et testé un minimum, on pourra envisager de le faire exécuter automatiquement. N’hésitez pas à la fin à le commenter en précisant ce que vous souhaitez faire à presque chaque ligne de code par quelques mots pour accroître la lisibilité et faciliter la compréhension.

Ben pour le script, c’est facile enfin je crois (la commande avec sudo devant fonctionne bien alors un script qui reprend la commande devrait fonctionner tout autant si elle est lancé en tant que root) :

#!/bin/bash
chown -R www-data:www-data /var/www/html/

Oui, c’est très facile mais j’attendais votre réponse de manière à m’assurer d’avoir bien compris votre demande pour ne pas partir sur une fausse piste.

On peut continuer alors: regardez du côté de cron et son fichier crontab pour automatiser en amont le travail.

En parallèle, je vais regarder du coté de ProFTPD si je peux le recompiler assez facilement à partir de ses sources pour envisager éventuellement une autre solution agissant uniquement juste avant la réception des fichiers sur le serveur. Solution qui serait alors plus performante car agissant juste au moment ou on en a besoin et donc pas à intervalles réguliers comme avec cron.

Je complète mon message. En fait, on peut aussi envisager de travailler sur FileZilla à la place du serveur FTP. Dans ce cas, la solution avec cron reste cependant intéressante, ne serait-ce par le fait qu’elle est indépendante du choix de l’application cliente FTP.

Bon, j’ai pensé que plutôt que faire un script, j’ai juste à passer la commande à crontab.
Donc dans /etc/crontab, ajouter la ligne suivante pour exécuter la tache toutes les jours à minuit (car je ne mets pas des fichiers tous les 5 minutes sur le serveur) :

0 0 1 * *       root      chown -R www-data:www-data /var/www/html/

J’ai bon ?

Plus simplement, tu peux utiliser le setgid par exemple:

chown -R :www-data /var/www/html
chmod -R g+s /var/www/html

La deuxième commande fait en sorte que tout nouveau fichier créé dans le répertoire /var/www/html appartienne au groupe www-data.

Bonjour, Sputnik93.
Super. je viens de tester et le groupe a bien été modifié.
C’est parfait.
Merci à toi.
De garder le propriétaire d’origine, je me dis que ça me permettra de savoir si c’est un fichier que j’ai envoyé sur le serveur avec Filezilla ou pas.

Pour ProFTPD, avec son module mod_exec je viens de voir que l’on a pas besoin de modifier son code source pour associer un script juste après l’envoi d’un fichier sur le serveur.

Tout se passe au niveau du fichier de configuration proftpd.conf situé dans /etc ou /usr/local/etc:

<ifmodule mod_exec.c>
 ExecEngine on
 ExecLog /var/log/proftpd/exec.log
 ExecOnCommand STOR ~/mon_script.sh %u
</ifmodule>

Une fois la mise au point effectuée, on peut éventullement envisager de remplacer la ligne ExecOnCommand par
ExecOnExit ~/mon_script.sh %u de manière à lancer le script uniquement quand on se déconnecte au lieu de le faire à chaque transfert de fichier.

Merci pour l’info, vbreton.