Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/02/2010, à 11:45

titouille

[Résolu] droits sur les fichiers du serveur web, votre avis svp

Bonjour à tous !

Question fréquemment posée si il en est, celle de la gestion des droits sur les répertoires et fichiers...
Le principe est compris, mais je me pose des questions quant à la bonne mise en place des droits.

J'ai un serveur de salon qui me sert également de serveur d'applications. Le trio Apache2 / PHP5 / MySql5 y est installé, tout fonctionne plutôt bien.

Mon ordi principal est un mac, sur lequel je travaille bcp avec éclipse. J'ai un petit plugin nommé Remote System Explorer qui me permet de me connecter via sftp sur mon serveur de salon pour accéder aux fichiers.

La problématique est la suivante : l'unique utilisateur du serveur est "titouille". Le propriétaire des fichiers qui sont dans www est www-data, du groupe www-data. Dans éclipse, c'est "titouille" qui se connecte via sftp au serveur de salon. J'ai ajouté titouille dans le groupe www-data, mais je ne suis pas totalement satisfait du résultat. Avant ça, je ne pouvais pas modifier le contenu de mes fichiers.
Maintenant que titouille est dans le groupe www-data, je dois faire un chmod 664 sur mes fichiers pour que titouille puisse éditer les fichiers qu'il veut.

Ce qui me gène dans tout ça, c'est que ça m'oblige à faire un chmod sur tous les fichiers que je veux éditer... Je sais bien qu'il y a une commande permettant de le faire à la volée récursivement, pas de souci avec ça.

Je me demande simplement si c'est correct de travailler de cette manière (775 sur les répertoires, 664 sur les fichiers) sur le serveur web. Est-ce que ça ne peut pas impliquer des problèmes de sécurité d'avoir ces droits d'accès sur les répertoires et les fichiers ? Je lis tellement souvent qu'on devrai avoir 755 et 644 que j'ai des doutes à ce sujet.

Le problème serait que si je dois rendre titouille propriétaire des fichiers et dossiers pour garder 755 et 644, ça veut également dire que c'est titouille:www-data qui serait sensé exécuter le serveur web, et là je ne sais pas exactement ce que ça implique non plus, et surtout comment je dois le faire... Est-ce que je devrai simplement changer ces lignes dans le fichier apache2.conf :

# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

pour pouvoir dire que c'est titouille:www-data qui exécute ?

Merci d'avance pour votre avis sur le sujet.

Cordialement.

Thierry

Dernière modification par titouille (Le 10/02/2010, à 19:21)

Hors ligne

#2 Le 10/02/2010, à 12:10

snapshot

Re : [Résolu] droits sur les fichiers du serveur web, votre avis svp

Salut,

La bonne solution est comme tu l'as trouvé, d'inclure l'utilisateur titouille dans le groupe www-data et de changer les droits des fichiers pour le groupe. Ainsi, tu as un plein accès à tes fichiers, sans trop affecter la sécurité. De toute façon, on ne peut pas faire moins ; la sécurité étant toujours une affaire de compromis. J'ai déjà vu, dans la même situation, que certains (très mauvais) informaticien n'hésitaient pas à mettre un horrible 777 au moyen d'un chmod récursif dans la crontab pour obtenir la même chose...

Dire stupidement qu'il vaut avoir un 755 au lieu d'un 775 n'a pas de sens... car tout dépend de l'appartenance au groupe ! Ainsi, un 775 est exactement similaire à un 755 si le groupe associé n'a pas d'utilisateur. Dans ton cas, le groupe associé aura deux utilisateurs : www-data et titouille, ce qui est parfait.

Reste que comme tu l'as constaté, les fichiers sont créés par défaut sans droit d'écriture sur le groupe. La solution est de changer le umask pour le mettre à 002 au lieu de la valeur par défaut de 022. Cela doit être paramétrable dans apache. Par défaut, les fichiers sont créé en 666 (ou en 777) moins le umask.

Dernière modification par snapshot (Le 10/02/2010, à 12:12)


Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !

Hors ligne

