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?
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
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.
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.
Pour ceux qui ont leur dossier racine wordpress sous leur dossier personnel:
Ubuntu/Apache
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
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
Changer récursivement la propriété de groupe du dossier en conservant la propriété de l'utilisateur
chown yourUserName:www-data -R yourWebSiteFolder/*
Changer de répertoire sur yourWebSiteFolder
cd yourWebSiteFolder
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)
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.
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éé