Rendre propriétaire des nouveaux fichiers ET dossiers www-data au lieu de superutilisateur / administrateur

13

J'ai eu du mal avec les autorisations jusqu'à présent, et j'ai posté une autre question, mais j'ai identifié le problème, sans aucun moyen de le résoudre pour le moment.

Ma configuration:

  • Bureau Ubuntu avec pile LAMP
  • 5 "utilisateurs" J'ai créé des utilisateurs que j'ai créés sur le serveur ubuntu en utilisant sudo useradd -r -s /bin/false USERNAMEet qui sont utilisés pour accéder aux dossiers partagés du réseau local, c'est-à-dire pour que les ordinateurs de mon réseau se connectent au dossier / var / www, partagé en utilisant Samba.
  • EDIT: Le but est de créer une sorte de "maître local" où tous les ordinateurs de mon réseau local peuvent travailler sur le même site Web, localement (je n'ai PAS d'adresse IP statique donc le serveur n'est pas accessible depuis ailleurs) .

Mon problème:

Actuellement, lorsque je crée un nouveau dossier sur /var/www/html(ex: Création du dossier / var / www / html / testsite1) à l'aide de n'importe quel ordinateur du réseau, ce dossier appartient automatiquement à boris:www-data("boris" étant l'utilisateur administrateur principal de mon installation de bureau ubuntu , et cela montre en effet boris: www-data lors de l'exécution ls -lsur le dossier nouvellement créé), ce qui pose des problèmes avec ma configuration actuelle (en utilisant Duplicator Plugin pour wordpress par LifeInTheGrid principalement). Cependant, mon /var/wwwet mon /var/www/htmlsont la propriété dewww-data:www-data

Je voudrais donc savoir comment je peux:

  • Changez la propriété en www-data: www-data de tous les fichiers ET répertoires sous / var / www et / var / www / html

  • Assurez-vous que tout fichier ou dossier que je vais créer avec l'un des utilisateurs de mon réseau appartiendra automatiquement à www-data: www-data (cela inclut les fichiers créés automatiquement par les scripts php car c'est ce que fait le plugin Duplicator si je suis pas faux).

Y-a-t-il un moyen de faire ça?

Remarque: Je suis un super débutant avec des choses liées à Linux et aux lignes de commande, mais je rattrape rapidement.

Remarque 2: umask est déjà défini comme 0002

ÉDITER:

J'ai essayé ceci:

sudo chown -R www-data:www-data /var/www/

Et puis définissez les bits setuid et setgid en procédant comme suit:

sudo chmod u+s /var/www/html
sudo chmod g+s /var/www/html

Puis déconnecté, redémarré apache et essayé de créer un nouveau dossier en utilisant un Mac connecté à mon serveur via IP réseau (IP locale, pas statique).

J'ai couru

ls -l on /var/www/html

La sortie est toujours:

drwxr-sr-x 2 boris   www-data  testsite1

Remarque:

J'ai déjà vérifié ma configuration apache avant et envvars, elle est déjà définie sur:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

EDIT: Je l'ai essayé à l'envers, par exemple en configurant tout ce qui appartiendra à boris: www-data et en configurant ma config apache envvars sur boris: www-data. ÇA A MARCHÉ!

Voici ce que j'ai fait:

Envvars modifiés en

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

Ran

sudo chown -R boris:www-data /var/www/

Redémarré Apachem, créé un nouveau dossier, ajouté mes fichiers, exécuté le plugin, dit maintenant que c'est bon !!!

Boris Chevreau
la source
C'est une mauvaise idée pour la sécurité de définir des fichiers appartenant à l'utilisateur ou au groupe www-data, bien que dans de rares cas, cela puisse être nécessaire pour certains fichiers auxquels le serveur Web doit accéder en écriture. Qu'est-ce que vous essayez de réaliser?
thomasrutter

Réponses:

11

Réponse à la question n ° 1: récursivechown

Un récursif chownvous permettra de définir la propriété et le groupe selon vos besoins /var/www/.... Voici la commande que vous devez utiliser:

