Doas

Doas - Alternative zu Sudo

Wir, das siduction Team, haben uns für einen echten Root-Account entschieden und Sudo nicht konfiguriert. Für Benutzer die Sudo gewohnt sind und nicht auf seine Funktionalität verzichten möchten, bietet sich die schlanke Alternative Doas an. Doas ist, im Vergleich zu Sudo mit nur etwa 1/100 an Codezeilen, auf Desktop-Systeme zugeschnitten. Mit siduction 2021.3 wintersky wird Doas in Version 6.8.1-3 automatisch installiert, ist jedoch noch nicht vollständig konfiguriert.

Doas konfigurieren

Um Doas benutzen zu können fehlt einzig die Konfigurationsdatei /etc/doas.conf. Sie enthält zeilenweise Regeln, die Aktionen einem Benutzer zuweisen. Eine “#” leitet Kommentare ein. Die Zeilen liest Doas nacheinander, wobei die Aktion der letzten zutreffenden Regel ausgeführt wird. Für das Verständnis der Regeln in der Konfigurationsdatei sind einige Dinge zu beachten.
- Nur Aktionen, für die mindestens eine Regel zutrifft, werden ausgeführt. - Dadurch, dass Doas die Regeln zeilenweise nacheinander auswertet, lassen sich Hierarchien aufbauen. - Bei Regeln die Kommandos mit Argumenten enthalten, sind die Argumente exakt und vollständig anzugeben. - Regeln mit Kommandos die variable Argumente benötigen sind nicht möglich. - Doas prüft vor der Ausführung der angeforderten Aktion die Syntax der Konfigurationsdatei. Bei fehlerhaften Regeln erfolgt die Ausgabe doas: syntax error at line 4 und Doas beendet sich. Der schreibende Zugriff auf die Konfigurationsdatei ist dann nur mit dem Root-Account möglich.

Besonders einfach ist die Konfiguration, wenn auf dem siduction System nur ein User-Account existiert. Eine einzige Zeile reicht um mittels vorangestelltem “doas” Befehle mit root-Rechten auszuführen.
Melde dich in einem Terminal als root an und führe folgenden Befehl aus, wobei “tux” durch den Namen deines Benutzer-Account zu ersetzen ist.

tux@sidu:~$ su
Passwort:
root@sidu:/home/tux# echo "permit keepenv nopass tux" > /etc/doas.conf
root@sidu:/home/tux# exit
tux@sidu:~$

Die Konfigurationszeile setzt sich zusammen aus:
Der Aktion “permit|deny” (erlauben|verbieten) mit
der Option “keepenv” (Umgebungsvariablen beibehalten - ermöglicht das Starten von graphischen Programmen wie gparted),
der Option “nopass|persist” (keine Passwortabfrage | die einmalige Passwort Eingabe bleibt einen begrenzten Zeitraum gültig) und
dem Benutzer “tux”, auf den die Aktion anzuwenden ist.

Steht der Benutzername für sich allein, so darf tux Befehle als beliebiger, auf dem System vorhandener Benutzer ausführen. Die Vorgabe ist root. Soll die Ausführung der Aktion nur mit den Rechten eines anderen Benutzers als root erlaubt sein, ist der Name innerhalb der Regel anzugeben (z.B. “tux as anne”). Statt des Benutzers kann durch das Voranstellen eines : eine Gruppe (z.B. “:vboxusers”) Berechtigungen erlangen.

Doas und mehrere Benutzer

Beispiel
Auf dem Arbeitsplatz-PC dürfen sich außer tux drei weitere Benutzer mit den Namen anne, bob und lisa anmelden.
Anne möchte nur Bob erlauben zwei ihrer Skripte aus ihrem Verzeichnis /home/anne/bin auszuführen. Die Rechte an ihren Skripten hat Anne restriktiv auf 700 gesetzt.
Lisa ist besonders vertrauenswürdig, weshalb sie für die Systemupgrades zuständig sein soll.

Wir nutzen als tux sogleich Doas in einem Terminal um die Konfigurationsdatei zu bearbeiten.

tux@sidu:~$ doas mcedit /etc/doas.conf

Die zuvor genannten Berechtigungen setzen wir in Regeln um und ergänzen die Datei um einige Kommentare.

# doas config file /etc/doas.conf

# tux erhält root-Rechte
permit keepenv nopass tux

# bob darf script von anne ausführen
permit bob as anne cmd /home/anne/bin/script1 args -n
permit bob as anne cmd /home/anne/bin/script2 args

# lisa darf Systemupgrade ausführen
permit persist lisa cmd init
deny lisa cmd init args 1
deny lisa cmd init args 5
permit persist lisa cmd apt args update
permit persist lisa cmd apt args full-upgrade

Erklärungen
Bob darf die Skripte “script1” und “script2” innerhalb Annes /home/anne/bin Verzeichnis ausführen. Ersteres ausschließlich mit der Argument -n, dem Zweiten darf kein Argument mitgegeben werden. Die Angabe von “args” in der Regelzeile für das script2 ohne ein folgendes Argument, erzwingt den Aufruf der Datei ohne Argument und damit ohne möglicherweise schädlichen Code. Bob muss dem Aufruf der Skripte mit der Option -u den Benutzernamen mitgeben.

bob@sidu:~$ doas -u anne /home/anne/bin/script1 -n
doas (bob@sidu) password:

bob@sidu:~$

Das Skript wurde nach Eingabe des Benutzerpasswortes von Bob ohne Kommentar ausgeführt.

Damit Lisa das Systemupgrade ausführen kann, soll sie zum multi-user.target (init 3) wechseln und nach Abschluss einen systemctl reboot (init 6) durchführen. Die Regelzeile “permit persist lisa as root cmd init” ohne die Angabe von args bewirkt, dass alle Aufrufe von init erlaubt sind, außer denen, die in den nachfolgenden Regeln verboten werden. Deshalb kann sie nicht direkt vom multi-user.target in das graphical.target (init 5) wechseln. Hier sehen wir den Aufbau einer Hierarchie.

Hinweise
Wer immer wieder sudo eintippt, dem hilft die Zeile alias sudo="doas" in seiner .bashrc.
Doas spielt seinen entscheidenden Vorteil dort aus, wo nur einem User mittels doas root-Rechte erteilt werden. Das obige Beispiel mit Lisa zeigt, wie umfangreich die Konfiguration für eine eingeschränkte Rechtevergabe werden kann. Außerdem ist eine Regel für einen Programmaufruf mit variablen Argumenten (z.B. apt install <Paketname> ) nicht möglich.

Quellen
man doas
man doas.conf
github, doas
LinuxNews, Linux Rechtemanagement, sudo durch doas ersetzen
LinuxUser 08.2021, Kleiner Bruder

Zuletzt bearbeitet: 2022-04-01