Page 1 sur 1
[ArchLinux+lighttpd+php-fpm] La commande sudo dans un script php ne renvoit rien
Publié : jeu. 12 sept. 2019, 19:30
par wild dagger
Bonjour,
Après avoir parcouru bon nombre de documentation sur l'usage de commandes nécessitant les droits 'root' j'essaye de passer dans la commande php exe(); des commandes bash utilisant sudo.
Pour ce faire :
- Le serveur lighttpd utilise un nom d'utilisateur dédié (utilisateur : toto ; groupe : users)
- php-fmp est configuré pour utiliser toto et le groupe users
- L'utilisateur 'toto' est déclaré dans la configuration de sudo (momentanément pour mes tests) : toto ALL=(ALL) NOPASSWD: ALL
En conséquent, lorsque j'utilise la commande (loggé toto) dans une console : sudo whoami le résultat de la commande s'affiche (root) sans me demander de mot de passe. Jusqu'ici tout va bien.
Par contre, lorsque je tente un script php contenant
<p><?php echo exec('sudo whoami'); ?></p>
->> page blanche
Sans sudo ->> 'toto' s'affiche
Une idée ?
Re: [ArchLinux+lighttpd+php-fpm] La commande sudo dans un script php ne renvoit rien
Publié : sam. 14 sept. 2019, 10:28
par FoolEcho
Salut,
Il faut regarder dans les logs du serveur... Si sudo est correctement défini, probable que ce ne soit pas "toto" qui te lance le php.
Ceci étant dit, j'attire ton attention que coller du sudo dans un script php est une bien vilaine faille de sécurité

(du genre backdoor...)...
La question sous-jacente est : que cherches-tu à faire vraiment ?
EDIT: ce n'est pas parce que techniquement on peut le faire, qu'il faut se fier à tout bout de code trouvé sur le net.

Re: [ArchLinux+lighttpd+php-fpm] La commande sudo dans un script php ne renvoit rien
Publié : dim. 15 sept. 2019, 00:23
par wild dagger
Salut, merci pour ta réponse
FoolEcho a écrit : ↑sam. 14 sept. 2019, 10:28
Il faut regarder dans les logs du serveur...
Coté lighttpd :
Code : Tout sélectionner
[nf9e-q77 ~]# journalctl -u lighttpd | tail -10
sept. 14 21:14:41 nf9e-q77 systemd[1]: lighttpd.service: Succeeded.
sept. 14 21:14:41 nf9e-q77 systemd[1]: Stopped Lighttpd Web Server.
-- Reboot --
sept. 14 21:15:22 nf9e-q77 systemd[1]: Started Lighttpd Web Server.
sept. 14 23:36:47 nf9e-q77 lighttpd-angel[571]: lighttpd-angel.c.148: child (pid=573) exited normally with exitcode: 0
sept. 14 23:36:47 nf9e-q77 systemd[1]: Stopping Lighttpd Web Server...
sept. 14 23:36:47 nf9e-q77 systemd[1]: lighttpd.service: Succeeded.
sept. 14 23:36:47 nf9e-q77 systemd[1]: Stopped Lighttpd Web Server.
-- Reboot --
sept. 14 23:37:29 nf9e-q77 systemd[1]: Started Lighttpd Web Server.
Coté PHP :
Code : Tout sélectionner
[nf9e-q77 ~]# journalctl -u php | tail -10
-- Logs begin at Tue 2019-09-03 21:17:00 CEST, end at Sat 2019-09-14 23:41:52 CEST. --
-- No entries --
FoolEcho a écrit : ↑sam. 14 sept. 2019, 10:28
Si sudo est correctement défini
J’insiste bien que pour le moment la configuration est
provisoire car je ne souhaite pas avoir toutes les commandes de l'utilisateur root accessibles par php (tu remarqueras que je n'ai pas non plus cédé à la tentation de configurer le serveur avec comme utilisateur 'root' car je préfère utiliser la commande sudo) :
Code : Tout sélectionner
[nf9e-q77 ~]# cat /etc/sudoers.d/toto
toto ALL=(ALL) NOPASSWD: ALL
FoolEcho a écrit : ↑sam. 14 sept. 2019, 10:28
probable que ce ne soit pas "toto" qui te lance le php.
Code : Tout sélectionner
ps -aux | grep "php"
root 570 0.0 0.1 92712 22596 ? Ss 23:37 0:00 php-fpm: master process (/etc/php/php-fpm.conf)
toto 576 0.0 0.0 93336 11972 ? S 23:37 0:00 php-fpm: pool www
toto 577 0.0 0.0 93336 13408 ? S 23:37 0:00 php-fpm: pool www
Comment puis-je savoir si toto n'est pas utilisé lorsque je lance un script php ?
FoolEcho a écrit : ↑sam. 14 sept. 2019, 10:28
Ceci étant dit, j'attire ton attention que coller du sudo dans un script php est une bien vilaine faille de sécurité

