Auf dem Raspberry darf der User “Pi” bestimmte Befehle mit Root-Rechten ausführen, ohne dass er ein Passwort braucht: Das funktioniert, indem man “sudo” vor den Befehl schreibt. Die Abkürzung “sudo” steht für “super user do”: Damit wird der nächste Befehl mit Root Rechten ausgeführt. Das ist aber nicht nur für den User “Pi” nützlich, sondern kann auch für den User www-data (Apache) oder fhem (FHEM Smart Home Server) praktisch sein: So lassen sich aus FHEM Befehle mit sudo ausführen, bei denen kein Passwort übergeben werden kann.
FHEM User: sudo Befehle ohne Passwort ausführen
Hierbei muss man natürlich vorsichtig und die Risiken abwägen: Mit solchen Rechten ausgestattet kann der FHEM User auch das System zerstören, indem falsche Befehle gegeben werden. Als sinnvolle Funktion kann man die zusätzlichen sudo Rechte in FHEM aber zum Beispiel nutzen, um ein anderes Programm (zum Beispiel motion) zu starten.
Die Liste der Linux User auf dem Raspberry Pi, die per sudo zusätzliche Rechte beanspruchen dürfen, befindet sich in dem Ordner /etc/sudoers.d. Hierhin gelangt man mit diesem Befehl:
cd /etc/sudoers.d
Hier befindet sich auf dem Raspberry unter anderem die Datei für den User Pi: “010_pi-nopasswd”. Um jetzt einem weiteren User (in unserem Fall dem User fhem) sudo-Rechte zu geben, kopiert man die Datei einfach und nennt sich in “010_fhem-nopasswd” um:
sudo cp 010_pi-nopasswd 010_fhem-nopasswd
Jetzt kann man sie bearbeiten:
sudo nano 010_fhem-nopasswd
In unserem Beispiel bestand sie nur aus einer Zeile. Hier musste zu Beginn der Username “pi” gegen “fhem” getauscht werden. Danach kann man die Datei mit STRG + O speichern und den Editor mit STRG + X wieder schließen. Der Inhalt der Datei lautet dann:
fhem ALL=(ALL) NOPASSWD: ALL
Anschließend kann der User FHEM ebenfalls, wie der User pi, Befehle mit Root-Rechten ausführen, wenn man “sudo” voranstellt. In FHEM kann man das zum Beispiel für ein notify nutzen und unter bestimmten Umständen das Programm “motion” aus FHEM heraus starten:
if ("$EVENT" eq "on") {
system("sudo killall motion");
} else {
system("sudo motion");
}