Comment donner aux fichiers et répertoires créés par FTP les autorisations correctes pour qu'Apache puisse les lire et les écrire?

8

Je suis plus une personne Windows, alors veuillez excuser mon ignorance avec cette question Linux de base.

Je m'occupe d'un serveur Linux (Debian) sur lequel seulement Apache2 et vsftp sont installés.

Ce qui se passe, c'est que je me bats constamment contre qui possède les fichiers et les dossiers et que je n'arrive pas à faire les choses correctement.

Voici ma compréhension jusqu'à présent:

  • L'utilisateur www-data doit posséder les dossiers et les fichiers car tous les fichiers sous / var / www / html exécutent des scripts qui les obligent à écrire dans leur dossier. Et bien sûr, il doit être en mesure de servir les pages via http.
  • Mon utilisateur ftp (appelons-le ftpuser ) a également besoin d'une autorisation pour écrire dans le dossier / var / www / html (récursif) car j'ai besoin de pouvoir télécharger de nouveaux fichiers.

Dans cet esprit, j'ai créé un groupe appelé ftpandwww et j'ai regroupé tous les dossiers et fichiers de ce groupe. Cela a fonctionné dans une certaine mesure ...

Je suis presque au bon endroit, sauf pour le fait que tous les nouveaux dossiers créés à l'aide de mon client FTP ont les mauvaises autorisations (que je peux corriger en les modifiant sous le client FTP), mais www-data ne peut pas y écrire car ils appartiennent à ftpuser et je finis par devoir SSH et exécuter un chown au groupe ftpandwww afin qu'ils soient tous les deux heureux.

Comment puis-je faire en sorte que tous les nouveaux dossiers que je crée sous FTP aient les autorisations correctes (774) et appartiennent automatiquement au groupe ftpandwww pour que je puisse les télécharger et les servir via le Web (avec des autorisations d'écriture) sans avoir à entrer et à chown tous les de nouveaux dossiers et fichiers à chaque fois?

oméga1
la source

Réponses:

10

Utilisez les autorisations SetGID sur le répertoire racine Web et propagez-les aux enfants.

Lorsque vous appliquez SetGID sur un répertoire, tous les nouveaux éléments de ce répertoire seront créés avec le même groupe que leur parent, indépendamment de l'appartenance au groupe par défaut de l'utilisateur.

Pour appliquer SetGID à un objet de système de fichiers, utilisez chmodavec un 2 devant le code d'autorisation.
(par exemple: 740 => 2740).

J'utilise SetGID sur un grand nombre de mes partages Samba, afin que les fichiers aient toujours le groupe propriétaire Userset que tout membre du groupe puisse lire les fichiers (j'utilise généralement 2750pour que seul l'utilisateur propriétaire puisse écrire dans le fichier).

Dans votre cas, exécutez quelque chose comme ceci (remplacez XXX par les autorisations souhaitées):

sudo chown -R  root:ftpandwww /var/www
sudo chmod -R 2XXX /var/www 

Ensuite, les nouveaux fichiers et dossiers sortiront avec la propriété comme ftpuser:ftpandwww.

Éditer:

En fonction de votre cas d'utilisation, SetGID est probablement suffisant pour résoudre votre problème, mais si vous rencontrez des problèmes persistants où l'un ou l'autre utilisateur est refusé en écriture, en raison d'une autorisation de groupe incorrecte (mais la propriété est correcte), votre meilleur pari est de définir un UMASK personnalisé pour l'utilisateur qui crée les fichiers .

Si vous avez des difficultés à définir l'UMASK pour l'utilisateur (car il s'agit d'un démon), consultez ce fil sur les options de configuration de l'UMASK d'un utilisateur démon .

Je recommanderais le masque 007si vous voulez que les membres du groupe puissent écrire et supprimer des fichiers, et aucun privilège pour les non-propriétaires.

Frank Thomas
la source
Merci, je vais essayer ceci, lorsque vous mentionnez que tous les fichiers et dossiers auront cette propriété ftpuser: ftpandwww www-data les servira-t-il toujours et aura-t-il des autorisations (via un script) pour réécrire dans les dossiers également? Merci encore.
omega1
Le propriétaire-utilisateur réel sera probablement l'utilisateur exécutant le processus, à moins qu'il n'utilise l'authentification locale (mais cela dépend entièrement de l'application). Quoi qu'il en soit, la réponse à votre question dépend du XXX que vous choisissez d'utiliser. puisque wwwdata et ftpdata sont dans le même groupe, si vous donnez 770, alors oui, les deux comptes pourront écrire dans les objets. si vous lui avez donné 740 cependant, seul l'utilisateur propriétaire pourrait écrire, mais n'importe quel membre de ftpandwww pourrait lire. Le fait est que vous utilisez des autorisations de groupe plutôt que des autorisations d'utilisateur pour ces opérations.
Frank Thomas