Question Exécuter un script + un fichier de bureau en tant que racine sans invite


J'ai deux fichiers, l'un étant un fichier de bureau, l'autre étant un script shell. Le fichier de bureau est destiné à ouvrir le script shell et à l’exécuter dans une interface graphique xTerm en tant que root. sans avoir besoin de "mot de passe sudo".

On m'a dit d'enlever sudo complètement du script shell, laissant ce. Comme le programme avait besoin d'un accès root, j'ai édité mon fichier / etc / sudoers comme suit:

david ALL=(ALL) NOPASSWD:/home/david/upgrade.sh
david ALL=(ALL) NOPASSWD:/home/david/Desktop/Upgrade.desktop

Comme j'ai été chargé de, et de là, configuré le fichier de bureau. J'ai commencé avec ce qui suit:

xterm -e sudo sh -p /home/david/upgrade.sh

Mais quand j'ai exécuté le fichier de bureau, il demandait toujours mon mot de passe. Je pensais que le sudo dans le fichier de bureau pourrait être le problème, mais en le supprimant, la fenêtre xTerm ne s'ouvre plus. Comment puis-je exécuter ce script shell à partir du fichier de bureau sans entrer mon mot de passe?


0
2017-10-03 20:56


origine


Ok deux ou trois choses ... - GrannySez


Réponses:


Tout d'abord, supprimez votre ligne sur le fichier de bureau de /etc/sudoers, ce n'est pas nécessaire.

Deuxièmement, vous avez configuré la commande exacte /home/david/upgrade.sh pour courir avec NOPASSWD, ne pas sh -p /home/david/upgrade.sh que vous essayez de courir dans le xterm fenêtre. Vous devez exécuter la commande configurée pour bénéficier de la NOPASSWD réglage:

xterm -e sudo /home/david/upgrade.sh

Au fait, le shebang de votre fichier script spécifie /bin/bash en tant qu'interprète, mais vous avez tenté de l'exécuter avec /bin/sh. Le résultat est le même tant que vous n'utilisez pas les fonctionnalités spécifiques à Bash, mais vous devez éviter de telles contradictions. Cela n'a rien à voir avec sudo et NOPASSWD bien que.


En tant que bonbon supplémentaire, il peut être intéressant de pouvoir appeler votre script directement sans sudo et il élève automatiquement ses privilèges s'il ne s'exécute pas déjà en tant que root. J'ai écrit un petit extrait de code Bash pour cela une fois, il peut simplement être ajouté en haut de tout script Bash qui doit être exécuté en tant que root:

#!/bin/bash
if test "$(id -u)" -ne 0 ; then
    sudo "$0" "$1"
    exit $?
fi

Cela teste si l'ID utilisateur effectif est 0 (root) et sinon, il exécute son propre fichier script avec sudo et passe également son code de sortie lorsqu’il se termine. Cela fonctionne bien avec un NOPASSWD paramètre pour le fichier de script.


1
2017-10-03 23:04