Linux-Rechtemanagement: Sudo durch Doas ersetzen

Root werden mit Doas | Bild: Unsplash

Sudo ist ein mächtiger Befehl, der Administratoren in die Lage versetzt, aufwändige Systemadministrations-Infrastrukturen mit verfeinerten Berechtigungen und Kontrollmechanismen aufzubauen. so lässt sich unter anderem fein granuliert festlegen, wer welche Befehle damit ausführen darf. So kann man einem User oder einer Gruppe erlauben, das System zu aktualisieren, ihm aber verwehren, Konfigurationsdateien in /etc zu editieren und vieles mehr.

Sudo überdimensioniert

Für Desktop-Einzelplatzsysteme ist Sudo in den allermeisten Fällen völlig überdimensioniert, denn dort geht es meist nur um zeitweise Root-Rechte für die Systemadministration. Dabei kann der unbedarfte Anwender bei falschen Einträgen in der umfangreichen Sudoers-Konfigurationsdatei leicht die Sicherheit des Systems unbemerkt schwächen. Mit der zunehmenden Verbreitung von Ubuntu ab 2005 kam Sudo auf Desktop-Systemen immer mehr in Mode und setzte sich mit der Zeit durch. Viele Distributionen, die früher einen echten Root verwendeten, liefern heute Sudo standardmäßig aus.

Mehr Übersicht

Bei OpenBSD wurde vor rund 5 Jahren doas als einfacher Ersatz für Sudo entwickelt und wird mittlerweile bei einigen BSD-Distributionen als Standard eingesetzt. Im Vergleich zu den rund 3,4 MByte, die Sudo belegt, ist doas mit 40 KByte um einiges kleiner. Ist die Konfigurationsdatei bei Sudo ziemlich überladen und für Neueinsteiger unübersichtlich, so reicht bei doas für die allermeisten Fälle eine Zeile, auch bei Mehrbenutzersystemen. Mit doas lassen sich bei Bedarf aber auch komplexer gegliederte Berechtigungssysteme erstellen. Der Code von doas wird auf Github gepflegt und ist schnell mit make und make install oder checkinstall gebaut.

Anschließend wird (falls die Distribution keine bietet) als Root eine Konfigurationsdatei mit nano /etc/doas.conf (oder dem Editor eurer Wahl) erstellt und anschließend im einfachsten Fall mit der Zeile permit [user] as root versehen, wobei [user] durch den zu berechtigenden User ersetzt wird. Damit lassen sich Befehle einfach als Root ausführen, indem man dem Befehl doas voranstellt anstelle von sudo.

Mit oder ohne Passwort

Wird doas kurz darauf wieder verwendet, wird das Passwort erneut abgefragt und nicht wie bei Sudo für eine Weile gespeichert. Soll das Passwort gar nicht abgefragt werden, so lautet die Zeile permit nopass [user] as root. Auf Mehrbenutzersystemen werden Mitglieder der Gruppe wheel mit der Zeile permit :wheel autorisiert. Weitere Optionen sind der Manpage zu entnehmen.

Kommentare