#3 Le 10/02/2010, à 12:38

titouille

Re : [Résolu] droits sur les fichiers du serveur web, votre avis svp

Merci snapshot pour ton avis sur ma question.

J'ai donc balancé les 2 commandes suivantes à partir du répertoire www pour modifier les droits des répertoires / fichiers :

sudo find . type -d -exec chmod 775 {} \;
sudo find . type -f -exec chmod 664 {} \;

J'ai ensuite modifié le fichier /etc/apache2/envars (c'est ce dernier qui autorise la commande umask) pour y rajouter umask 002, puis redémarré apache via

sudo /etc/init.d/apache2 restart

et ça semble jouer.

Le seul problème restant, qui n'en est pas vraiment un, est que le plugin Remote System Explorer d'éclipse continue de me balancer une erreur du genre :

Operation failed. Security violation
Message reported from file system: Sftp: 3: Permission denied

Et pourtant la modification est bien effectuée. A partir du terminal, connecté en ssh au serveur, un nano sur le fichier modifié montre bien que les modifications ont été prises en compte.

Enfin, je te cite :

J'ai déjà vu, dans la même situation, que certains (très mauvais) informaticien n'hésitaient pas à mettre un horrible 777

Je faisais malheureusement la même chose (mais pas récursivement, heureusement) avant de commencer à comprendre le fonctionnement des droits utilisateurs... Et je ne pense pas que ça soit être "très mauvais" mais plutôt être inculte sur le sujet... Lorsqu'on n'y connaît rien et qu'on lit ça sur un forum de discussion, on le fait bêtement sans réellement savoir ce que ça peut impliquer en terme de sécurité tongue

Bref, je te remercie encore pour ton explication claire wink

Hors ligne

#4 Le 10/02/2010, à 12:52

titouille

Re : [Résolu] droits sur les fichiers du serveur web, votre avis svp

Re,

J'avais mis le sujet comme résolu, mais je viens de faire quelques tests et j'aimerai revenir sur ce fameux message d'erreur du plugin.

Je viens de balancer la commande

sudo find . type -f -exec chown titouille:www-data {} \;

Pour voir si, étant le propriétaire des fichiers, ça pouvait résoudre mon problème. ça fonctionne, je n'ai plus de message d'erreur. Mais ça soulève deux nouvelles interrogations pour moi :

1. est-ce que, en rendant l'utilisateur "titouille" du groupe "www-data" propriétaire de tous les répertoires et fichiers à partir de la racine www, cela va influer sur le fonctionnement d'apache ? Genre peut-être qu'apache à besoin que le propriétaire de certains fichiers / dossiers soit www-data:www-data pour être pleinement fonctionnel...

2. tout comme la commande umask qui permet d'affecter les droits au propriétaire et groupe, est-ce qu'il est possible de rajouter un mot-clé qui indiquerai que le propriétaire de tous nouveau fichier / répertoire créé sur le serveur web serait "titouille:www-data" ?

Et si l'interrogation numéro 2 est possible, comment est-ce que ça fonctionne sur des serveurs de production ou il y a différents utilisateurs qui ont accès à leur propre racine web ? ça se gère au niveau du virtualhost pour indiquer qui est propriétaire de quoi ?

Si toi (snapshot) ou un autre utilisateur a des pistes ou un avis à me fournir je suis preneur smile

Cordialement

Dernière modification par titouille (Le 10/02/2010, à 12:53)

Hors ligne

#5 Le 10/02/2010, à 13:21

snapshot

Re : [Résolu] droits sur les fichiers du serveur web, votre avis svp

Pour le sftp qui ne marche pas, sous quel utilisateur accède-t-il au serveur ?

1. est-ce que, en rendant l'utilisateur "titouille" du groupe "www-data" propriétaire de tous les répertoires et fichiers à partir de la racine www, cela va influer sur le fonctionnement d'apache ? Genre peut-être qu'apache à besoin que le propriétaire de certains fichiers / dossiers soit www-data:www-data pour être pleinement fonctionnel...

