Bonjour,

Voilà je vous expose mon problème. Je me suis fait un serveur de développement afin de travallier sur mes projets de n'importe où. Mais voilà je rencontre un problème avec les droits. Je vous explique.

J'ai donc crée un serveur sous débian où j'ai activé le user-mode dir afin d'utiliser les dossier des utilisateurs en tant que dossier web pour mes sites. Je crée donc un utilisateur pour chaque projet.

Le problème c'est que j'aimerais avoir un utilsateur unique pour travallier sur chaque projet tous en laissant l'utilisateur apache (www-data) pouvoir lire et écrire dans ces dossiers.

J'ai donc crée un utilisateur web et rajouter l'utilisateur www-data dans le groupe web. Mais si je reste sur cette configuration j'ai un problème de droit toujours. Car il faut que je donne par exemple les mêmes droit au groupe cas l'utilisateur en questions . Exemple :

  • dossier www avec les droits 751 donc l'utilisateur tous les droits mais le groups seulement en lecture et exécution. Ce qui pose déjà un problème ne soit. Donc je serai obliger de changer les droits à la mains. Et une fois le projet fini de rechanger les droits.
    Cette procédure est contraigniant je trouve.

J'ai donc voulu crée un utilisateur web avec les droits root mais cela pose problème. Car je ne peut du coup pas me connecter avec cette utilisateur vu que je bloque la connexion ssh pour l'utilisateur root.

Est ce que quelqu'un aurait une autre solutions à me proposer. ?

Merci par avance.

11 réponses


ben je sais pas trop comment tu déplois tes projets, mais moi j'utilise capistrano.

et comme je déploie avec git depuis l'utilisateur root, par defaut, mes dossiers et fichiers appartiennent a root.

Sauf que : après chaque déploiement, je reset les droits www-data au projet déployé.

et comme tous les fichiers de deploiement appartiennent a un projet, tu peux très bien dire que tel ou tel projet c'est tel ou tel user.

[...]
# Permissions
set :www_user, 'www-data'
set :www_group, 'www-data'
set :www_perms, '775'
[...]
namespace :deploy do

    desc "Set Rights"
    task :set_rights do
        on roles(:web) do
            execute [
                "cd #{fetch(:deploy_to)}current",
                "chown -R #{fetch(:www_user)}:#{fetch(:www_group)} .",
                "chmod -R #{fetch(:www_perms)} .",
            ].join(' && ')
        end
    end
    after :finished, :set_rights
end

si tu utilise des dépots git, je te recommande vivement cet outil :)
https://www.grafikart.fr/formations/serveur-linux/capistrano

Je déplois mes projets à la mano. C'est la que je vois que j'ai quelque lacune à certains niveau. Je travail actuelement pour un sociéte mais je me trouve être le seul développeur donc je fait avec le peut de connaissant que j'ai. Je vais fouillier de ce coter et revenir vers toi si des questions me viennent.

Merci en tous cas pour l'aide.

P.S : Un exemple me vient là. Car je viens de renconter ce problème. Comment procède tu quand tu reprend un projet déjà en cours. Exemple, j'ai un client qui m'a demander d'optimiser sont site sous wordpress mais aussi de changer et d'apporter quelque nouvelle fonctionnalité. J'ai donc fait un backup de son site afin de tester ce que je peux faire pour apporter un plus à sont site.

Mais quand je vais finir mes testes je vais devoir mettre le site hors-ligne un soir. Faire un backup apporter mes modifications et remonter tous cela. Je suis persuadé qu'il doit y avoir mieux à faire mais comment ?

Pour ton utilisateur web, tu dois pouvoir lui mettre un umask 002
ce qui donnera des droits 664 à tes fichiers lors de leur création

ben moi quand je doit faire de l'interuption de service c'est uniquement en cas de migration de DNS. l'interruption de service c'est malllll ;)

pour wordpress, drupal etc, je connais pas trop, mais tu doit pouvoir comme tout autre projet web te creer un autre site sur une machine, creer ton nouveau vhost avec par exemple

monsite.com -> monsite2.com

et mettre une entrée dans ton fichier hosts. (/etc/hosts ou c/windows/system32/drivers/etc/hosts (un truc comme ca))
127.0.0.1 monsite2.com

du coup pour cet exemple monsite2.com ne sera accessible que pour le localhost de ta machine, mais tu peux très bien déclarer une IP d'un serveur distant sans soucis. ca sera résolu par ton DNS et non pas les DNS de google etc...

tu fait ton taf,

et après soit tu change les DNS pour qu'ils pointes sur un nouveau serveur (et tu fait une interruption de service de 3h le temps que les DNS migrent) soit tu fait pointer ton vhost sur ton nouveau site et tu reload nginx. si tout se passe bien, il n'y aura meme pas d'interuption de service... :)

enfin bref, ca c'est dans la théorie. dans la pratique, c'est tjrs un peu plus délicat... ^^ mais l'interruption de service, c'est malllll ;)

J'utilise dploy personnelement, ça évite justement d'avoir capistrano d'installer sur le serveur distant (en l'ocurrence, ton client n'aura surement pas capistrano d'installer). Tu as une vidéo sur grafikart il me semble. C'est assez basique mais ça rempli très bien sa fonction.

Tu backup le projet distant (en considérant qu'il n'a pas git), tu créé le git en local, tu fais tes modifs, tu commits comme il faut, et tu envois sur le serveur via dploy (il modifiera uniquement les fichiers que tu as modifié). Idéalement, il faudrait un sous domaine pour faire tes tests dans les mêmes config (genre preprod.site.com) ou, si tu es sûr de toi, utiliser vagrant/docker pour reproduire strictement la config du serveur distant pour faire tes tests dans les mêmes conditions et envoyer directement. Sachant qu'au pire, avec Git en local, tu reviens en arrière et tu "redploy" pour revenir à l'état initial.

Concernant la question initiale des droits, j'ai pas bien compris l'explication, je n'ai à priori jamais rencontré ce genre de soucis.

Merci pour vos retour. J'ai des pistes que je vais m'empresser de tester. Pour mon explications, je te donne un exemple.

J'ai deux projet qu'on va appeler "monsite1" et "monsite2". Ils se trouvent à la racine "/home/site1/" et "/home/site2/". Dans chaque projet j'ai une dossier "public-html" qui contient les sites en questions. J'ai pour cela activer le mode userdir.

Pour mon site 1, j'ai l'utilisateur "site1" qui à les droits de lecture d'écriture et d'exécution sur le dossier "/home/site1/public-html".
Pour mon site 2, j'ai l'utilisateur "site2" qui à les droits de lecture d'écriture et d'exécution sur le dossier "/home/site2/public-html".

J'aimerai avoir un utilisateur commun pour les deux afin de pouvoir développer chaque projet sur mon IDE à distance.

Voilà en gros le besoin. J'ai tester quelque truc que j'ai écrit dans le premier post mais qui ne conviennent pas car les droits doivent soit être changer pour faire ceci. Soit j'ai pas les droits adéquate entre le propriétaire des fichiers et dossier que le groupe.

Voilà j'espère avoir était un peut plus claire.

Et donc, si tu n'avais pas ce user en commun tu n'auras pas de soucis ?
Non parce que je ne comprends pas en quoi ça t'aide d'avoir un user en commun plutôt que 2 ? Ton IDE est théoriquement capable d'avoir une config par projet/site, donc pour toi, c'est transparent.

Oui mais je voulais un en commun pour avoir la possibilité de le faire de n'importe qu'elle machine (la mienne ou autre) et donc éviter de retenir 50 couple login/mdp.

Bonjour,

Je pense à cela les différente solutions proposé prennent en charge comment la base de données ? Merci pour votre retour.

Bonne journée.

je vais parler de capistrano, mais je pense que c'est pareil avec dploy, tu peut executer des commandes "custom" a l'execution de ton script.

Et comme presque tous les framework php se basent sur un schema de bdd, il te suffit d'appeler la commande qui executera ta migration a la fin du déploiement.

si tu n'a pas de schema de bdd, ben... soit tu te fait le script de migration a la mano, (ALTER TABLE user ADD COLUMN [...]) soit tu te rajoutes tes entrées avant ou après ton déploiement. sachant que tu peux ajouter des collumns avant ton déploiement, et en drop après.

Non Dploy est très très basique, il n'a pas réellement d'accroche sur le serveur, il ne fait qu'envoyer des fichiers.

Pour info, Phinx permet d'utiliser un système de migration sans avoir à utiliser un Framework particulier (à ne pas confondre avec Sphinx)

Donc oui, après, il faut aller taper sa petite commande pour finaliser le déploiement, mais ça retire une dépendance disons ;)