Salut la foule
Je me torture l’esprit avec un problème de droits depuis un moment, j’en suis venu à la conclusion que je devais embêter les braves utilisateurs de ce forum pour conserver un peu de ma santé mentale. Rien de spécifique à Debian par contre, ça serait la même sur une autre distrib Linux.
La situation actuelle :
Actuellement, sur les serveurs web en production, j’utilise les droits suivants sur les sous répertoire de “/var/www/” :
Pour les répertoires :
Pour les fichiers :
L’idée derrière tout ça: pour raison de sécurité, “www-data” a le minimum de droits nécessaires pour faire son boulot, à savoir parcourir les répertoires et lire. Ponctuellement il peut avoir le droit d’écrire dans un répertoire donné.
“grpadmin” est un groupe contenant les utilisateurs ayant le droit d’écrire ou de modifier, à savoir des collègues dev qui demandent de mettre leurs gros doigts sur mes beaux serveurs pour intervenir sur les fichiers (principalement de la modification de conf, parfois du debug).
Grace au setgid, tout fichier créé dans “/var/www/repertoire/” appartient au groupe “grpadmin”, ce qui facilite l’utilisation. De plus cette configuration évite de donner des droits sudo à tout le monde, ce qui n’est pas envisageable. Il est à noter que les dev se connectent via FileZilla en SFTP (par clef SSL bien entendu). Ils sont peu nombreux à avoir connaissance de l’existence du shell.
Dans le rare cas de la création d’un fichier par un dev (les publications des sites étant scriptées et lancées en root avec sudo), les droits seront de type “user:grpadmin” (pas possible de mettre un héritage d’appartenance sur le user avec le SetUID, malheureusement), ce qui oblige un utilisateur avec les droits sudo de repasser faire un chown. Comme c’est très rare ça n’est pas vraiment problématique.
Cette configuration tourne depuis un moment et me va bien au teint.
Le soucis, donc, puisqu’il y en a un :
Un nouveau besoin pointe le bout de son nez, celui d’envoyer via une connexion de type SCP des fichiers d’un serveur à un autre, la destination étant “/var/www/repertoire”. Un utilisateur “transfert” est mis en place, et ajouté dans le groupe “grpadmin”.
Forcément avec les droits actuels, les fichiers envoyés appartiennent à “transfert:grpadmin”, et ne sont donc pas lisibles par l’utilisateur “www-data”.
Les solutions à ce problème spécifique trouvées sur le net consistent à mettre l’utilisateur “transfert” dans le groupe www-data, avec les droits “drwxrws— www-data:www-data” sur le dossier parent (les fichiers écrits par transfert étant donc lisibles par le groupe www-data), mais je trouve cette solution assez peu élégante, et surtout elle met par terre ma gestion de droits.
Une alternative serait de joindre www-data au groupe “grpadmin”. Les droits spécifiques à l’utilisateur passant d’abord, www-data n’aurait pas plus le droit de supprimer ou d’écrire les fichiers avec les droits “r–rwx— www-data:grpadmin”, ce qui est une bonne chose. Par contre l’utilisateur “transfert” écrira toujours des fichiers appartenant à “transfert:grp-admin”, on a donc de base des fichiers supprimables/éditables par www-data, à moins venir modifier a posteriori les droits, ce qui n’est pas terrible (soit à la main soit en donnant des droits sudo à l’utilisateur “transfert”… bof bof).
Il serait techniquement possible d’utiliser directement l’utilisateur “www-data” pour faire les transferts, mais c’est d’une laideur sans nom.
Ma question est donc la suivante : puis-je faire cohabiter la gestion des droits actuelle et le transfert de fichiers de serveur à serveur ? Il y a-t-il un compromis à faire quelque part ? Dois-je casser mon système, mettre à tout le monde des droits sudo et retrouver mes serveurs en feu tous les jours ? Pourquoi tant de haine ? Le chmod 777 est-il la solution à tous mes maux ?
En remerciant chaleureusement les deux personnes à avoir lu jusqu’ici (et désolé pour la tartine).