13 Antworten zu „Linux-Rechtemanagement: Sudo durch Doas ersetzen“

  1. Avatar von kamome
    kamome

    > Für Desktop-Einzelplatzsysteme ist Sudo in den allermeisten Fällen völlig überdimensioniert

    Auch dort muss ich typischerweise nur eine einzige Zeile einfügen …

    > wird das Passwort erneut abgefragt

    … um genau das zu erreichen. Die restlichen Defaults passen für mich (Debian):

    Defaults timestamp_timeout=0

    Dennoch gut, eine leichtgewichtige Alternative zu haben (zumal von OpenBSD).

    1. Avatar von Ferdinand

      Ich kann mich noch gut an meinen ersten Besuch in Visudo erinnern. Das ist noch nicht allzu lange her, denn ich habe bis vor Kurzem am echten Root festgehalten. Das war schon recht verwirrend am Anfang. Leider kommt man heute stellenweise nicht mehr ohne Sudo aus. Ich hatte mehrfach Situationen, die mit Root nicht zu lösen waren und die auf Sudo beharrten. Mal schaun, wie das mit Doas klappt. Das läuft seit einigen Wochen auf einem Notebook, bisher funktioniert es gut als Dropin Replacement für Sudo.

      1. Avatar von axt

        Doas

        Die Schwestern der Boas, pff.

        Ich würde doas wie jeden anderen Shell-Befehl auch im normalen Text klein schreiben.

        So ein paar Zusatzinfos wären nicht schlecht. Bspw. liegt doas nicht in den Debian-, Ubuntu-, Fedora-Repositories, auch nicht in Ubuntu-PPAs, wohl aber als opendoas in den Arch-Repositories. Upstream-URL linkt auf einen Fork eines anderen seit Jahren nicht mehr angefaßten github-Repos. Beim Fork passiert seit 9 Monaten aber auch nichts mehr. Das muß die eine sagenumwobene Software sein, die absolut fehlerlos und nicht verbesserbar ist.

        Wie auch immer, ich hab’s eben mal spaßeshalber (verwenden werde ich’s nicht) aus dem git in einer noch herumliegenden LBionic-VM kompiliert, aber im letzten Schritt des bekannten „Dreisatzes“ Ubuntu-typisch mit checkinstall statt „make install“. So erhält man ein .deb-File.

        Entsprechendes „/etc/doas.conf“ dazu – funktioniert.

        1. Avatar von Ferdinand

          Mea culpa, mir ist im Artikel offensichtlich ein Absatz abhandengekommen, in dem ich auf das Repository Bezug nehme, mit dessen Code ich doas gebaut habe. Das von mir verlinkte Repo ist tatsächlich in aktiver Entwicklung. Ich habe den Artikel eben nochmals um die fehlenden Informationen ergänzt. Auf axebase.net ist eine Installationsanleitung zu finden, die sich auf ein anderes Repository bezieht.

      2. Avatar von Andre Ramnitz
        Andre Ramnitz

        Als Paranoiker habe ich damit angefangen, in der sudo-config

        Defaults targetpw

        zu setzen.
        D.h. wenn sudo zur Passworteingabe auffordert, wird nicht nach dem eigenen, sondern nach dem root-Passwort (bzw. nach dem des angeforderten Users) gefragt.

  2. Avatar von Christian Ruesch
    Christian Ruesch

    Je nach Distribution findet man die Config auch unter /etc/doas.conf.

    Moechte man das Verhalten von sudo haben, dass das Passwort fuer einige Zeit gemerkt wird, dann muss man in der Config das Keyword persist einfuegen.

    Beispiel:

    permit keepenv persist :wheel
    
    1. Avatar von Ferdinand

      Ich meine gelesen zu haben, dass persist nur bei BSD funktioniert. Ich kann es aber mal testen. Eine Config gibt es bei Debian nicht, die muss man selbst anlegen.

      1. Avatar von Christian Ruesch
        Christian Ruesch

        Unter Void Linux funktioniert das persist Keyword. Moeglicherweise ist das aber abhaengig von der verwendeten Version.

        $ cat /etc/doas.conf
        permit keepenv persist :wheel
        
        $ xbps-query -Rs opendoas
        [*] opendoas-6.6.1_1 Portable OpenBSD doas to execute commands as another user
        
        $ doas -s
        doas (user@void) password:
        # exit
        $ doas -s
        # exit
        $
        
        1. Avatar von Ferdinand

          Ich hab es eben bei Debian Unstable (siduction) getestet. persist hat hier keine Wirkung. Leider verhindert doas dort auch die auto completion im Terminal. Da muss ich mal reinschauen, woran das liegt.

          1. Avatar von Christian Ruesch
            Christian Ruesch

            EDIT: Unten auf „Weiterlesen“ klicken, damit der Code richtig formatiert angezeigt wird!

            Unter Void Linux habe ich eine Datei mit folgendem Inhalt angelegt, damit auto completion in der bash funktioniert:

            $ cat /usr/share/bash-completion/completions/doas
            
            # bash completion for doas(8)                              -*- shell-script -*-
            
            _doas()
            {
                local cur prev words cword split
                _init_completion -s || return
            
                local i mode=normal
            
                [[ $mode == normal ]] &&
                    for ((i = 1; i <= cword; i++)); do
                        if [[ ${words[i]} != -* ]]; then
                            local PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin
                            local root_command=${words[i]}
                            _command_offset $i
                            return
                        fi
                        if [[ ${words[i]} == -@(!(-*)e*|-edit) ]]; then
                            mode=edit
                            break
                        fi
                        [[ ${words[i]} == \
                        -@(user|other-user|group|close-from|prompt|!(-*)[uUgCp]) ]] &&
                            ((i++))
                    done
            
                case "$prev" in
                    --user | --other-user | -!(-*)[uU])
                        COMPREPLY=($(compgen -u -- "$cur"))
                        return
                        ;;
                    --group | -!(-*)g)
                        COMPREPLY=($(compgen -g -- "$cur"))
                        return
                        ;;
                    --close-from | --prompt | -!(-*)[Cp])
                        return
                        ;;
                esac
            
                $split && return
            
                if [[ $cur == -* ]]; then
                    local opts=$(_parse_help "$1")
                    COMPREPLY=($(compgen -W '${opts:-$(_parse_usage "$1")}' -- "$cur"))
                    [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
                    return
                fi
                if [[ $mode == edit ]]; then
                    _filedir
                fi
            } &&
                complete -F _doas doas
            
            # ex: filetype=sh
            
            
          2. Avatar von Ferdinand

            Danke dafür, ich muss mir diesbezüglich erst mal die bash_completion bei Debian anschauen.

  3. Avatar von tux.

    Na, müssen wir wieder um Linuxprobleme herumfrickeln? Da doch lieber direkt OpenBSD installieren…

  4. Avatar von Nick
    Nick

    Ich finde dieses Theater rund um sudo nur noch lächerlich. Es war weder jemals notwendig, noch doas als Alternative dazu. Der traditionelle Weg mittels su war stets in Ordnung, und letztlich können auch mittels su bei Bedarf einzelne Kommandozeilen als Root abgesetzt werden. Dazu ist su ebenfalls sehr klein. Wo ist also das Problem? Ist der direkte Login als Root nicht mehr cool genug, dass man hier stets das Rad neu erfinden muss? Ich bin absolut kein Fan davon, auf dieser Ebene partielle Privilegien an verschiedene Nutzer zu delegieren, anstatt das professionell auf Basis von MAC samt MLS zutun. Darüber hinaus kann zur Administration auch mit Key-Escrow gearbeitet werden, indem zufällig generierte Root-Passwörter genutzt werden, die bspw. einmalig oder periodisch in mehrere Segmente unterteilt, und je nach Administrator via E-Mail etc. zugestellt werden. Es sind also stets mehrere Administratoren zum Login erforderlich, womit auch sichergestellt wird das hier im Anschluss keine dubiosen Eingaben getätigt werden. Funktioniert bei uns in der Firma recht gut.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert