[ArchLinux+lighttpd+php-fpm] La commande sudo dans un script php ne renvoit rien
-
- Hankyu
- Messages : 25
- Inscription : mer. 25 juin 2014, 16:59
[ArchLinux+lighttpd+php-fpm] La commande sudo dans un script php ne renvoit rien
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 ?
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 ?
Dernière modification par wild dagger le dim. 15 sept. 2019, 22:38, modifié 1 fois.
- FoolEcho
- Maître du Kyudo
- Messages : 10707
- Inscription : dim. 15 août 2010, 11:48
- Localisation : Basse-Normandie
Re: [ArchLinux+lighttpd+php-fpm] La commande sudo dans un script php ne renvoit rien
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.
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.
«The following statement is not true. The previous statement is true.»
-
- Hankyu
- Messages : 25
- Inscription : mer. 25 juin 2014, 16:59
Re: [ArchLinux+lighttpd+php-fpm] La commande sudo dans un script php ne renvoit rien
Salut, merci pour ta réponse
Coté PHP :
Comment puis-je savoir si toto n'est pas utilisé lorsque je lance un script php ?
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.
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 --
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 ~]# ls /etc/sudoers.d/
toto
Code : Tout sélectionner
[nf9e-q77 ~]# cat /etc/sudoers.d/toto
toto ALL=(ALL) NOPASSWD: ALL
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
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 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.
Utiliser une commande root dans un script php. (notamment iptables -L) ; mais bon pour le moment si 'sudo whoami' pouvait fonctionner ...
- FoolEcho
- Maître du Kyudo
- Messages : 10707
- Inscription : dim. 15 août 2010, 11:48
- Localisation : Basse-Normandie
Re: [ArchLinux+lighttpd+php-fpm] La commande sudo dans un script php ne renvoit rien
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)
https://wiki.archlinux.org/index.php/Su ... /sudoers.d
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...).
Donc a priori du côté de /var/log/lighttpd/ (https://wiki.archlinux.org/index.php/Li ... ic_logging)
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) ?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
https://wiki.archlinux.org/index.php/Su ... /sudoers.d
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.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 ...
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...).
«The following statement is not true. The previous statement is true.»
-
- Hankyu
- Messages : 25
- Inscription : mer. 25 juin 2014, 16:59
Re: [ArchLinux+lighttpd+php-fpm] La commande sudo dans un script php ne renvoit rien
oups ... Je pensais que journalctl centralisait les logs/erreurs a partir du moment où le service était lancé par systemctl
FoolEcho a écrit : ↑dim. 15 sept. 2019, 09:24 Donc a priori du côté de /var/log/lighttpd/ (https://wiki.archlinux.org/index.php/Li ... ic_logging)
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.FoolEcho a écrit : ↑dim. 15 sept. 2019, 09:24Ce 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) ?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
https://wiki.archlinux.org/index.php/Su ... /sudoers.d
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
Rassure toi, j'ai bien compris tes nombreux avertissementsFoolEcho a écrit : ↑dim. 15 sept. 2019, 09:24Dangereux... 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.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 ...
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...).
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>
- FoolEcho
- Maître du Kyudo
- Messages : 10707
- Inscription : dim. 15 août 2010, 11:48
- Localisation : Basse-Normandie
Re: [ArchLinux+lighttpd+php-fpm] La commande sudo dans un script php ne renvoit rien
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 ?).
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 ?).
«The following statement is not true. The previous statement is true.»