Accorder à un utilisateur des autorisations sur www-data / var / www

33

J'ai une configuration simple de serveur Web pour certains sites Web, avec une mise en page similaire à celle-ci:

site1: /var/www/site1/public_html/

site2: /var/www/site2/public_html/

J'ai déjà utilisé l'utilisateur root pour gérer les fichiers, puis les ai redonné à www-data lorsque j'ai été fait (sites WordPress, nécessaires au fonctionnement de WP Uploads). Ce n'est probablement pas le meilleur moyen.

J'essaie de trouver un moyen de créer un autre utilisateur (appelons-le user1) qui est autorisé à modifier des fichiers dans site1, mais pas site2, et n'empêche pas les fichiers d'être "possédés" par www-data . Y a-t-il un moyen pour moi de le faire?

    
posée George Pearce 24.10.2013 - 16:51
la source

5 réponses

64

Si nous vérifions la propriété de site1, nous trouverons quelque chose comme ça,

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

Cela signifie que le répertoire appartient à l'utilisateur root, root du groupe. Alors que l'utilisateur root a l'autorisation d'écriture (plus les autorisations de lecture et d'exécution) dans le répertoire, le groupe root n'a que des autorisations de lecture et d'exécution.

Nous voudrons changer le propriétaire du groupe en un autre groupe (nouveau) et ajouter user1 à ce groupe particulier. Nous donnerons également la permission d’écriture à ce groupe.

Créer un nouveau groupe,

sudo addgroup site1

Ajouter user1 au groupe nouvellement créé,

sudo adduser user1 site1

Vérifiez que user1 est vraiment dans ce groupe,

groups user1

La sortie devrait être une liste quelque chose comme,

user1 : <other-groups> 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

Accordez la permission d’écriture à ce nouveau propriétaire de groupe,

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

Vérifiez que tous les changements sont bien là,

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

Le répertoire appartient désormais à l'utilisateur root, groupe site1. L'utilisateur root et le groupe site1 ont tous deux des droits d'écriture (plus des autorisations 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 dans le répertoire site1 et essayez de créer un fichier dans ce répertoire,

echo "My User1 Site" > index.html 
bash: index.html: Permission denied

Cela a échoué car le groupe principal de l'utilisateur1 n'est probablement pas le site1. Alors, changez de groupe.

newgrp - site1

Essayez de recréer le fichier (attention, vous avez été déplacé vers le répertoire personnel de l'utilisateur1 après avoir changé de groupe), cela devrait fonctionner maintenant. Comme les fichiers créés auront une autorisation de lecture mondiale, apache (ou votre serveur Web) ne devrait rencontrer aucun problème pour y accéder.

EDIT

En outre, comme indiqué par dan08 dans les commentaires, vous devez ajouter www-data au groupe site1.

sudo adduser www-data site1

Sur de nombreuses distributions (pas toutes), www-data est l'utilisateur sous lequel le serveur Web Apache s'exécute. Cela signifie également que tout ce qui est fait par Apache (en particulier en incluant les scripts PHP) sera fait avec les permissions de l'utilisateur www-data (et aussi le groupe www-data) par défaut. WordPress utilise l'utilisateur www-data pour écrire des fichiers.

Si vous voulez voir comment fonctionne le serveur Web Apache, lancez la commande,

ps aux | grep apache2 | less
    
réponse donnée Masroor 24.10.2013 - 17:42
la source
6

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

Ajouter user1 et user2 aux groupes appropriés

sudo adduser user1 site1grp && sudo adduser user2 site2grp

Modifiez l'autorisation de vos dossiers de site afin que le propriétaire de l'utilisateur soit www-data et que le propriétaire du 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 dispose des autorisations utilisateur et groupe sur les deux sites et chaque utilisateur dispose des autorisations de groupe pour son site respectif.

    
réponse donnée dan08 24.10.2013 - 17:12
la source
3

Vous devez créer un nouveau groupe, appelé "nouvel utilisateur", puis ajouter les données www et le "nouvel utilisateur" à ce groupe:

sudo gpasswd -a new_user new_group

Vous pouvez ensuite changer le propriétaire en new_user et grouper en new_group :

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

Ensuite, vous devrez donner un accès au niveau groupe à site1. www-data pourra toujours accéder au site, car il appartient au nouveau_groupe, alors que new_user ne pourra pas accéder à site2, car il n'appartiendra pas au groupe www-data, qui possède site2.

    
réponse donnée errikos 24.10.2013 - 17:01
la source
2

Pour ceux qui ont leur dossier racine wordpress sous leur dossier d'accueil:

Ubuntu / apache

  1. Ajoutez votre utilisateur au groupe de données www:

    CREDIT Accorder des autorisations d’écriture sur le groupe de données www

    p>

    Vous souhaitez appeler usermod sur votre utilisateur. Donc ce serait:

    sudo usermod -aG www-data yourUserName
    

    En supposant que le groupe www-data existe

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

    groups yourUserName
    

    Vous devriez avoir quelque chose comme:

    yourUserName : yourUserGroupName www-data
    

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

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

    chown yourUserName:www-data -R yourWebSiteFolder/*
    
  4. Changer de répertoire en votre WebSiteFolder

    cd yourWebSiteFolder
    
  5. Modifiez de manière récursive les prémissions de groupe des dossiers et sous-dossiers pour activer les autorisations d'écriture:

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

    de /home/yourUserName/yourWebSiteFolder/' est passé de 0755 (rwxr-xr-x) à 0775 (rwxrwxr-x)

  6. Modifiez de manière récursive les prémissions de groupe des fichiers et des sous-fichiers pour autoriser les autorisations d’écriture:

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

    Le résultat devrait ressembler à ceci:

    WAS:
    -rw-r--r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    CHANGED TO:
    -rw-rw-r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    

    Équivalent à:

    chmod -R ug+rw foldername
    

    Les autorisations seront comme 664 ou 775.

réponse donnée Jadeye 18.10.2014 - 12:56
la source
1

En supposant que tous les fichiers appartiennent déjà à www-data user (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 le même utilisateur www-data group pour permettre l'édition de ces fichiers

# usermod -aG www-data username

pour un utilisateur existant, ou

# adduser username www-data

pour celui qui vient d’être créé

    
réponse donnée vladkras 07.01.2016 - 09:40
la source

Lire d'autres questions sur les étiquettes