2 votes

/var/www gestion des droits

J'ai un serveur avec plusieurs utilisateurs et je voudrais permettre à certains d'entre eux d'y stocker des pages web. J'ai donc créé des sous-répertoires de /var/www pour eux et configuré mon serveur web en conséquence.

Cependant, je ne veux pas qu'ils puissent voir le contenu d'un sous-répertoire de /var/www autre que le leur. Comment puis-je faire cela ? Si je fixe les droits du répertoire supérieur à user:www-data et les droits d'accès à 760, je pense que ce serait possible. Mais comment puis-je m'assurer que chaque fichier ou répertoire créé dans leur répertoire utilise les mêmes attributs utilisateur:groupe ?

J'aimerais également pouvoir utiliser git pour déployer le contenu des pages web. Je ne veux pas connaître les détails techniques sur la façon de le faire, mais plutôt comment je dois organiser les droits à nouveau. J'utilise gitolite et chaque dépôt est stocké sous /var/lib/gitolite/repositories (le propriétaire des fichiers est l'utilisateur git). Quelle est la meilleure façon de permettre à l'utilisateur git d'écrire dans l'un des répertoires de la page web tout en utilisant les informations correctes d'utilisateur:groupe ? Est-ce possible ? Comment gérez-vous vos droits d'accès à /var/www ? Comment les fournisseurs le font-ils ?

4voto

Amy Anuszewski Points 1228

Tout d'abord, notez que votre 760 refuserait au groupe www-data l'autorisation d'"entrer" dans ce répertoire, et qu'il serait donc incapable de servir les fichiers qui s'y trouvent.

Les bits +s sur les répertoires forcent les fichiers et les sous-répertoires à être créés avec le même uid/gid que le répertoire lui-même (et les sous-répertoires seront également +s), ainsi si vous

chown user:www-data /var/www/userdir
chmod 6770 /var/www/userdir

tous les fichiers et dossiers créés dans ce dossier après ce point seront user:www-data. Notez que vous voulez seulement définir ceci sur les répertoires, et cela ne "corrigera" pas les fichiers et répertoires qui existent déjà.

Si vous n'avez pas besoin de la liste des répertoires ou des fonctions de négociation du contenu du serveur web, vous pouvez laisser le groupe r de côté. sur le dossier (6730). Cela rendra un peu plus difficile l'écriture d'un script qui est exécuté par le serveur web et qui jette un coup d'oeil dans le répertoire d'un autre utilisateur (ils devront connaître le nom du fichier qu'ils veulent lire). Vous pouvez également atténuer ce problème en utilisant une forme de suexec pour vous assurer que les script dans les répertoires des utilisateurs ne sont pas exécutés dans le groupe www-data.

1voto

jnthnjns Points 121

Jetez un coup d'œil au mod Apache2, mod_userdir pour l'approche standard des répertoires Web des utilisateurs.

1voto

Eric Noob Points 531

Concernant l'accès à git...

Vous autorisez l'utilisateur apache à avoir un accès en lecture seule aux dépôts git appropriés. Puis vous exécutez périodiquement git pull ... (par exemple, via cron) pour mettre à jour le serveur web. Cela signifie que vous n'avez pas à vous préoccuper des permissions sur le système de fichiers -- tous les fichiers appartiennent à l'utilisateur Apache ; personne d'autre n'a le droit d'écriture.

Ceci est important : l'utilisateur git n'a pas accès en écriture aux répertoires d'Apache. L'utilisateur apache exécute un git pull et de se connecter à votre serveur git par ssh (même s'il fonctionne sur le même hôte).

Si vous voulez que la mise à jour se fasse automatiquement, plutôt que d'interroger via cron, vous pouvez avoir un CGI script qui déclenche la fonction git pull et ensuite dans votre référentiel post-update crochet, vous mettriez quelque chose comme :

curl http://www.example.com/trigger-post-update-script

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X