44 votes

Accorder à un utilisateur des permissions sur /var/www détenu par www-data

J'ai mis en place un serveur web simple pour certains sites web, avec une structure ressemblant à :

site1: /var/www/site1/public_html/

site2: /var/www/site2/public_html/

J'ai précédemment utilisé l'utilisateur root pour gérer les fichiers, puis je les ai redonnés à www-data une fois que j'ai terminé (sites WordPress, nécessaire pour que les téléchargements WP fonctionnent). Ce n'est probablement pas la meilleure façon de faire.

J'essaie de trouver un moyen de créer un autre utilisateur (appelons-le user1) qui a la permission de modifier les fichiers dans site1, mais pas dans site2, et qui n'empêche pas les fichiers d'être 'possédés' par www-data. Est-ce que il y a un moyen pour moi de faire cela?

84voto

Masroor Points 2943

Si nous vérifions la propriété du site1, nous trouverons quelque chose comme ceci,

ls -ld /var/www/site1/
drwxr-xr-x 2 root root 4096 Oct 24 21:06 site1/

Cela signifie que le répertoire est détenu par l'utilisateur root, groupe root. Alors que l'utilisateur root a la permission d'écriture (plus les permissions de lecture et d'exécution) sur le répertoire, le groupe root a seulement les permissions de lecture et d'exécution.

Nous voudrons changer la propriété du groupe vers un autre groupe (nouveau) et ajouter l'utilisateur1 à ce groupe particulier. Nous donnerons également la permission d'écriture à ce groupe particulier.

Créer un nouveau groupe,

sudo addgroup site1

Ajouter l'utilisateur1 au groupe nouvellement créé,

sudo adduser user1 site1

Vérifier que l'utilisateur1 est bien dans ce groupe,

groups user1

La sortie devrait être une liste quelque chose comme,

user1 :  site1

Maintenant, nous pouvons changer la propriété du groupe de votre répertoire prévu.

sudo chown -vR :site1 /var/www/site1/
changed ownership of `/var/www/site1/' from root:root to :site1

Accorder la permission d'écriture à ce nouveau groupe propriétaire,

sudo chmod -vR g+w /var/www/site1/
mode of `/var/www/site1/' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)

Vérifier que tous les changements sont effectivement là,

ls -ld /var/www/site1/
drwxrwxr-x 2 root site1 4096 Oct 24 21:06 /var/www/site1/

Ainsi, le répertoire est maintenant détenu par l'utilisateur root, groupe site1. Tant l'utilisateur root que le groupe site1 ont la permission d'écriture (plus les permissions de lecture et d'exécution) sur le répertoire. Tout utilisateur appartenant au groupe site1 bénéficiera de tous les privilèges accordés à ce groupe.

Maintenant connectez-vous en tant qu'utilisateur1, déplacez-vous vers le répertoire site1 et essayez de créer un fichier dans ce répertoire,

echo "Mon Site Utilisateur1" > index.html 
bash: index.html: Permission denied

Cela a échoué car très probablement le groupe principal de l'utilisateur1 n'est pas site1. Changez donc pour ce groupe.

newgrp - site1

