web-dev-qa-db-fra.com

Script de démarrage avec Sudo dans Ubuntu 16.10

Je dois démarrer un script et un fichier binaire à partir de /usr/bin au démarrage avec les privilèges Sudo/root. J'ai essayé de nombreux guides de ce forum mais rien n'a fonctionné (style rc.local et systemd, Upstart) - peut-être que je fais quelque chose de mal. Mon système d'exploitation est Ubuntu GNOME 16.10.

Le script serait quelque chose comme ça

#!/bin/bash
Sudo ./usr/bin/myprogram
Sudo bash /home/USER/script.bash

Le script et le programme sont exécutables. Je ne connais tout simplement pas la meilleure façon de les démarrer avec Sudo au démarrage.

Soyez gentil s'il vous plait. Je suis un nouvel utilisateur.

7
bhunter

Pour les applications en ligne de commande ne nécessitant pas d'interface graphique, il suffit de les appeler dans /etc/rc.local, qui s'exécute déjà en tant qu'utilisateur root, et n'a donc pas besoin de Sudo. Vous trouverez ci-dessous un exemple de mon propre /etc/rc.local que j'utilise pour démarrer deux scripts de surveillance.

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/home/xieerqi/bin/batmon.sh &
/home/xieerqi/bin/sh/temperature.sh  &
 exit 0

Pour les applications d'interface graphique, vous devrez adopter une approche différente. Vous devez ouvrir l'application Applications de démarrage et ajouter la commande suivante:

bash -c "sleep 10;gksu /usr/bin/my_vpn_program"

Cela donne à l’interface graphique suffisamment de temps pour démarrer, 10 secondes, puis ouvrira une boîte de dialogue de mot de passe et, si vous entrez le mot de passe correctement, lancera votre commande. Effectivement c'est un script mini bash. Vous pouvez utiliser pkexec à la place, et certains pourraient même dire que pkexec est recommandé à la place de gksu.

Sinon, si vous ne voulez pas entrer un mot de passe à chaque fois, vous pouvez autoriser votre utilisateur à exécuter cette commande particulière avec les privilèges root sans authentification. Pour cela, vous devez éditer le fichier /etc/sudoers. WARNING: il est recommandé d’utiliser Sudo visudo pour éditer le fichier à partir du terminal. Vous trouverez ci-dessous un exemple d'utilisation du même paramètre avec la commande pm-suspend:

# Allow using pm-suspend for my user without password
xieerqi ALL = NOPASSWD: /usr/sbin/pm-suspend

Cette ligne doit être ajoutée à la fin du fichier /etc/sudoers et sauvegardée. Notez que vous devez toujours ajouter Sudo ou gksu au début de chaque commande que vous avez configurée. Ainsi, vous devrez utiliser la même commande bash que j'ai montrée précédemment.

9

La solution est si simple que vous l'avez manquée. :) rc.local étant exécuté par root, les fichiers Sudo de votre fichier sont totalement inutiles.

En d'autres termes, mettez-le dans rc.local comme vous l'avez suggéré, mais omettez les Sudoname __ de votre script. Ils sont totalement inutiles, car rc.local est déjà lancé en tant que root.

J'espère que cela t'aides!

1
anonymous2