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

37

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 www-dataje les ai restitués à la fin de l'opération (sites WordPress, nécessaires au bon fonctionnement de WP Uploads). 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?

George Pearce
la source

Réponses:

71

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. Bien que l'utilisateur root dispose d'autorisations en écriture (plus les autorisations de lecture et d'exécution) sur le répertoire, le groupe root dispose uniquement des autorisations de lecture et d'exécution.

Nous voudrons changer la propriété du groupe en un autre (nouveau) groupe et ajouter 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.

MODIFIER

De plus, comme l'a souligné 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 que fait 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 comment fonctionne le serveur Web Apache, lancez la commande,

ps aux | grep apache2 | less
Masroor
la source
1
Vous devez également ajouter www-data au groupe site1. Lors du téléchargement et de la modification de fichiers dans l’interface Web Wordpress. Les modifications sont effectuées par Apache à l'aide de l'utilisateur www-data. Les privilèges de lecture ne sont donc pas suffisants la plupart du temps.
Dan
3
Le Permission deniedmessage n'est pas dû au "groupe principal", mais plutôt à l'utilisateur qui ne fait pas encore partie de ce groupe (en ce qui concerne le système d'exploitation). Si vous vous déconnectez et que vous vous reconnectez, cela fonctionnera comme prévu (sans exécuter newgrp - site1).
0b10011
En quoi cela serait-il différent de donner www-datades autorisations d'écriture au groupe si vous finissez par devoir ajouter www-dataà quoi que ce soit site1?
Matt
@MattBorja Votre requête n'est pas très claire. Demandez-vous ce qui ne va pas avec le fait de donner au groupe nommé www-data' write permissions? If that is the question, www-data 'n'est pas un groupe, c'est un utilisateur. S'il vous plaît laissez-moi savoir si j'ai mal compris votre question.
Masroor
Je pense que ce n'est pas une configuration sécurisée car les utilisateurs peuvent accéder aux sites de chacun via un script php, par exemple un gestionnaire de fichiers php.
Qdinar
7

Créez deux groupes: site1grpetsite2grp

sudo groupadd site1grp && sudo groupadd site2grp

Ajouter www-dataaux 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 de vos dossiers de 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

A maintenant www-datales autorisations d'utilisateur et de groupe sur les deux sites et chaque utilisateur a les autorisations de groupe pour leur site respectif.

Dan
la source
4

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 sur le groupe www-data

    Vous voulez faire appel usermodà votre utilisateur. Donc ce serait:

    sudo usermod -aG www-data yourUserName
    

    En supposant que le www-datagroupe existe

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

    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 {} \;
    

    mode de /home/yourUserName/yourWebSiteFolder/'changé 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.

Jadeye
la source
3

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 new_useret le groupe pour 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.

Errikos
la source
Votre réponse est déconcertante. Par "donner un accès de groupe au site1", vouliez-vous dire "changer le groupe de site1 en new_group" ou changer de mode ( chmod)? Votre réponse ne mentionne pas le mode où que ce soit qui peut faire la différence d'être en sécurité (ou casser des choses).
Lekensteyn
Je voulais dire changer le mode ( chmod) en révoquant toutes les autorisations pour OTHERS.
errikos
1

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

# usermod -aG www-data username

pour utilisateur existant, ou

# adduser username www-data

pour nouvellement créé

vladkras
la source