Questions sur les permissions d'un site web

Bonjour,

j’essaye de comprendre certaines choses avec les permissions d’un site web sur mon serveur Debian 8.6.
J’ai créé un utilisateur toto pour administrer un site web www.domain.com et j’ai intégré www-data à son groupe.
A noter que toto accède en SFTP au dossier www.domain.com mais n’a le droit d’écriture que dans le dossier public.

root@debian:/srv/http# cat /etc/group
[...]
www-data:x:33:
toto:x:1001:www-data

Avec cette configuration de permissions :

root@debian:/srv/http# find /srv/http | xargs stat -c "%n %a %A %U %G" | column -t
/srv/http                                                      750  drwxr-x---  root      www-data
/srv/http/www.domain.com                                       750  drwxr-x---  www-data  toto
/srv/http/www.domain.com/logs                                  750  drwxr-x---  root      toto
/srv/http/www.domain.com/logs/www.domain.com-access.log        640  -rw-r-----  root      toto
/srv/http/www.domain.com/logs/www.domain.com-error.log         640  -rw-r-----  root      toto
/srv/http/www.domain.com/public                                750  drwxr-x---  toto      toto
/srv/http/www.domain.com/public/index.php                      640  -rw-r-----  toto      toto

1/ Pourquoi j’obtiens une erreur d’accès “Forbidden” alors que www-data (groupe toto) a les permissions (r-x) suffisantes pour accéder au dossier public ???

Si je change les permissions au dossier public

chown toto:www-data www.domain.com/public

donnant :

root@debian:/srv/http# find /srv/http | xargs stat -c "%n %a %A %U %G" | column -t
/srv/http                                                      750  drwxr-x---  root      www-data
/srv/http/www.domain.com                                       750  drwxr-x---  www-data  toto
/srv/http/www.domain.com/logs                                  750  drwxr-x---  root      toto
/srv/http/www.domain.com/logs/www.domain.com-access.log        640  -rw-r-----  root      toto
/srv/http/www.domain.com/logs/www.domain.com-error.log         640  -rw-r-----  root      toto
/srv/http/www.domain.com/public                                750  drwxr-x---  toto      www-data
/srv/http/www.domain.com/public/index.php                      640  -rw-r-----  toto      toto 

ça fonctionne.

Pareil avec :

chown toto:toto www.domain.com/public
chmod 755 www.domain.com/public

donnant :

root@debian:/srv/http# find /srv/http | xargs stat -c "%n %a %A %U %G" | column -t
/srv/http                                                      750  drwxr-x---  root      www-data
/srv/http/www.domain.com                                       750  drwxr-x---  www-data  toto
/srv/http/www.domain.com/logs                                  750  drwxr-x---  root      toto
/srv/http/www.domain.com/logs/www.domain.com-access.log        640  -rw-r-----  root      toto
/srv/http/www.domain.com/logs/www.domain.com-error.log         640  -rw-r-----  root      toto
/srv/http/www.domain.com/public                                755  drwxr-xr-x  toto      toto
/srv/http/www.domain.com/public/index.php                      640  -rw-r-----  toto      toto

Comme si mon groupe toto ne servait à rien (permissions R-X via others)…

2/ Faut-il intégrer les utilisateurs au groupe www-data ?
3/ Faut-il intégrer l’utilisateur www-data aux groupes des “webmasters” ?
4/ Les 2 ???
5/ L’utilisateur toto ayant les droits RWX dans le dossier public, les fichiers / dossiers créés auront u:toto et g:toto, il faut donc soit donner les droits R-X aux autres utilisateurs (dont www-data) pour y accéder… ???

Je lis beaucoup de choses sur la toile et j’ai du mal à déterminer ce qui est bien ou pas bien (du point du vu sécurité et ergonomie)…
Quelqu’un pourrait éclairer ma lanterne ???
Merci d’avance ! :slight_smile:

utilisateur toto pour administrer un site web www.domain.com et j’ai intégré www-data à son groupe.

C’est toto qui doit être dans le groupe www-data, et non l’inverse.

ok merci ricardo
mais comment www-data peut accéder à un dossier “truc” dans le public uploadé par toto et du coup ayant les permissions u:toto et g:toto ???

et niveau sécurité c’est un fonctionnement normal ?

Je ne peux pas te répondre mais je peux te dire que sur mon site web, tous les dossiers qui sont dans /var/www, sont root:www-data
tous les dossiers de l’étage suivant sont ww-data:www-data

Pour avoir www-data:www-data, tu changes le propriétaire/groupe manuellement à chaque upload ?

Non, pourquoi ?
Les groupes et propriétaires sont définis une fois pour toutes dans chaque dossier.
Qu’entends-tu par chaque upload ? Sois plus clair et si possible, en français.

A moins que tes sites web soient “statiques”, tu uploads de temps en temps (via FTP, SMB, SFTP, SCP & co) des fichiers de ton poste (par ex) vers le serveur… et ces fichiers obtiennent comme propriétaire et groupe : www-data ???

je viens de découvrir : umask, suid et sgid… j’ai comme l’impression que c’est ce qu’il me manquait. Je continu mes lectures. :wink:

http://www.linuxpedia.fr/doku.php/droits_et_permissions_sous_linux

Quand je copie ou que je déplace un fichier de mon ordi vers mon serveur, je le fais en ligne de commande via SSH.
S’il s’agit d’un dossier entier, je le déplace via SSHFS.
Quand il s’agissait de déplacement journaliers (ce n’est plus le cas car mon site est un peu en sommeil), je m’étais fait des scripts.

ça ne répond pas vraiment à ma question… tu te connecte avec quel utilisateur ?
Tes fichiers / dossiers obtiennent quel u et g ?

Quand on se connecte en SSH, c’est toujours avec l’utilisateur de la machine appelante, donc, chez moi, “ricardo”.
Je viens de retrouver une note où j’employais SCP pour copier un dossier de “ordibureau” vers “serveur” :
scp -P XXX -r ricardo@XX.XXX.X.XX:/home/ricardo/<DOSSIER> /home/ricardo/temporaire
Donc, si je me souviens bien, je pratiquais en deux foix :
1/ copie du dossier de “ordibureau” vers le dossier du serveur distant "serveur"
2/connection en SSH de ricardo sur le serveur distant, puis, en tant que ‘root’, copie de \DOSSIER> vers la cible définitive. En l’occurrence, cette dernière pourrait être : /var/www.
Dans ce cas, le propriétaire et le groupe de ce dossier transféré prendrait les attributs du dossier/père, soit www-data:www-data

Ok…
dans mon cas, j’ai autant d’utilisateurs (webmaster) autre que moi (administrateur) qu’il y a de sites Web. Ta méthode n’est donc pas envisageable.

Moi je recherche une méthode où le webmaster se connecte en SFTP et que les fichiers / dossiers soient “nativement” lisibles par www-data.