web-dev-qa-db-fra.com

Autorisation refusée lors de l'écriture d'un fichier dans var / www malgré l'ajout de moi au groupe d'utilisateurs

J'ai donné la permission de lire et d'écrire des fichiers dans /var/www à l'utilisateur actif (moi) en suivant les étapes décrites dans Quel est le moyen le plus simple d'éditer et d'ajouter des fichiers dans "/ var/www"? . Cela fonctionne bien lorsque j'essaie de créer/lire un fichier dans le répertoire du projet.

Dites que je travaille dans /var/www/xyz

Je suis capable de lire et d'écrire des fichiers dans ce dossier à l'aide d'un code php. Maintenant, j'ai créé un dossier dans le dossier xyz, disons abc

/var/www/xyz/abc

Dans mon code php lorsque je lis un fichier situé à l'intérieur de abc, cela fonctionne bien, mais cela me donne warning: permission denied lorsque je tente de créer un fichier. dans ce dossier.

L'avertissement exact est

Warning: fopen(abc/a.txt): failed to open stream: Permission denied in /var/www/xyz/code.php

On m'a demandé de fournir quelques résultats:

stat /var/www/dodge
  File var/www/dodge' 
  Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 700h/1792d Inode: 1445503 Links: 8
Access: (2775/drwxrwsr-x) Uid: ( 33/www-data) Gid: ( 33/www-data)
Access: 2013-07-16 16:29:21.434531583 +0530
Modify: 2013-07-16 14:07:46.482782580 +0530
Change: 2013-07-16 16:28:04.622533850 +0530
 Birth: -

stat /var/www/xyz/abc
  File: /var/www/dodge/codes' 
  Size: 4096 Blocks: 8 IO Block: 4096 directory 
Device: 700h/1792d Inode: 1446465 Links: 2 
Access: (0775/drwxrwxr-x) Uid: ( 1000/ wq) Gid: ( 1000/ wq) 
Access: 2013-07-16 15:16:15.554661170 +0530 
Modify: 2013-07-16 15:13:42.698665686 +0530 
Change: 2013-07-16 15:13:42.698665686 +0530
 Birth: -
2
vinit

Pour cette situation, vous devez ajouter le bit set-group-ID au répertoire /var/www/xyz afin que les répertoires nouvellement créés au sein du groupe héritent du groupe parent.

chmod g+s /var/www/xyz

Voir man 2 chmod

S_ISGID (02000) set-group-ID (définit le groupe effectif du processus sur execve (2); verrouillage obligatoire, comme décrit dans fcntl (2); prend le nouveau groupe de fichiers dans le répertoire parent, comme décrit dans chown (2) et mkdir (2))

Voir les commentaires sur la réponse de l'article référé.

Editer après le commentaire:

Si vous avez ajouté le bit setgid au répertoire parent après , le sous-répertoire a été créé:

  File var/www/dodge' 
  Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 700h/1792d Inode: 1445503 Links: 8
Access: (2775/drwxrwsr-x) Uid: ( 33/www-data) Gid: ( 33/www-data)
Access: 2013-07-16 16:29:21.434531583 +0530
Modify: 2013-07-16 14:07:46.482782580 +0530
Change: 2013-07-16 16:28:04.622533850 +0530 <---added setgid

mais le sous-répertoire a été créé avant cela:

  File: /var/www/dodge/codes' 
  Size: 4096 Blocks: 8 IO Block: 4096 directory 
Device: 700h/1792d Inode: 1446465 Links: 2 
Access: (0775/drwxrwxr-x) Uid: ( 1000/ wq) Gid: ( 1000/ wq) 
Access: 2013-07-16 15:16:15.554661170 +0530 
Modify: 2013-07-16 15:13:42.698665686 +0530 
Change: 2013-07-16 15:13:42.698665686 +0530 <---before ctime above

le bit setgid fonctionne lorsque vous créez de nouveaux fichiers et répertoires. Cela ne fonctionnera pas pour ceux qui ont déjà été créés. Ainsi, le répertoire codes appartient toujours à wq et au groupe wq, et l’autre utilisateur n’a pas l’autorisation de créer des fichiers à cet emplacement; c'est pourquoi vous obtenez la même erreur qu'avant. Soit chown le sous-répertoire pour définir le groupe correct, soit supprimez-le et recréez-le.

chown :group /var/www/dodge/code
2
Grzegorz Żur

Résolution de ce problème en ajoutant le dossier xyz au groupe var-www. Ainsi, je peux maintenant écrire aussi dans les fichiers des sous-dossiers.

1
vinit