Exécuter des commandes root via PHP
Vous avez exprimé le désir d'exécuter des commandes avec les privilèges root à partir de votre code PHP sur votre serveur CentOS. Explorons le problème et présentons des solutions potentielles.
Le problème :
Vous avez tenté d'utiliser la fonction exec() pour redémarrer le service sshd, mais cela nécessite accès root, qui n'est pas accordé à l'utilisateur Apache. Bien que vous ayez essayé des solutions telles que l'exécution d'Apache avec les privilèges root ou la modification de votre fichier sudoers, elles n'ont pas résolu le problème.
Solution utilisant Binary Wrapper (avec Suid Bit) :
Définir la propriété et les autorisations : Assurez-vous que l'utilisateur root est propriétaire du script et qu'il dispose des autorisations suivantes :
Créer un wrapper binaire : Créez un wrapper binaire qui exécutera votre script shell avec les privilèges root. Voici un exemple de wrapper :
# cat > wrapper.c <<CONTENT #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main (int argc, char *argv[]) { setuid (0); system ("/bin/sh /path/to/php_shell.sh"); return 0; } CONTENT
Compiler et définir les autorisations : Compilez le wrapper binaire et définissez-le avec le bit suid :
Ce wrapper php_root exécutera les commandes spécifiées dans php_shell.sh avec les privilèges root lorsqu'il est appelé.
Solution alternative :
Au lieu d'utiliser un script shell externe, vous pouvez intégrer les commandes directement dans le wrapper binaire. Remplacez simplement le contenu de l'étape 3 par les commandes que vous souhaitez exécuter avec les privilèges root.
Attention :
Il est essentiel d'utiliser des chemins absolus vers le script que vous souhaitez exécuter. empêcher les utilisateurs malveillants d'exploiter le binaire pour exécuter des commandes arbitraires.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!