190 votes

Comment éviter d'utiliser sudo quand on travaille dans /var/www ?

Je veux arrêter de devoir utiliser sudo à chaque fois que je travaille dans /var/www . Comment puis-je m'y prendre ? Je veux simplement mettre tous mes sites dans ce répertoire et travailler avec eux sans trop de peine.

274voto

Lekensteyn Points 162346

La plupart des réponses ici ne sont pas rédigées dans un souci de sécurité. Il est bon d'avoir le sentiment qu'exécuter sudo à chaque fois n'est pas très sage. Si vous faites une faute de frappe (par exemple un espace unique au mauvais endroit, comme la suppression récursive de / var/www/dir ce qui signifie / y var/www/dir au lieu de /var/www/dir - veuillez ne pas essayer ), vous risquez de détruire votre système.

Note : Démarrage avec Apache 2.4.7 / Ubuntu 14.04, /var/www a été déplacé vers /var/www/html Adaptez les commandes de cette réponse en conséquence.

Voir :

Mauvaises idées :

  • chmod 777 (sagarchalise) - cela permet à toute personne ayant accès à votre système d'écrire dans les répertoires et les fichiers, permettant ainsi à l'intrus d'exécuter tout code sous le nom de www-data utilisateur
  • chgrp -R www-data $HOME (cob) - cela permet www-data pour lire ou écrire n'importe quel fichier dans le répertoire personnel. Cela ne respecte pas la règle du moindre privilège.
  • chown -R $USER:$USER /var/www (kv1dr) - à moins que le monde ait des droits de lecture sur /var/www le serveur web fonctionnant sous www-data ne sera pas en mesure de lire (servir) les fichiers. Si le fichier est un document HTML simple accessible au public, ce n'est peut-être pas un problème si le monde entier peut lire le fichier. Mais si le fichier est un fichier PHP contenant des mots de passe, c'est le cas.

NOTE dans les solutions ci-dessous, j'ai accordé www-data les privilèges d'écriture. Cependant, /usr/share/doc/base-passwd/users-and-groups.txt.gz États :

www-data

Certains serveurs web fonctionnent sous le nom de www-data. Le contenu web ne doit pas être la propriété de cet utilisateur, sinon un serveur web compromis serait capable de réécrire un site web. Les données écrites par les serveurs web seront la propriété de www-data.

Dans la mesure du possible, faites no accorder des droits d'écriture au www-data groupe. www-data doit seulement être capable de lire les fichiers pour que le serveur web puisse le servir. Le seul cas où www-data Les autorisations d'écriture sont nécessaires pour les répertoires stockant les téléchargements et autres emplacements qui doivent être écrits.

Solution 1

Ajoutez vous à la www-data et mettre le bit setgid sur le groupe /var/www de sorte que tous les fichiers nouvellement créés héritent également de ce groupe.

sudo gpasswd -a "$USER" www-data

Corriger les fichiers précédemment créés (en supposant que vous êtes le seul utilisateur de l'application /var/www ) :

sudo chown -R "$USER":www-data /var/www
find /var/www -type f -exec chmod 0660 {} \;
sudo find /var/www -type d -exec chmod 2770 {} \;

(encore plus sûr : utiliser 640 o 2750 et manuellement chmod g+w file-or-dir qui doit être accessible en écriture par le serveur web)

Solution 2

Créez un lien symbolique pour chaque projet vers votre répertoire personnel. Disons que votre projet est situé à ~/projects/foo et vous voulez qu'il soit situé à /var/www/foo , cours :

sudo ln -sT ~/projects/foo /var/www/foo

Si votre répertoire d'origine n'a pas de bit d'exécution (descend) défini pour other (pour des raisons de sécurité), changez le groupe de celui-ci en www-data mais mettre le bit d'exécution seulement (pas de lecture/écriture). Faites de même pour le ~/projects car il peut contenir d'autres projets que www. (Vous n'avez pas besoin de sudo si vous avez précédemment ajouté votre utilisateur à la www-data groupe).

sudo chgrp www-data ~ ~/projects
chmod 710 ~ ~/projects

Réglez le groupe sur www-data sur ~/projects/foo et permettre au serveur web de lire et d'écrire dans les fichiers et les fichiers+répertoires et de descendre dans les répertoires :

sudo chgrp www-data ~/projects/foo
find ~/projects/foo -type f -exec chmod 660 {} \;
find ~/projects/foo -type d -exec chmod 2770 {} \;

