[ArchLinux+lighttpd+php-fpm] La commande sudo dans un script php ne renvoit rien

Questions et astuces concernant l'installation et la configuration d'archlinux
wild dagger
Hankyu
Messages : 23
Inscription : mer. 25 juin 2014, 16:59

[ArchLinux+lighttpd+php-fpm] La commande sudo dans un script php ne renvoit rien

Message par wild dagger » jeu. 12 sept. 2019, 19:30

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 ?
Dernière modification par wild dagger le dim. 15 sept. 2019, 22:38, modifié 1 fois.

Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10518
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

Message par FoolEcho » sam. 14 sept. 2019, 10:28

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. :-?
«The following statement is not true. The previous statement is true.» :nage:

wild dagger
Hankyu
Messages : 23
Inscription : mer. 25 juin 2014, 16:59

Re: [ArchLinux+lighttpd+php-fpm] La commande sudo dans un script php ne renvoit rien

Message par wild dagger » dim. 15 sept. 2019, 00:23

Salut, merci pour ta réponse :chinois:
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 ~]# ls /etc/sudoers.d/

toto

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 ...

Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10518
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

Message par FoolEcho » dim. 15 sept. 2019, 09:24

Les logs du serveur, pas les journaux des services. :mrgreen:
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 :sifflote2: ). 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.» :nage:

wild dagger
Hankyu
Messages : 23
Inscription : mer. 25 juin 2014, 16:59

Re: [ArchLinux+lighttpd+php-fpm] La commande sudo dans un script php ne renvoit rien

Message par wild dagger » dim. 15 sept. 2019, 11:17

FoolEcho a écrit :
dim. 15 sept. 2019, 09:24
Les logs du serveur, pas les journaux des services. :mrgreen:
oups ... :mrgreen: 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"
FoolEcho a écrit :
dim. 15 sept. 2019, 09:24
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
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 :sifflote2: ). 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 :wink:

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>

Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10518
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

Message par FoolEcho » lun. 16 sept. 2019, 18:00

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 ?).
«The following statement is not true. The previous statement is true.» :nage:

Répondre