(du genre backdoor...)...
EDIT: ce n'est pas parce que techniquement on peut le faire, qu'il faut se fier à tout bout de code trouvé sur le net.
Oui je suis d'accord avec toi. Cependant ,à mon sens, tout dépend du contenu des commandes 'root' autorisées dans le fichier de configuration 'sudoers' (évidement, il ne faudrait pas laisser la commande 'rm' traîner pour éviter un 'rm -R /' dans un script php).
FoolEcho a écrit : ↑sam. 14 sept. 2019, 10:28
La question sous-jacente est : que cherches-tu à faire vraiment ?
Utiliser une commande root dans un script php. (notamment iptables -L) ; mais bon pour le moment si 'sudo whoami' pouvait fonctionner ...
Re: [ArchLinux+lighttpd+php-fpm] La commande sudo dans un script php ne renvoit rien
Publié : dim. 15 sept. 2019, 09:24
par FoolEcho
Les logs du serveur, pas les journaux des services.
Donc a priori du côté de /var/log/lighttpd/ (
https://wiki.archlinux.org/index.php/Li ... ic_logging)
wild dagger a écrit : ↑dim. 15 sept. 2019, 00:23
[nf9e-q77 ~]# ls /etc/sudoers.d/
toto
Code : Tout sélectionner
[nf9e-q77 ~]# cat /etc/sudoers.d/toto
toto ALL=(ALL) NOPASSWD: ALL
Ce fichier a bien été créé et édité avec visudo (qui permet de s'assurer qu'il n'y a pas une coquille quelqconque qui traîne) ?
https://wiki.archlinux.org/index.php/Su ... /sudoers.d
wild dagger a écrit : ↑dim. 15 sept. 2019, 00:23
Utiliser une commande root dans un script php. (notamment iptables -L) ; mais bon pour le moment si 'sudo whoami' pouvait fonctionner ...
Dangereux... Tout pirate ne cherche pas forcément à détruire un serveur. Et donc ce n'est pas forcément la commande elle-même qui est dangereuse mais aussi le degré d'infos qu'elle renvoie.
Et iptables est justement le parfait exemple.

Si c'est dans une optique d'administrer depuis l'extérieur ça peut permettre de connaître les règles de parefeu mises en place sur le serveur, c'est déjà beaucoup trop (de là... soit il existe déjà une porte d'entrée, sinon potentiellement ça donne moyen de les modifier

). Nan, iptables ça doit passer par de la ligne de commande et connexion ssh (même si techniquement c'est faisable -- apparemment tu avais un module web, webmin pour shorewall, mais de ce que j'ai lu rapidement, on tombe sur des failles de sécurité justement, ce qui n'a rien d'étonnant...).
Re: [ArchLinux+lighttpd+php-fpm] La commande sudo dans un script php ne renvoit rien
Publié : dim. 15 sept. 2019, 11:17
par wild dagger
FoolEcho a écrit : ↑dim. 15 sept. 2019, 09:24
Les logs du serveur, pas les journaux des services.
oups ...

Je pensais que journalctl centralisait les logs/erreurs a partir du moment où le service était lancé par systemctl
Code : Tout sélectionner
[nf9e-q77 ~]# cat /var/log/lighttpd/error.log
2019-09-15 00:00:06: (server.c.969) [note] graceful shutdown started
2019-09-15 00:00:06: (server.c.2091) server stopped by UID = 0 PID = 569
2019-09-15 00:00:06: (server.c.1521) server started (lighttpd/1.4.54)
2019-09-15 00:28:12: (server.c.969) [note] graceful shutdown started
2019-09-15 00:28:12: (server.c.2091) server stopped by UID = 0 PID = 1
2019-09-15 10:25:53: (server.c.1521) server started (lighttpd/1.4.54)
Code : Tout sélectionner
[nf9e-q77 ~]# cat /var/log/lighttpd/saccess.log
[15/Sep/2019:10:26:33 +0200] 192.168.0.36 200 "GET /public/ HTTP/1.1" 192.168.0.26 - 2048 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0"
[15/Sep/2019:10:26:47 +0200] 192.168.0.36 200 "GET /public/sudoers.php HTTP/1.1" 192.168.0.26 - 9 "http://192.168.0.26/public/" "Mozilla/5.0 (X11; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0"
Oui.
Code : Tout sélectionner
[toto@nf9e-q77 ~]$ whoami
toto
[toto@nf9e-q77 ~]$ sudo whoami
root
[toto@nf9e-q77 ~]$ iptables -L
Fatal: can't open lock file /run/xtables.lock: Permission denied
[toto@nf9e-q77 ~]$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
FoolEcho a écrit : ↑dim. 15 sept. 2019, 09:24
wild dagger a écrit : ↑dim. 15 sept. 2019, 00:23
Utiliser une commande root dans un script php. (notamment iptables -L) ; mais bon pour le moment si 'sudo whoami' pouvait fonctionner ...
Dangereux... Tout pirate ne cherche pas forcément à détruire un serveur. Et donc ce n'est pas forcément la commande elle-même qui est dangereuse mais aussi le degré d'infos qu'elle renvoie.
Et iptables est justement le parfait exemple.
Si c'est dans une optique d'administrer depuis l'extérieur ça peut permettre de connaître les règles de parefeu mises en place sur le serveur, c'est déjà beaucoup trop (de là... soit il existe déjà une porte d'entrée, sinon potentiellement ça donne moyen de les modifier

). Nan, iptables ça doit passer par de la ligne de commande et connexion ssh (même si techniquement c'est faisable -- apparemment tu avais un module web, webmin pour shorewall, mais de ce que j'ai lu rapidement, on tombe sur des failles de sécurité justement, ce qui n'a rien d'étonnant...).
Rassure toi, j'ai bien compris tes nombreux avertissements
EDIT :
Par un terminal, le script PHP fonctionne (je ne sais pas si ça peut aider à résoudre mon problème) :
Code : Tout sélectionner
[toto@nf9e-q77 ~]$ cat /mnt/RAID60/Public/public/sudoers.php
<p><?php echo exec('sudo whoami'); ?></p>
Code : Tout sélectionner
[toto@nf9e-q77 ~]$ php /mnt/RAID60/Public/public/sudoers.php
<p>root</p>
Re: [ArchLinux+lighttpd+php-fpm] La commande sudo dans un script php ne renvoit rien
Publié : lun. 16 sept. 2019, 18:00
par FoolEcho
Sans doute un problème avec ta configuration serveur.
Pas ma spécialité mais avec apache ça tourne direct...
Y a peut-être un log plus parlant côté php-fpm (/var/log/php-fpm.log d'après la configuration par défaut ?).