Encore plus sûr : utilisez 640 et 2750 par défaut et chmoder manuellement les fichiers et répertoires qui doivent être accessibles en écriture par l'utilisateur du serveur web. Le bit setgid ne doit être ajouté que si vous souhaitez que chaque fichier nouvellement créé dans le répertoire ~/projects/foo pour être accessible par le groupe.

À partir de maintenant, vous pouvez accéder à votre site à l'adresse suivante http://localhost/foo et modifiez vos fichiers de projet dans ~/projects/foo .

Voir aussi

11voto

fragos Points 3329

Plutôt que de stocker mes sites web dans /var/www, j'y place des liens vers les sites qui se trouvent dans mon dossier personnel. Je peux librement modifier ou ajouter des pages à mes sites. Lorsque je suis satisfait des modifications apportées, j'envoie un FTP à une société d'hébergement où mon nom de domaine est lié.

7voto

Azendale Points 11431

Si vous rendez /var/www accessible en écriture par son groupe et que vous vous ajoutez à ce groupe, vous n'aurez pas à utiliser sudo tout en restant assez sécurisé. Essayez ceci :

sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rw /var/www

Vous devriez alors être en mesure de modifier /var/www/ sans problème.

La première ligne vous ajoute à la liste www-data la deuxième ligne efface tous les fichiers dont la propriété est erronée, et la troisième fait en sorte que tous les utilisateurs qui sont membres du groupe www-data peut lire et écrire tous les fichiers du groupe /var/www .

7voto

xavierm02 Points 2255

C'est aussi simple que ça. Vous n'avez pas besoin d'activer le 'UserDir' d'apache (non recommandé) ni de vous embrouiller avec les groupes 'www-data' (groupe apache dans le cas de Fedora).

Créez simplement votre répertoire de projet à l'intérieur /var/www/html

cd /var/www/html
sudo mkdir my_project

Ensuite, il suffit d'attribuer le répertoire du projet à votre utilisateur.

sudo chown your_username my_project

Vous pouvez maintenant commencer à travailler sur votre dossier de projet comme un utilisateur normal avec l'éditeur ou l'IDE de votre choix. Plus de sudos : )

7voto

thomasrutter Points 33791

A ne pas faire

  • Ne définissez pas les autorisations de fichiers à 777 (monde-écrit)

    Il s'agit d'une faille de sécurité importante, surtout si vous utilisez des scripts côté serveur tels que PHP. Les processus non privilégiés ne devraient pas être en mesure d'écrire dans des fichiers qui affecteraient le site Web ou, dans le cas où le script côté serveur est utilisé, d'exécuter du code arbitraire.

  • Ne vous ajoutez pas en tant que membre de l'équipe de la www-data et lui donner les droits d'écriture

    Le but de ce groupe est qu'il s'agit d'un non privilégiée que le processus de serveur exécuté en tant que. Dans la mesure du possible, ils ne doivent avoir qu'un accès en lecture aux fichiers du site Web, pour les mêmes raisons que ci-dessus.

  • Ne changez pas les permissions des processus Apache.

    Les processus enfants Apache s'exécutent en tant que www-data l'utilisateur et le groupe par défaut, et cela ne doit pas être modifié. C'est juste une façon de ne pas leur donner de droits d'écriture sur le système de fichiers.

    Dans certaines circonstances, vous voulez que vos scripts côté serveur puissent écrire dans des fichiers, dans ce cas uniquement ces fichiers doivent être rendus accessibles en écriture par www-data et il faut veiller à en assurer la sécurité.

Dos

  • Définir les fichiers comme étant votre propriété

    Si vous êtes la seule personne, ou la personne habituelle, à modifier certains fichiers sur le site web, il est tout à fait logique de vous approprier ces fichiers. Définissez leur propriétaire à <your username> .

    Vous n'avez pas besoin de modifier les autorisations du serveur pour cela, car le serveur continuera à bénéficier d'un accès en lecture seule même si les fichiers vous appartiennent.

  • Choisissez un endroit judicieux pour héberger les fichiers (à l'aide de DocumentRoot )

    Si /var/www n'a pas de sens, vous pouvez les placer ailleurs. S'ils sont spécifiques à votre propre développement ou test, vous pouvez les placer dans votre répertoire personnel. Ou vous pouvez créer des répertoires dans /srv .

  • Si vous voulez donner groupe accès en écriture, créer un nouveau groupe aux fins de

    Ne réutilisez pas un groupe système, car ceux-ci sont généralement conçus pour avoir l'accès dont ils disposent actuellement, et pas plus, pour des raisons de sécurité.

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