apache va continuer de fonctionner, sauf peut-etre s'il a besoin d'écrire un fichier, car dans le pire des cas, l'accès va etre basé sur le "autre" qui doit etre r-x

2. tout comme la commande umask qui permet d'affecter les droits au propriétaire et groupe, est-ce qu'il est possible de rajouter un mot-clé qui indiquerai que le propriétaire de tous nouveau fichier / répertoire créé sur le serveur web serait "titouille:www-data" ?

Non, ce n'est pas possible. Le propriétaire d'un fichier nouvellement créé est toujours le propriétaire du processus, et rien ne peut le changer.
Pour le groupe d'un fichier nouvellement créé, c'est plus compliqué, car on peut appartenir à plusieurs groupes. C'est donc le groupe principal qui est utilisé, que l'on peut changer en forkant une nouvelle hiérarchie de de processus avec la commande (peu connue) newgrp... sauf si le sticky bit a été mis sur le répertoire accueillant le fichier, auquel cas, le groupe du fichier et celui du groupe du répertoire d'accueil... (ouff!)


Pensez à mettre [Résolu] dans le titre une fois votre problème réglé !

Hors ligne

#6 Le 10/02/2010, à 13:22

yohann

Re : [Résolu] droits sur les fichiers du serveur web, votre avis svp

perso je conseille de parametrer les fichiers en titouille:www-data et en 750 pour les rep et 640 pour les fichiers

