Maison > Article > développement back-end > Comment exécuter des commandes externes en tant qu’utilisateur spécifique en PHP ?
Lorsque vous travaillez avec des environnements côté serveur, il est courant de rencontrer des situations dans lesquelles vous devez exécuter des programmes de ligne de commande externes à partir d'un script PHP. Cependant, l'utilisateur par défaut sous lequel PHP s'exécute peut ne pas disposer d'autorisations suffisantes ou d'un accès à certaines applications.
Considérez un scénario dans lequel vous exécutez Apache sur localhost et tentez de contrôler la lecture de Rhythmbox. à partir d'un script PHP exécuté en tant qu'utilisateur www. L'exécution de la commande Rhythmbox-client --pause fonctionne parfaitement lorsqu'elle est exécutée manuellement, mais échoue lorsqu'elle est exécutée en tant qu'utilisateur www car Rhythmbox ne reconnaît pas et n'accède pas à l'instance de l'utilisateur.
Une solution efficace La solution consiste à exploiter la commande sudo, vous permettant d'exécuter le programme externe en tant qu'utilisateur spécifique. Cela implique de modifier le fichier sudoers (visudo) pour accorder à l'utilisateur du serveur Web (par exemple, wwwuser) l'autorisation d'exécuter une commande spécifique :
wwwuser ALL=/usr/bin/rhythmbox-client
Cela restreint la capacité d'Apache à exécuter uniquement la commande nécessaire, évitant ainsi les risques de sécurité potentiels. .
Dans ce cas particulier, Rhythmbox peut toujours ne pas reconnaître l'instance de l'utilisateur puisque PHP s'exécute en tant qu'utilisateur www. Pour résoudre ce problème, créez un script bash qui appelle le client Rhythmbox et récupérez le DBUS_SESSION_BUS_ADDRESS depuis l'environnement de l'utilisateur exécutant :
<code class="bash">#! /bin/bash DBUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/*/environ 2>> /dev/null| sed 's/DBUS/\nDBUS/g' | tail -n 1` if [ "x$DBUS_ADDRESS" != "x" ]; then export $DBUS_ADDRESS /usr/bin/rhythmbox-client --pause fi</code>
Ce script bash peut ensuite être exécuté par PHP en tant que wwwuser, vous permettant de contrôler la lecture de Rhythmbox. en tant qu'utilisateur depuis votre application PHP.
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!