Forum Linux.débutant Sudoers et mot de passe

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
28
nov.
2016

Bonjour,

J'aimerais arrêter mon service httpd via un script qui est executer via du PHP sur une page web (qui est héberger en local)

Je tiens à préciser, avant d'étaler mes procédures, que je suis sous CentOS 7.

Après m'être documenter à droite et à gauche sur le fichier /etc/sudoers, j'ai essayé de l'adapter pour mon projet personnel mais cela ne fonctionne pas.

Mon user httpd ci-dessous:
user-apache
Ma config sudoers avec visudo:
Visudo

Le soucis est que lorsque je veux exécuter la commande:
/bin/systemctl stop httpd.service via un exec('/bin/systemctl stop httpd.service') en PHP, cela ne fonctionne pas.

Par conséquent, j'ai essayé avec l'utilisateur "apache" directement via SSH.
sudo -u apache /bin/systemctl stop httpd.service

A ce moment là, j’apprends que la commande est bien effectuer mais il attend le mot de passe root or j'ai configurer le fichier sudoers pour qu'il ne me demande pas de passwd lors de l’exécution de cette commande.

Un indice ?

Merci d'avance !

  • # si c'était bien configuré

    Posté par  (site web personnel) . Évalué à 2.

    alors la mot de passe ne serait pas demandé

    su - apache
    puis ta commande,

    ça doit fonctionner sans mot de passe en ligne de commande avant de vouloir le faire en php via apache.

    Système - Réseau - Sécurité Open Source - Ouvert à de nouvelles opportunités

    • [^] # Re: si c'était bien configuré

      Posté par  . Évalué à 1.

      Merci de m'avoir répondu ! :)

      Quand j'exécute su - apache /bin/systemctl stop httpd.service, on me dit que ce compte n'est pas valide.

      Je tiens à préciser qu'Apache fonctionne bel et bien ^

      • [^] # Re: si c'était bien configuré

        Posté par  (site web personnel) . Évalué à 2. Dernière modification le 28 novembre 2016 à 18:08.

        getent passwd apache
        

        C'est certain que c'est apache l'utilisateur des pages web ?
        Pas de shell ? ou /bin/false ?
        ( www-data chez Debian )

        C'etait ça qu'il fallait tester:

        su - apache

        puis
        sudo /bin/systemctl stop apache.service
        ```

        
        

        Système - Réseau - Sécurité Open Source - Ouvert à de nouvelles opportunités

  • # SeLinux

    Posté par  . Évalué à 2.

    Tu n'aurais pas selinux activé ?
    httpd n'a pas a démarrer/arreter des service.

    autre point :
    sudo -u apache /bin/systemctl stop httpd.service
    tu va executer /bin/systemctl stop httpd.service en utilisateur apache, pas en root.

    Ce que tu veux c'est passer root sans mot de passe avec l'utilisateur apache pour executer ta commande.
    Donc en root tu passe en user apache :
    su - apache -s /bin/bash
    Puis tu teste ton sudo :
    sudo /bin/systemctl stop httpd.service

    Sinon c'est quoi l’intérêt ?

    • [^] # Re: SeLinux

      Posté par  . Évalué à 1.

      Alors oui, le selinux était activé, je l'ai désactiver suite à la lecture de votre répondre :)

      Merci ! ça a fonctionner ! Le service httpd s’arrête bel et bien :)

      Il me reste plus qu'a trouver la solution pour l’exécuter via un script avec PHP :)

      • [^] # Re: SeLinux

        Posté par  . Évalué à 1.

        A mon avis tu devrais le réactiver et comprendre comment le régler il y a pas mal de ressources sur le web qui explique comment ajouter des droits selinux a httpd pour faire ce que tu veux tout en gardant la sécurité apporté par SeLinux ;)
        par exemple, en anglais : https://wiki.centos.org/HowTos/SELinux
        Tu peux trouver d'autre ressource sur google en cherchant 'configurer selinux'

        PS : Personnellement pendant des année je l'ai désactivé parce que c'était chiant et que je savait pas comment ça marchait, mon boulot m'a forcé a apprendre, c'était pas si insurmontable et maintenant je le règle comme il faut pour faire ce que je veux.

        Après tu peux aussi mettre un cronjob qui vérifie l’existence d'un fichier sur ton serveur toute les minutes et ferme le service, ça sera plus sécurisé qu'autoriser apache a faire des choses en root.
        Ou bien si le but est de te prémunir d'attaque, utiliser du port knocking.

        Bon courage.

        • [^] # Re: SeLinux

          Posté par  . Évalué à 1.

          Merci beaucoup, je vais étudier toute les possibilités de sécurité lié à mon système.

          Merci pour la doc sur SeLinux !

  • # Une piste peut-être

    Posté par  . Évalué à 2.

    Ça n’aurait pas un rapport avec :

    https://bugzilla.redhat.com/show_bug.cgi?id=1020147

    ?

    Par conséquent, j'ai essayé avec l'utilisateur "apache" directement via SSH.
    sudo -u apache /bin/systemctl stop httpd.service

    Est-ce que tu as la même chose si tu fais :

    ssh -l apache -t host 'sudo -n /bin/systemctl stop httpd.service'

    C’est juste une idée…

    • [^] # Re: Une piste peut-être

      Posté par  . Évalué à 1. Dernière modification le 29 novembre 2016 à 09:58.

      Il me demande toujours le passwd d'apache :/

      • [^] # Re: Une piste peut-être

        Posté par  (site web personnel) . Évalué à 2.

        que disent les logs ? ( apache ( access.log et error.log et système )
        En cgi sous un autre uid ce sera moins pire que l'uid sur server web.

        Système - Réseau - Sécurité Open Source - Ouvert à de nouvelles opportunités

  • # Faille de sécurité !

    Posté par  . Évalué à 2.

    Attention, si tu veux déployer ton script PHP ailleurs qu'en local je te recommande fortement de supprimer cette possibilité !!

    En effet, tu veux utiliser la commande exec()`qui présente une énorme faille de sécurité sur un serveur !

    Après si c'est effectivement uniquement en local, c'est à tes risques et périls.

    • [^] # Re: Faille de sécurité !

      Posté par  . Évalué à 1.

      Il y aurait-il des documentations concernant l'exécution de script via PHP de manière sécurisé ?

      Merci ! :)

      • [^] # Re: Faille de sécurité !

        Posté par  . Évalué à 1.

        Bonjour,

        De manière générale il n'est pas bon de lancer l'exécution de script via PHP, cela présente de multiples failles et présente donc un risque pour le serveur.

        Après je n'ai pas de documentation la dessus, je le sais par ma formation et mon expérience professionnelle.

        • [^] # Re: Faille de sécurité !

          Posté par  . Évalué à 1.

          Bien, je vous remercie pour ces informations.

          Je vais essayer de trouver des solutions sécurisé à l'exécution des scripts.

  • # je vais dire une betise mais...

    Posté par  . Évalué à 2.

    à moins d'avoir monter ton PHP dans un autre service, je ne vois comment,
    si tu arretes ton serveur apache, avec ton script PHP,
    comment tu vas demarrer apache, vu que le PHP est generalement executé par apache ?

    • [^] # Re: je vais dire une betise mais...

      Posté par  . Évalué à 1.

      Le but étant de down le service httpd :)
      C'est volontaire et voulu ! :p

      • [^] # Re: je vais dire une betise mais...

        Posté par  . Évalué à 3.

        oui, ca j'ai bien compris
        mais si tu le down, tu perds tout controle sur la machine

        comment tu le demarres alors à distance ?

        parce que si tu as une autre methode pour le demarrer à distance, autant utiliser la meme methode pour faire le stop.

  • # Merci!

    Posté par  . Évalué à 2.

    Merci à tous !

    J'ai réussi grâce à vous et en plus j'ai eu de la documentation sur la sécurité !

    Vous êtes géniaux !

    Merci infiniment !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.