it-swarm.com.de

Startskript mit Sudo in Ubuntu 16.10

Ich muss ein Skript und eine Binärdatei von /usr/bin beim Start mit Sudo/root-Berechtigungen starten. Ich habe viele Anleitungen aus diesem Forum ausprobiert, aber nichts hat funktioniert (rc.local und systemd -Stil, Upstart) - vielleicht mache ich etwas falsch. Mein Betriebssystem ist Ubuntu GNOME 16.10.

Das Drehbuch wäre ungefähr so

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

Sowohl das Skript als auch das Programm sind ausführbar. Ich weiß nur nicht, wie ich sie beim Start mit Sudo optimal starten kann.

Bitte sei höflich. Ich bin ein neuer Benutzer.

7
bhunter

Für Befehlszeilenanwendungen, für die keine grafische Benutzeroberfläche erforderlich ist, reicht es aus, den Aufruf in /etc/rc.local zu platzieren, das bereits als Root ausgeführt wird. Daher ist Sudo nicht erforderlich. Unten ist ein Beispiel für meinen eigenen /etc/rc.local, den ich zum Starten von zwei Überwachungsskripten verwende.

#!/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

Für GUI-Anwendungen müssten Sie einen anderen Ansatz wählen. Sie müssten die Startup Applications-App öffnen und den folgenden Befehl hinzufügen:

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

Dies gibt der GUI genügend Zeit zum Starten, 10 Sekunden, dann öffnet sich ein Passwort-Dialog und wenn Sie das Passwort richtig eingeben, wird Ihr Befehl gestartet. Eigentlich ist dies ein Mini-Bash-Skript. Sie können stattdessen pkexec verwenden, und einige können sogar sagen, dass pkexec anstelle von gksu empfohlen wird.

Wenn Sie das Kennwort nicht jedes Mal eingeben möchten, können Sie Ihrem Benutzer auch erlauben, diesen bestimmten Befehl mit Root-Berechtigungen ohne Authentifizierung auszuführen. Dazu müssen Sie die Datei /etc/sudoers bearbeiten. WARNING: Es wird empfohlen, Sudo visudo zu verwenden, um die Datei vom Terminal aus zu bearbeiten. Das folgende Beispiel zeigt, wie ich dieselbe Einstellung mit dem Befehl pm-suspend verwende:

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

Diese Zeile sollte an das Ende der Datei /etc/sudoers angehängt und gespeichert werden. Beachten Sie, dass Sie noch Sudo oder gksu an den Anfang jedes von Ihnen eingerichteten Befehls anhängen müssen. Daher müssten Sie denselben bash -Befehl verwenden, den ich zuvor gezeigt habe.

9

Die Lösung ist so einfach, dass Sie sie verpasst haben. :) Da rc.local von root ausgeführt wird, sind die Sudos in Ihrer Datei absolut unnötig.

Mit anderen Worten, setzen Sie es in rc.local, wie Sie vorgeschlagen haben, aber lassen Sie die Sudo in Ihrem Skript weg. Sie sind völlig unnötig, da rc.local bereits als root ausgeführt wird.

Hoffe das hilft!

1
anonymous2