web-dev-qa-db-fra.com

L'exécution d'un script en tant qu'autre utilisateur cause toujours des problèmes d'autorisation.

Je dois exécuter ce script avec PHP. L'utilisateur www-data ne peut pas le faire, j'ai donc modifié le fichier sudoers:

www-data ALL=(user2) NOPASSWD: /home/user2/bin/test.sh

Le script est exécuté en php avec cette commande:

Sudo -u user2 /home/user2/bin/test.sh

Voici le script test.sh:

#!/bin/bash
#Stopping previous server
screen -S minecraft -X stuff "stop^M"
#deleting the map file
rm -Rf /home/minecraft/Serveur/*/  
# deleting the properties file
rm -f /home/minecraft/Serveur/server.properties 
#new server properties
cp /home/minecraft/MapsEtServ.prop/Bloody/server.properties /home/minecraft/Serveur/server.properties
#new map
cp -R /home/minecraft/MapsEtServ.prop/Bloody/'Bloody Mess v1.0' /home/minecraft/Serveur/'Bloody Mess v1.0' 
#launching the game server
screen -dmS minecraft Java -Xmx4096M -Xms4096M -jar  /home/minecraft/Serveur/minecraft_server.jar nogui 

Les autorisations /home/minecraft/Serveur et /home/minecraft/MapsEtServ.prop sont définies sur 777.

Que se passe-t-il lorsque j'exécute le script via SSH: tout fonctionne correctement.

Mais quand je l'exécute avec php: l'écran est arrêté, les fichiers sont collés et l'écran est lancé. Mais il y a un problème: le serveur de jeu n'est pas en cours d'exécution.

EDIT: le problème est résolu! Je viens d'ajouter un cd/home/minecraft/Serveur/au début du script et tout fonctionne parfaitement :)

1
Babajaga

Depuis le terminal, à l'aide de la commande Sudo visudo, éditez le fichier sudoers et ajoutez la ligne suivante exactement telle qu'elle:

www-data ALL=(ALL) NOPASSWD: /home/user2/bin/test.sh

Voir https://help.ubuntu.com/community/RootSudo#Allowing_other_users_to_run_Sudo dans ce sens.

Ensuite, en php, utilisez uniquement la commande Sudo /home/user2/bin/test.sh. Par exemple:

<?php Shell_exec('Sudo /home/user2/bin/test.sh'); ?>
2
Radu Rădeanu