Bonjour,
Je cherche à lancer un exécutable écrit en C depuis un serveur PHP sous Apache. L'objectif final est d'ajouter un utilisateur depuis l'interface Admin d'un site PHP.
Je suis le principe d'une SOLUTION "EXECUTABLE" décrit dans ce post.
Je ne trouve pas pourquoi cela ne fonctionne pas, et à vrai dire, je ne sais pas si le problème vient du code source en C, de compilation, de droits chmod, de code PHP ou même de config Apache .... ??
(Donc je poste le même message dans le forum PHP)
Code Source "test_source.c": OK
Compilation en ligne de commande : OKCode:
1
2
3
4
5
6
7
8
9
10 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char cmd[1024]; sprintf(cmd, "adduser -H %s", argv[1]); system(cmd); return 0; }
Les packages gcc make, glib, libstdc++, binutils et libc-dev sont installés sur la machine Linux
Pas d'erreur ni de warning retourné à la compilation en ligne de commande.Code:gcc -o c_add_user test_source.c
Attribution des droits à l'exécutable "c_add_user": OK
Les essais avec
etCode:chmod 0777 c_add_user
Code:chmod 4777 c_add_user
ne change pas le résultat de l'éxecution en ligne de commande, ni le résultat du retour HTML par le serveur.Code:8 -rwsrwxrwx 1 admin administ 5.9k Dec 12 15:49 c_add_user*
Execution en ligne de commande: OK
qui m'ajoute bien le nouvel utilisateur "testcompil", vérifié par unCode:./c_add_user testcompil
Code PHP "test_shell_linux.php" : NON OKCode:cat /etc/passwd
J'appelle la page :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <?php session_start(); header("Content-Type: text/html"); echo "<br/>Exec c.exe :"; $command = "./c_add_user"; $param= " client_test_4_test" ; if (is_file($command)) { exec($command.$param, $output); echo "<br/>result: $output"; } else{ echo "fichier non trouvé"; } ?>
https://www.mon_domain.fr/admin/test_shell_linux.php
Et là, je vérifie en ligne de commande si le nouvel utilisateur a été ajouté, mais non.
Un avis éclairé m'aiderait. Merci d'avance.