sudo chown -R www-data:www-data /var/www/

Avec cela, chaque fichier et dossier sera défini comme tel à l'intérieur avec ces autorisations de propriété.


Demi-réponse à la question n ° 2: setgidbit

Si vous souhaitez que le groupe soit propriétaire par défaut des fichiers, définissez le setgidbit sur le /var/www/htmldossier. De nouveaux fichiers doivent ensuite être créés avec ce groupe comme indiqué sur le dossier.

sudo chmod g+s /var/www/html

Vous devrez cependant définir des autorisations d'écriture si un utilisateur AUTRE que celui qui www-dataécrit dans les répertoires, et cela peut vous ouvrir un trou de sécurité ou deux si vous ne faites pas attention.

Vous vous retrouvez avec des autorisations étant $USER:www-data; pour changer le propriétaire, vous utilisez ensuite un chowncomme indiqué dans la méthode n ° 1 (cela dit, dans une configuration appropriée, vous devez vous fier aux autorisations de groupe, et non aux autorisations de propriétaire de l'utilisateur, pour accéder aux fichiers Web).


Problème avec PHP Wordpress Duplicator

Le problème avec les autorisations est que l'utilisateur / groupe PHP s'exécute selon les besoins d'écriture et de lecture et probablement +xsur le répertoire pour modifier la structure dir et autres.

PHP fonctionne comme www-datapar défaut dans les installations Ubuntu qui utilisent les configurations par défaut. Idéalement, vos étapes ci-dessus devraient résoudre le problème, car vous êtes coincé avec le plugin Duplicator étant un plugin PHP.

Idéalement, vous devriez également consulter la documentation du plug-in Duplicator pour vérifier les autorisations dont il a besoin pour fonctionner et fonctionner.

Thomas Ward
la source
Moi
j'aime la
Ceci est exactement ce que je cherchais!!!! Seul problème: cela n'a pas fonctionné :-( J'ai créé un dossier sur mon mac (c'est-à-dire PAS avec l'ordinateur de bureau ubuntu) en accédant à mon serveur via son IP locale. Lorsque j'ai exécuté ls -l, toujours détenu par boris: www- données: - /
Boris Chevreau
Est-ce parce que j'ai défini la propriété de l'utilisateur sur les fichiers mais pas sur les dossiers? Est-ce simplement parce que le dossier que je crée NE PEUT PAS appartenir automatiquement à www-data: www-data?
Boris Chevreau
Mac est différent de Linux, et si vous n'avez vraiment pas de chance, cette méthode ne fonctionnera pas et vous finirez par devoir jouer avec bien plus que de simples autorisations (telles que les listes de contrôle d'accès et autres choses) afin de configurer les fichiers par défaut . De plus, «n'a pas fonctionné» est ambigu. définir n'a pas fonctionné et inclure des sorties comme modifications à la question.
Thomas Ward
1
setuid appliqué aux répertoires est toujours ignoré sous Linux, iirc
muru
6

Pour vous assurer que tout fichier ou dossier dans lequel vous créez /var/www/htmlest automatiquement détenu par www-data que vous pouvez utiliser inotify, c'est comme cron mais surveille les dossiers / fichiers pour les changements d'attributs, les créations de fichiers, les modifications et bien plus encore.

Installez-le d'abord avec:

$ sudo apt-get install incron

Autoriser root à utiliser incronen ouvrant /etc/incron.allowavec:

$ sudo vim /etc/incron.allow

et ajouter rootau fichier, puis enregistrez et quittez.

Modifiez votre incrontab avec:

$ sudo incrontab -u root -e

et ajoutez-y la ligne suivante:

/var/www/html IN_CREATE /bin/chown -R www-data:www-data /var/www/html/

sauvegarder et quitter.

Désormais, dès qu'un fichier est créé dans le /var/www/htmlrépertoire, il sera automatiquement défini sur www-data:www-data.

Explication de la ligne dans incrontab:

/var/www/html est le répertoire qui sera surveillé.

