web-dev-qa-db-fra.com

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

Pour certains sites Web, la configuration du serveur Web est simple:

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 je les ai redonnés à www-data lorsque j'ai terminé (sites WordPress nécessaires pour WP Uploads au travail). Ce n'est probablement pas la meilleure façon.

J'essaie de trouver un moyen de créer un autre utilisateur (appelons-le utilisateur1) autorisé à modifier des fichiers sur site1, mais pas site2, et n'empêche pas les fichiers d'être "détenus" par www-data. Y at-il un moyen pour moi de faire cela?

37
George Pearce

Si nous vérifions la propriété de 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 appartient à l'utilisateur root, au groupe root. Alors que l'utilisateur root a le droit d'écriture (plus le droit de lecture et d'exécution) sur le répertoire, le groupe root n'a que le droit de lecture et d'exécution.

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

Créer un nouveau groupe,

Sudo addgroup site1

Ajouter utilisateur1 au groupe nouvellement créé,

Sudo adduser user1 site1

Vérifiez que l'utilisateur1 est vraiment dans ce groupe,

groups user1

La sortie devrait être une liste quelque chose comme,

user1 : <other-groups> site1

Nous pouvons maintenant 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 l'autorisation d'écriture à ce nouveau propriétaire du 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/

Ainsi, le répertoire appartient maintenant à l'utilisateur root, groupe site1. L'utilisateur root et le groupe site1 ont tous deux l'autorisation d'écriture (plus les 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, accédez au 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 d'utilisateur1 n'est probablement pas le site1. Alors, changez pour ce groupe.

newgrp - site1

Essayez de recréer le fichier (sachez que vous avez été déplacé dans le répertoire de base de l'utilisateur1 après avoir changé de groupe), cela devrait fonctionner maintenant. Puisque les fichiers créés auront l’autorisation de lecture universelle, Apache (ou votre serveur Web) ne devrait rencontrer aucun problème pour y accéder.

EDIT

En outre, comme indiqué par dan08 dans un commentaire, 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 (notamment les scripts PHP) sera effectué par défaut avec les autorisations de l'utilisateur www-data (et du groupe www-data) également. WordPress utilise l'utilisateur www-data pour écrire des fichiers.

Si vous voulez voir le fonctionnement du serveur Web Apache, lancez la commande,

ps aux | grep Apache2 | less
68
Masroor

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 utilisateur1 et utilisateur2 aux groupes appropriés

Sudo adduser user1 site1grp && Sudo adduser user2 site2grp

Modifiez l'autorisation des dossiers de votre site de sorte 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

Désormais, www-data dispose des autorisations d'utilisateur et de groupe sur les deux sites et chaque utilisateur dispose des autorisations de groupe pour son site respectif.

7
Dan

Vous devez créer un nouveau groupe pour le "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 groupe au site1. www-data pourra toujours accéder au site, car il appartient au groupe new_group, tandis que new_user ne pourra pas accéder à site2, car il n'appartiendra pas au groupe www-data, qui possède le site2.

3
errikos

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

Ubuntu/Apache

  1. Ajoutez votre utilisateur au groupe www-data:

    CREDIT Octroi d'autorisations d'écriture au groupe www-data

    Vous voulez 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 obtenir quelque chose comme:

    yourUserName : yourUserGroupName www-data
    

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

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

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

    cd yourWebSiteFolder
    
  5. Modifiez de manière récursive les premissions de groupe des dossiers et sous-dossiers pour activer les autorisations en é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 récursivement les premissions de groupe des fichiers et des sous-fichiers pour activer les autorisations d'écriture:

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

    Le résultat devrait ressembler à quelque chose comme:

    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.

3
Jadeye

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

# usermod -aG www-data username

pour utilisateur existant, ou

# adduser username www-data

pour nouvellement créé

1
vladkras