Unter Linux ist der Zugriff auf Systemressourcen standardmäßig auf privilegierte Benutzer (meist root) beschränkt. Dennoch gibt es legitime Anwendungsfälle, in denen normale Benutzer bestimmte Programme mit erweiterten Rechten ausführen müssen – etwa um Netzwerkpakete zu sniffen, Systemdienste zu steuern oder Geräte direkt anzusprechen.
In diesem Artikel zeigen wir sichere und etablierte Methoden, wie dies möglich ist – ohne vollständigen Root-Zugriff zu gewähren.
1. Gezielte Rechtevergabe über /etc/sudoers
Die klassische Methode zur Ausführung von Programmen mit Root-Rechten durch normale Benutzer ist die Konfiguration der Datei /etc/sudoers. Damit kann einzelnen Benutzern oder Gruppen der Zugriff auf spezifische Befehle erlaubt werden – ohne vollständigen Root-Zugang.
Beispiel: Ein Benutzer soll tcpdump mit Root-Rechten ausführen dürfen, ohne ein Passwort eingeben zu müssen:
username ALL=(ALL) NOPASSWD: /usr/sbin/tcpdump
Dieser Eintrag wird am sichersten mit dem Befehl visudo vorgenommen, um Syntaxfehler zu vermeiden.
Anschließend kann der Benutzer tcpdump wie folgt ausführen:
sudo /usr/sbin/tcpdump
2. Linux Capabilities: Feingranulare Rechtevergabe
Seit neueren Kernel-Versionen unterstützt Linux sogenannte Capabilities, die es ermöglichen, bestimmten Programmen ausgewählte Root-Rechte zuzuweisen – ohne vollständige Root-Privilegien.
Beispiel: Damit ein Benutzer das ping-Programm (das ICMP-Pakete versendet) ohne sudo verwenden kann, genügt:
sudo setcap cap_net_raw+ep /bin/ping
Diese Capability erlaubt es dem Programm, rohe Netzwerkpakete zu versenden. Der Benutzer kann danach einfach ping verwenden, ohne Root zu sein.
Weitere nützliche Capabilities
cap_net_bind_service: Öffnen von Ports unter 1024 (z. B. für eigene Webserver)cap_sys_time: Ändern der Systemzeitcap_dac_override: Ignorieren von Dateisystemberechtigungen (Vorsicht!)cap_sys_admin: Sehr mächtige Admin-Rechte, fast gleichbedeutend mit Root
Um gesetzte Capabilities zu überprüfen:
getcap /bin/ping
3. PolicyKit (polkit): Rechteverwaltung für Systemdienste
PolicyKit (heute oft als polkit bezeichnet) ist ein Framework zur Rechtevergabe auf höherer Ebene, insbesondere für Desktop-Umgebungen und D-Bus-basierte Dienste wie den NetworkManager, udisks oder systemd.
Über Polkit können z. B. Mitglieder einer bestimmten Benutzergruppe Aktionen wie das Herunterfahren des Systems, Einhängen von Laufwerken oder Ändern von Netzwerkeinstellungen erlaubnisfrei durchführen.
Beispielhafte Regeldatei unter /etc/polkit-1/rules.d/10-network.rules:
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.network-manager.settings.modify.system" &&
subject.isInGroup("networkadmins")) {
return polkit.Result.YES;
}
});
In diesem Beispiel dürfen alle Benutzer der Gruppe networkadmins Netzwerkkonfigurationen ändern, ohne Root-Rechte oder Passwortabfrage.
4. Das Setuid-Bit: Veraltete Methode mit hohem Risiko
Eine ältere Methode, Programmen dauerhaft Root-Rechte zu verleihen, ist das Setzen des sogenannten Setuid-Bits. Damit wird ein Programm immer mit den Rechten seines Eigentümers (oft Root) gestartet – unabhängig davon, welcher Benutzer es ausführt.
Beispiel:
sudo chown root:root /pfad/zu/programm
sudo chmod u+s /pfad/zu/programm
Das klingt zunächst praktisch – ist aber hochriskant. Viele Distributionen ignorieren das Setuid-Bit bei Skripten vollständig, und Programme mit Setuid-Root-Status stellen ein beliebtes Ziel für Exploits dar.
Fazit
Für Administratoren gibt es verschiedene Wege, bestimmten Benutzern die Ausführung von Programmen mit erweiterten Rechten zu ermöglichen. Während der klassische Weg über sudo nach wie vor sinnvoll ist, bieten moderne Methoden wie Linux Capabilities oder Polkit oft bessere Sicherheit bei gleichzeitig höherer Flexibilität.
Die Wahl der richtigen Methode hängt vom Einsatzzweck, der Sicherheitsanforderung und dem Systemkontext (Server vs. Desktop) ab.