IN_CREATEsurveillera les fichiers créés. C'est le masque de changement de fichier .

/bin/chown -R www-data:www-data /var/www/html/ est la commande / action à exécuter.

krt
la source
Ils peuvent réaliser quelque chose comme ça sans inotify et setgid - la propriété des utilisateurs ne devrait probablement pas changer souvent et ils peuvent réinitialiser la propriété des utilisateurs eux-mêmes ... ou utiliser des ACL qui peuvent être pénibles
Thomas Ward
Le but de ce serveur est que nous l’utilisions comme "hôte local maître", par exemple pour créer des sites Web locaux et pouvoir éditer / remplacer / déplacer et créer des sites de test à la volée très facilement. Si je dois tout réinitialiser manuellement, cela tue tout le but: - /
Boris Chevreau
Est-ce que cette méthode "incron" est le seul moyen? Je ne comprends pas pourquoi cela doit être si compliqué. Ce que je recherche, c'est un moyen simple pour tous mes ordinateurs du réseau de créer un site Web sur ce serveur. En fin de compte, comme je n'ai pas d'adresse IP statique (la sécurité n'est donc pas un problème), y a-t-il un autre revirement que vous auriez à l'esprit?
Boris Chevreau
merci, fonctionne comme un charme!
trurl
3

Changez la propriété en www-data: www-data de tous les fichiers ET répertoires sous / var / www et / var / www / html

cd /var/www/
chown -R  www-data:www-data /var/www/
  • ./html est impliqué ici (comme faisant partie de / var / www /)
  • -Rle rend récursif (il traversera donc tous les répertoires /var/www/).

Assurez-vous que tout fichier ou dossier que je vais créer avec l'un des utilisateurs de mon réseau appartiendra automatiquement à www-data: www-data

  • Dans / var / www / html / je suppose?

Définissez votre configuration apache sur www-data. Voir/etc/apache2/envvars

# envvars - default environment variables for apache2ctl

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Vous devez redémarrer apache après avoir édité ceci ( sudo service apache restart).

Cela inclut les fichiers créés automatiquement par les scripts php car c'est ce que fait le plugin Duplicator si je ne me trompe pas).

Le problème ici n'est probablement pas le plugin mais le php. L'utilisateur doit être le même processus sous lequel PHP s'exécute. Donc, vous devez probablement définir cela sur www-data aussi si c'est votre utilisateur et votre groupe ( /etc/php5/apache2/php.ini).

Rinzwind
la source
Les valeurs par défaut d'Ubuntu exécutent les processus / travailleurs PHP comme www-data, comme le fait Debian, je crois.
Thomas Ward
En outre, le problème avec /var/www/htmlest également la propriété du groupe et les privilèges de lecture / écriture. L'autre problème est qu'ils veulent que tout fichier créé par un utilisateur ait www-data:www-data, et je suppose que ce sont des utilisateurs du réseau , pas les utilisateurs de Wordpress, vous devez donc rechercher les autorisations de fichiers Linux.
Thomas Ward
Ce sont des utilisateurs de réseau en effet, ce sont des utilisateurs que j'ai créés dans le serveur ubuntu en utilisant sudo useradd -r -s / bin / false USERNAME et qui sont utilisés pour accéder aux dossiers partagés du réseau local
Boris Chevreau
Que se passe-t-il si je modifie la propriété et les autorisations d'écriture de tous les dossiers et fichiers sur boris: www-data, puis modifie les envvars pour qu'apache soit boris: www-data? Est-ce que cela pourrait résoudre le problème puisque chaque fois que je crée un nouveau fichier, il est défini comme propriétaire étant boris: www-data?
Boris Chevreau
2

Je l'ai résolu! Je pense toujours que c'était un problème lié à Apache, mais je ne sais pas si c'est la chose particulière qui a résolu le problème ... Quoi qu'il en soit, voici ce que j'ai fait:

Envvars modifiés en

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

Ran

sudo chown -R boris:www-data /var/www/

Maintenant, cela fonctionne jusqu'à présent. Testera plus loin ...

Boris Chevreau
la source