chown -R titouille:www-data /var/www/*
chmod -R u=rwX g=rX o-rwx /var/www/*

ensuite certains fichiers ou repertoires doivent être accessible en écriture par www-data (repertoire de cache, d'upload ...) pour ceux la chmod g+w www-data.

les avantages d'une telle configuration sont:
- tu n'est pas embeter par des permission denied vu que tu es propriétaire de tes fichier
- cela ne pose pas de probleme de sécurité vu que ton compte est le seul a avoir tout les droits
- la sécurité des site est améliorée vu que apache (qui est le user qui sera utilisé par les script php frauduleux dans 99.99% des cas) ne peux plus écrire n'importe ou (donc on ne peux envoyer des scripts php se faire executer a la place de ton code)

j'espère que cette solution de conviens et que j'ai été suffisament clair


j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.

Hors ligne

#7 Le 10/02/2010, à 16:10

titouille

Re : [Résolu] droits sur les fichiers du serveur web, votre avis svp

snapshot, l'utilisateur qui se connecte est l'utilisateur créé par ubuntu lors de l'installation, c'est à dire titouille. Je n'ai pas créé d'autres utilisateurs pouvant se loguer sur le serveur à son démarrage.
C'est ce même utilisateur que j'ai rajouté au groupe www-data

yohann merci pour les explications complémentaires sur la configuration, ça me semble tout à fait judicieux, reste à savoir quels sont les répertoires et fichiers qui nécessitent des autorisations pour l'utilisateur www-data.

ça va un peu plus loin que ma question de base, mais je me demande justement comment est-ce que ça fonctionne lorsqu'on possède un serveur dédié et qu'on y crée des utilisateurs auxquels on rajoute des accès sur des répertoires particuliers...

Exemple. Mon blog perso est sur un serveur dédié tenu par un ami. Ce dernier héberge différents sites, donc différents utilisateurs, et pour chaque utilisateur il y a une racine web qui lui est propre, pour qu'il puisse y déposer ses fichiers qui seront interprétés par php / apache.

Lorsque je me connecte sur ce serveur avec l'utilisateur que mon ami m'a créé, par sftp via le plugin eclipse, je n'ai aucun message d'erreur lorsque j'édite un fichier ou que j'en crée un nouveau...

Si j'ai bien compris, le répertoire qui m'appartient, ainsi que tous les fichiers et sous-répertoires qui s'y trouvent sont associés à mon utilisateur, qui est dans le groupe www-data... Lorsque je crée de nouveaux fichiers ou répertoires, voire même plutôt lorsque certains fichiers php créent des fichiers ou des répertoires (upload par exemple), ils m'appartiennent également, c'est pourtant le processus apache qui s'en occupe, non ? C'est là que j'ai de la peine à comprendre comment ça fonctionne.

Est-ce que c'est simplement l'affectation des droits qui rentre en ligne de compte pour qu'apache puisse également créer des fichiers (genre 775 et 664) ?

A force d'en parler je crois commencer à comprendre mais si vous pouviez me confirmer ça roll

Hors ligne

#8 Le 10/02/2010, à 16:40

yohann

Re : [Résolu] droits sur les fichiers du serveur web, votre avis svp

yohann merci pour les explications complémentaires sur la configuration, ça me semble tout à fait judicieux, reste à savoir quels sont les répertoires et fichiers qui nécessitent des autorisations pour l'utilisateur www-data.

si tu ne sais pas, ne donne pas l'accès en écriture, si apache a besoin d'écrire quelque part et ne peux pas, il te le fera savoir.

ça va un peu plus loin que ma question de base, mais je me demande justement comment est-ce que ça fonctionne lorsqu'on possède un serveur dédié et qu'on y crée des utilisateurs auxquels on rajoute des accès sur des répertoires particuliers...

je crois qu'il y a confusion entre serveur dédié et hébergement mutualisé, (en l'occurence sur un serveur dédié... (c'est confusant n'est ce pas?))
un serveur dédier permet d'avoir un accès root sur une machine (physique ou virtuelle) par ssh.
un herbergement mutalisé donne au mieux accès a un panel de configuration permettant de créer des comptre email, ftp, des base de donnée, etc, je connais par exemple vhcs2 devenue ispcp.

Exemple. Mon blog perso est sur un serveur dédié tenu par un ami. Ce dernier héberge différents sites, donc différents utilisateurs, et pour chaque utilisateur il y a une racine web qui lui est propre, pour qu'il puisse y déposer ses fichiers qui seront interprétés par php / apache.

cela dépend des panel (voir plus haut) souvent la racine du ftp est dépendante de l'utilisateur qui se connecte, dans le cas des gros panel, ce sont meme des utilisateur virtuel qui sont utilisés, on distingue alors l'utilisateur du panel de l'utilisateur unix.


Lorsque je me connecte sur ce serveur avec l'utilisateur que mon ami m'a créé, par sftp via le plugin eclipse, je n'ai aucun message d'erreur lorsque j'édite un fichier ou que j'en crée un nouveau...

cela dépend principalement de la configuration du serveur ftp, lequel peut associer un user unix à un compte ftp, cela dépend donc du panel, => serveur ftp utilisé par le panel => configuration du serveur ftp utilisé par le panel


Si j'ai bien compris, le répertoire qui m'appartient, ainsi que tous les fichiers et sous-répertoires qui s'y trouvent sont associés à mon utilisateur, qui est dans le groupe www-data...

désolé mais non cela n'a rien a voir, (sauf configuration vraiment particulière (voir bit suid, sgid sur wikipedia), la personne qui cree un fichier ou repertoire est propriétaire de ce dernier, peu importe à qui appartient le repertoire ou sous répertoire le contenant (sauf sgid suid...)

Lorsque je crée de nouveaux fichiers ou répertoires, voire même plutôt lorsque certains fichiers php créent des fichiers ou des répertoires (upload par exemple), ils m'appartiennent également, c'est pourtant le processus apache qui s'en occupe, non ? C'est là que j'ai de la peine à comprendre comment ça fonctionne.

si c'est le cas c'est sans doute a cause de se fameux bit suid sur le repertoire.
qd apache cree un fichier (uplod, file_put_contents ...) le propriétaire du fichier devrai etre www-data (sur les distrib debian), (mais ça dépend de comment est configurer apache), ensuite (et encore une fois ça dépend du panel de ton ami, il est possible que les acls entre en ligne de compte)

Est-ce que c'est simplement l'affectation des droits qui rentre en ligne de compte pour qu'apache puisse également créer des fichiers (genre 775 et 664) ?

oui c'est simplement une histoire de droits


j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.

Hors ligne

#9 Le 10/02/2010, à 19:21

titouille

Re : [Résolu] droits sur les fichiers du serveur web, votre avis svp

Ok pour les explications.

L'un dans l'autre, c'est à partir d'un serveur dédié qu'on peut faire des hébergements mutualisés. C'était là que je voulais en venir, c'est pour ça que j'ai pris l'exemple de mon ami qui possède un serveur dédié, et qui donne la possibilité à plusieurs utilisateurs d'héberger leurs propres sites dessus.
Concernant sa config, je crois qu'il fait la plupart des choses manuellement, donc sans panel. C'est pour ça que je me posais la question de savoir comment est-ce que ça se gère. Je lui demanderai si il utilise bien suid et sgid (dont j'ai lu les explications sur wikipedia).

Je me retrouve justement confronté au problème apache de départ, à savoir qu'apache ne peut pas créer un répertoire dans un emplacement spécifique, ni réattribuer les droits d'un fichier de config... J'utilise bcp le cms Drupal pour la construction de sites web, et c'est Drupal qui s'occupe de créer certains répertoires, exemple : Pour l'upload de fichiers, drupal doit créer un répertoire "files" à l'emplacement {racine du site}/sites/default/ et il doit également modifier les droits d'un fichier situé dans ce même répertoire default, mais il ne peut plus le faire maintenant que le le propriétaire est titouille:www-data
Si j'attribue 775 sur le répertoire default, alors apache peut créer le répertoire, mais avec un 664 sur le fichier de config, il ne peut pas le modifier.

De même, le répertoire "files" va être créé avec comme propriétaire www-data:www-data.

Cela veut donc dire que chaque fois qu'il y a des nouveaux répertoires créés par le serveur lui-même, il faudrai de préférence que je relance une commande pour les attribuer à l'utilisateur titouille:www-data tout en laissant l'accès "total" au groupe www-data.

ça me semble un peu compliqué tout de même, car je devrai souvent relancer une commande pour changer le propriétaire et modifier les droits d'accès. Ou alors faire des tests avec ces fameux suid et sgid pour trouver la configuration adéquate.

Suis pas sorti de l'auberge:D M'enfin merci beaucoup pour ces explications, je vais tenter d'avancer dans cette voie.

Hors ligne

#10 Le 11/02/2010, à 10:23

yohann

Re : [Résolu] droits sur les fichiers du serveur web, votre avis svp

salut,

l'important c'est de comprendre comment ça fonctionne,
dans ton cas, je ne pense vraiment pas que tu ais besoin de t'embeter avec les suid, sgid.
en général ce n'est pas une bonne chose de modifier directement des fichiers sur lesquels apache a les droits d'écriture et vis versa (tu ne veux pas que apache remplace un fichiers que tu as passé des heures a paufiner, et tu ne veux pas écrire à la main un fichier que apache peut générer à ta place).
ce qui m'étonne dans ce que tu décris c'est que apache ne puisse pas modifier un fichiers de config titouille:www-data rw- rw- r--
cela doit venir du fait que le repertoire ainsi créer n'appartient pas au groupe apache, peut être que finalement le sgid pourrait être util dans ce cas


j.vachez, le génie du net | Soirées jeux sur Lyon | 441
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.

Hors ligne

#11 Le 11/02/2010, à 17:37

titouille

Re : [Résolu] droits sur les fichiers du serveur web, votre avis svp

Ok, je comprends bien ou tu veux en venir lorsque tu dis

en général ce n'est pas une bonne chose de modifier directement des fichiers sur lesquels apache a les droits d'écriture et vis versa

Pour le problème de changer les droits, c'est bien les droits qui sont donnés au fichier de config : rw- rw- r-- et apache ne peut rien n'y faire. Donc j'imagine que sgid serait la solution, mais c'est un moindre mal. Le tableau de bord drupal indique automatiquement que ce fichier n'est pas en lecture seule dès qu'on va dans l'administration du site, je ne risque pas trop d'oublier de faire cette modification quand c'est nécessaire.

Encore une fois un grand merci pour toutes ces explications sur les droits utilisateur wink

Hors ligne