Essayez de recréer le fichier (attention, vous avez été déplacé dans le répertoire personnel de l'utilisateur1 après avoir changé de groupe), cela devrait fonctionner maintenant. Puisque les fichiers créés auront la permission de lecture universelle, apache (ou votre serveur web) ne devrait pas rencontrer de problème pour y accéder.

EDIT

Aussi, comme signalé par dan08 en commentaire, vous devez ajouter www-data au groupe site1.

sudo adduser www-data site1

Sur de nombreuses (mais pas toutes) distributions, www-data est l'utilisateur sous lequel le serveur web Apache fonctionne. Cela signifie également que tout ce que fait Apache (surtout y compris les scripts PHP) sera fait avec les permissions de l'utilisateur www-data (et aussi du groupe www-data) par défaut. WordPress utilise l'utilisateur www-data pour écrire des fichiers.

Si vous voulez voir comment le serveur web apache fonctionne, exécutez la commande,

ps aux | grep apache2 | less

13voto

Pour ceux qui ont leur dossier racine wordpress sous leur dossier personnel :

Ubuntu/apache

  1. Ajoutez votre utilisateur au groupe www-data :

    CREDIT Accorder des autorisations d'écriture au groupe www-data

    Vous voulez appeler usermod sur votre utilisateur. Donc, cela serait :

    sudo usermod -aG www-data votreNomUtilisateur

    En supposant que le groupe www-data existe

  2. Vérifiez si votre utilisateur est dans le groupe www-data :

    groups votreNomUtilisateur

    Vous devriez obtenir quelque chose comme :

    votreNomUtilisateur : votreNomGroupeUtilisateur www-data

    votreNomGroupeUtilisateur est généralement similaire à votre nom d'utilisateur

  3. Changer récursivement la propriété du groupe du dossier en conservant la propriété de votre utilisateur

    chown votreNomUtilisateur:www-data -R votreDossierSiteWeb/*
  4. Changer de répertoire vers votreDossierSiteWeb

    cd votreDossierSiteWeb
  5. Changer récursivement les autorisations du groupe des dossiers et sous-dossiers pour activer les autorisations d'écriture :

    find . -type d -exec chmod -R 775 {} \;

    Le mode de /home/votreNomUtilisateur/votreDossierSiteWeb/' a été changé de 0755 (rwxr-xr-x) à 0775 (rwxrwxr-x)

  6. Changer récursivement les autorisations du groupe des fichiers et sous-fichiers pour activer les autorisations d'écriture :

    find . -type f -exec chmod -R 664 {} \;

    Le résultat devrait ressembler à :

    ÉTAIT :
    -rw-r--r--  1 votreNomUtilisateur www-data  7192 Oct  4 00:03 nomFichier.html
    CHANGÉ EN :
    -rw-rw-r--  1 votreNomUtilisateur www-data  7192 Oct  4 00:03 nomFichier.html

    Équivalent à :

    chmod -R ug+rw nomDossier

    Les autorisations seront de 664 ou 775.

7voto

Dan Points 6405

Créez deux groupes: site1grp et site2grp

sudo groupadd site1grp && sudo groupadd site2grp

Ajoutez www-data aux deux groupes.

sudo adduser www-data site1grp && sudo adduser www-data site2grp

Ajoutez user1 et user2 aux groupes appropriés

sudo adduser user1 site1grp && sudo adduser user2 site2grp

Modifiez les autorisations de vos dossiers de site afin que le propriétaire soit www-data et le groupe soit le groupe approprié

sudo chown -R www-data:site1grp /var/www/site1  && sudo chown -R www-data:site2grp /var/www/site2

Maintenant www-data a les permissions utilisateur et groupe sur les deux sites et chaque utilisateur a les permissions de groupe pour leur site respectif.

3voto

osteven Points 166

Vous devez créer un nouveau groupe, pour le, soi-disant, "nouvel utilisateur", puis ajouter le www-data et le "nouvel utilisateur" à ce groupe :

sudo gpasswd -a new_user new_group

Ensuite, vous pouvez changer le propriétaire en new_user et le groupe en new_group :

sudo chown -R new_user:new_group /var/www/site1

Ensuite, vous devrez donner un accès de niveau groupe au site1. www-data pourra toujours accéder au site, car il appartient au nouveau groupe, tandis que le nouvel utilisateur ne pourra pas accéder au site2, car il n'appartiendra pas au groupe www-data, qui possède le site2.

1voto

vladkras Points 139

En supposant que tous les fichiers appartiennent déjà à l'utilisateur www-data (vous pouvez le vérifier avec la commande ls -slah) qui appartient au groupe www-data (colonne suivante après le nom d'utilisateur dans la liste des fichiers), vous pouvez simplement ajouter votre utilisateur au même groupe www-data pour permettre la modification de ces fichiers.

# usermod -aG www-data username

pour un utilisateur existant, ou

# adduser username www-data

pour un nouvel utilisateur créé

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X