web-dev-qa-db-fra.com

Comment faire un exécutable nécessite un mot de passe root?

Comment créer un fichier exécutable (un script shell qui n'est pas de ma propre création), quand on y accède, une petite fenêtre demandant le mot de passe s'ouvre lis.)

4
PyRulez

Plutôt que de toucher au script Shell actuel, vous pouvez faire un wrapper pour l'appeler avec plus de permissions.

Enregistrez le script ci-dessous, rendez-le exécutable (par exemple, chmod +x mysudowrapper.sh) et utilisez-le comme suit:

./mysudowrapper.sh /path/to/originalscript.sh

Ensuite, rendez le originalscript.sh uniquement exécutable par root:

chown root:root /path/to/originalscript.sh
chmod go-x /path/to/originalscript.sh

Essaye-le:

/path/to/originalscript.sh
bash: /path/to/originalscript.sh: Permission denied

Via un script wrapper comme ci-dessus devrait fonctionner. De là, vous devriez être tous ensemble.


#!/bin/bash
# Wrapper to run commands with Sudo. Uses gksudo in a GUI environment, falls back on 
# plain Sudo in non-GUI environment.
# Info: http://askubuntu.com/a/244690/88802
# Author(s): Gert van Dijk
# Disclaimer: No warranties whatsoever. I'm not responsible for any damage here.
# Purpose of this script is to *demonstrate* a wrapper to run other commands.

GKSUDO=/usr/bin/gksudo
Sudo=/usr/bin/Sudo
gui_Sudo () { # Run command with a GUI-capable Sudo-wrapper
    $GKSUDO -- $Sudo "$@"
}

plain_Sudo () { # Run command with the plain Sudo wrapper
    $Sudo "$@"
}

has_gui () { # Checks for whether GUI is available via the $DISPLAY environment
    if [ "$DISPLAY" != "" ]; then return 0; else return 1; fi
}

has_args () { # Checks for valid amount of arguments
    if [ "$1" != "" ]; then return 0; else return 1; fi
}

print_usage () { # Prints usage
    echo "Usage: $0 <command> [args]"
}

if has_args $@; then
    if has_gui; then gui_Sudo $@; else plain_Sudo $@; fi
else
    print_usage; exit 1
fi
3
gertvdijk