6. September 2013

Arch Linux: Skript mit Root-Rechten automatisch mit GNOME-Session starten

Ich hatte kürzlich das Problem, dass ich ein Bash-Skript, das Root-Rechte benötigt, automatisch beim Start der GNOME-Shell ausführen wollte. Prinzipiell lassen sich Skripte beim Booten des Linux-Systems über die Datei /etc/rc.local ausführen. Der Inhalt dieser Datei, die standardmäßig leer ist, wird beim Booten abgearbeitet. Wenn aber, wie in meinem konkreten Fall, ein Script oder Programm ausgeführt werden soll, das nicht nach einer bestimmten, möglichst kurzen, Zeit terminiert, sondern während der gesamten Session-Laufzeit im Hintergrund laufen, soll, kann dieses Vorgehen nicht genutzt werden, da ansonsten der weitere Bootvorgang blockiert wird. In diesem Artikel soll nun eine Möglichkeit vorgestellt werden, wie Programme oder Skripte über den GNOME-Autostart-Mechanismus beim Login jedes beliebigen Nutzers mit Root-Rechten ausgeführt werden können.

1 Installation von sudo


Voraussetzung für die Umsetzung dieser Anleitung ist, dass das Paket sudo installiert ist, das es unpriviligierten Benutzern erlaubt, Befehle mit Root-Rechten auszuführen, insofern das Root-Passwort eingegeben wird. Dieses Paket kann unter Arch Linux über den folgenden Konsolenbefehl installiert werden: 
 # pacman -S sudo  
Dieser Befehl muss mit Root-Rechten ausgeführt werden. Hierfür kann über Eingabe des Befehls "su" zum Root-Benutzer gewechselt werden können.

2 Erstellen einer neuen Gruppe "sudo"


Für das hier vorgestellte Vorgehen muss außerdem eine neue Gruppe mit dem Namen "sudo" angelegt werden. Dies kann über die Ausführung des folgenden Befehls unter dem Root-Benutzer erreicht werden:
 # groupadd sudo  
Diese Gruppe muss anschließend zu dem Benutzer hinzugefügt werden, bei dessen Login das Skript mit Root-Rechten automatisch ausgeführt werden soll, was über den folgenden Konsolenbefehl erreicht wird:
 # usermod -aG sudo username  
Der Parameter "sudo" entspricht dabei der Gruppe, die dem Benutzer hinzugefügt werden soll, der Parameter "username" entspricht dem Namen dieses Benutzers und muss natürlich entsprechend den konkreten Begebenheiten angepasst werden. 

3 Einrichten von sudo


Nachdem sudo erfolgreich installiert wurde und die neue Gruppe angelegt wurde, muss die Verwendung von sudo für jeden Benutzer, der davon Gebrauch machen können soll, eingerichtet werden. Hierfür existiert die Datei /etc/sudoers, die dementsprechend editiert werden muss. Da kleinste Tippfehler in der Datei dazu führen können, dass man sich aus dem System aussperrt, sollte die Datei stets mit dem Befehl visudo bearbeitet werden, der eine Syntaxprüfung gewährleistet. Um die Datei zum Editieren mit aktivierter Syntaxüberprüfung im Editor nano zu öffnen, kann der folgende Befehl unter dem Root-Benutzer ausgeführt werden:
 # EDITOR=nano sudo -E visudo  
Um einem bestimmten Benutzer die Ausführung eines Befehls mit Root-Rechten ohne Passworteingabe zu ermöglichen, wie es für das per Autostart auszuführende Skript gewünscht ist, muss eine neue Zeile nach dem folgenden Muster unter dem Abschnitt, der mit dem Kommentar "User privilege specification" gekennzeichnet ist, in die Datei eingefügt werden:
 username ALL=(ALL) NOPASSWD:/bin/throttling.sh  
"username" muss dabei natürlich durch den Namen des Benutzers ersetzt werden für den der sudo-Zugriff konfiguriert werden soll. In diesem Beispiel handelt es sich bei dem Skript, das ohne Passworteingabe mit Root-Rechten ausgeführt werden können soll, um die Datei /bin/throttling.sh. Auch diese Pfadangabe muss natürlich nach den eigenen Bedürfnissen angepasst werden.

Man sollte die Passwortabfrage nur für Skripte deaktivieren, die unter den Verzeichnissen /bin, /sbin, /usr/bin, /usr/sbin liegen. Außerdem sollte das jeweilige Skript dem Root-Benutzer gehören. Der Grund hierfür ist, dass ein Angreifer mit Benutzerrechten den Inhalt des Scripts ersetzen kann und dieses anschließend mit Root-Rechten ausführen kann. Wenn das Script jedoch Root gehört und in einem Verzeichnis liegt, indem nur Root Schreibrechte hat, ist ein solcher Angriff nicht möglich.

Um dem Benutzer außerdem die Nutzung von sudo für andere Befehle zu erlauben, muss die folgende Zeile in die Datei /etc/sudoers aufgenommen werden.
 %sudo  ALL=(ALL) ALL  
Diese Zeile sollte bereits auskommentiert vorhanden sein. Indem das vorangestellte #-Zeichen entfernt wird, kann sie aktiviert werden.

4 Erstellen des Autostart-Eintrags


Um zuletzt den eigentlichen Autostart-Eintrag zu erstellen, kann der GNOME-eigene Autostart-Mechanismus genutzt werden, der über das Programm "Startprogrammeinstellungen" konfiguriert werden kann. Diese Programm kann über den folgenden Konsolenbefehl gestartet werden:
 $ gnome-session-properties  
Unter dem Reiter "Startprogramme" kann über die Option "Hinzufügen" der Dialog geöffnet werden, der es erlaubt, einen neuen Autostart-Eintrag hinzuzufügen. Der folgende Screenshot zeigt diesen Dialog.

Hinzufügen eines neuen Autostart-Eintrags unter GNOME (Klicken zum Vergrößern)

In diesem Beispiel wird durch den Autostart-Eintrag das Skript /bin/throttling.sh über sudo mit Root-Rechten ausgeführt. Dies entspricht dem Pfad, der zuvor in der Konfigurationsdatei /etc/sudoers angegeben wurde. Ausgeführt sollte ein Name für den Eintrag vergeben werden und optional kann außerdem ein Kommentar hinzugefügt werden.

Nach einem erneuten Login des jeweiligen Benutzers an der GNOME-Shell sollte das Skript im Hintergrund ausgeführt werden.

Weiterführende Links:

Keine Kommentare:

Kommentar veröffentlichen