web-dev-qa-db-fra.com

Comment donner à l'utilisateur www-data un dossier de mon dossier personnel?

J'ai un dossier: /home/myuser/folderA

Je souhaite donner à l'utilisateur www-data un accès en écriture à ce qui précède, tandis que "myuser" continue d'avoir un accès normal (car il s'agit de toute façon du dossier personnel de myuser).

Quelles commandes dois-je utiliser?

Remarque: je ne veux pas que www-data ait accès à d'autres dossiers de /home/myuser/.

Merci d'avance.

31
nLinked

Tout d'abord, ajoutez-vous au groupe www-data

usermod -a -G www-data (your username)

Ensuite:

chgrp www-data /home/myuser/folderA
chmod g+rwxs /home/myuser/folderA

Devrait faire l'affaire à moins que les autorisations sur votre /home/myuser n'autorisent l'accès d'autres utilisateurs.

La première commande change la propriété de groupe du dossier en celle du serveur Web. La deuxième commande donne aux membres du groupe www-data les droits de lecture, d’écriture et d’entrée de répertoire, et le drapeau groupe s garantit que tous les fichiers créés dans ce répertoire prennent www-data comme groupe. Par conséquent, si vous créez un fichier comme myuser, www-data l'utilisateur aura accès.

Nb. cela dépend également des paramètres umask de votre compte utilisateur et du serveur Web: vous devez vous assurer que les fichiers créés dans le dossier A ont un accès au groupe rw (et les répertoires créés dans le groupe de besoins rwx).

Si votre serveur Web ne dispose pas de droits dans votre répertoire /home/myuser (assez logique), il ne pourra y entrer que si vous faites autre chose. Deux solns:

  1. Sudo mount --bind /home/myuser/folderA /var/www/mysite/folderA (ceci est un hack laid et devrait être répété après le redémarrage. Mais une astuce puissante peut également être utilisée pour rendre les dossiers accessibles dans les prisons SSH.)

  2. Il suffit de déplacer le dossier partagé ailleurs, par exemple. /home/shared-stuff/folderA.

La 2ème option est la plus gentille. Supposons que le contenu du dossier A soit vraiment public et que vous ne vous souciez pas de savoir qui le voit, vous pouvez le configurer comme suit:

Sudo mkdir -m777 /home/shared-stuff

Ensuite, vous pouvez insérer dans ce dossier, par exemple, folderA avec les autorisations ci-dessus, et folderB auquel www-data ne devrait pas avoir accès avec des autorisations différentes, par exemple.

$ cd /home/shared-stuff ; ls -l
drwxrwsr-x 2 myuser www-data   4096 Jan 17 21:46 folderA
drwxrwx--- 2 myuser myuser     4096 Jan 17 21:46 folderB
44
artfulrobot

Une autre méthode consiste à modifier le nom d'utilisateur directement dans Apache config. Si c'est votre ordinateur local et que vous enregistrez des images stockées ailleurs, cela écraserait toutes les autorisations accordées sur le dossier. À faire également si vous n'avez qu'un seul utilisateur et que vous ne vous souciez pas de www-data!

$ Sudo vi /etc/Apache2/Apache2.conf

Trouvez un utilisateur et un groupe et mettez le vôtre
User <Your User>
Group <Your Group>

$ Sudo service Apache2 restart
6
Shadowbob