Wie universell ist sudo?

26

Ich habe einige Anweisungen für die Installation geschrieben (TeX-bezogen - wenn Sie nicht danach fragen, werde ich Ihren Tag nicht dadurch ruinieren, dass ich weitere Details liefere) und sudofür die systemweite Installation verwendet. Jemand bemerkte, dass er nicht glaubte, dass dies sudoauf allen Linux- (oder Unix-) Distributionen verfügbar sei.

Gibt es Unix-Distributionen, die keine haben sudo, und wenn ja, welche? Gibt es eine allgemein anerkannte „Get me Superuser - Privilegien“ Befehl, der ist auf allen Systemen?

Loop Space
quelle

Antworten:

34

sudo kann nicht als universell angesehen werden:

  • Red Hat Enterprise Linux : sudoWird standardmäßig unter Red Hat Enterprise Linux und seinen Derivaten 1 installiert , jedoch nur in RHEL 7 und neueren Versionen.

    Red Hat Enterprise Linux 7 fügte dem Installationsbildschirm eine neue Option hinzu, in der Sie den ersten Nicht-Root-Benutzer erstellen , ein Kontrollkästchen mit der Bezeichnung "Diesen Benutzer zum Administrator machen". Sein Zweck ist nicht auf dieser Seite des Installationshandbuchs dokumentiert, aber einer seiner Auswirkungen besteht darin, dass dieser Benutzer einen beliebigen Befehl ausführen kann sudo. Dazu wird dieser Benutzer der wheelGruppe hinzugefügt , die einen beliebigen Befehl unter der Standardpaketkonfiguration ausführen kann sudo.

    Red Hat Enterprise Linux 3 bis 6 ist ebenfalls sudostandardmäßig installiert ( 2), wurde jedoch bis RHEL 7 so konfiguriert, dass nur rootBefehle ausgeführt werden können. Der einfachste Weg, dies zu beheben, besteht darin, einen oder mehrere Benutzer zur wheelGruppe hinzuzufügen , sie visudoals root auszuführen und die %wheel ALL=(ALL)...Zeile zu kommentieren .

  • Debian : Ab Debian 9 enthält eine minimale Installation sudo.

    In Debian 7 und 8 mussten Sie das " Standard System Utilities " -Paket auswählen , um es zu bekommen sudo. Wenn Sie auf sudodiese Weise installieren, fügt das Betriebssystem-Installationsprogramm den zuvor im Installationsprozess erstellten Benutzer ohne Administratorrechte automatisch der sudoGruppe hinzu, die über die Berechtigung verfügt, alle Befehle auszuführen.

    In Debian 6 und früheren Versionen mussten Sie sudovia apt-getnach der Installation installieren und manuell konfigurieren, um Nicht-Root-Benutzern die Möglichkeit zu geben, es zu verwenden.

  • FreeBSD : sudoist in FreeBSD nicht standardmäßig installiert. Sie müssen es aus Ports erstellen.

  • NetBSD : Wie FreeBSD.

  • OpenBSD : sudoverwendet in OpenBSD standardmäßig installiert werden, aber sie haben umgeschaltet , um doasso von 5,8, im Oktober 2015 veröffentlicht . doasSchiffe standardmäßig deaktiviert.

    Um sudoauf die aktuellen Versionen zuzugreifen, müssen Sie diese vom Paket-Repository installieren. Das OpenBSD- sudoPaket ist ähnlich wie in RHEL 3 bis 6 konfiguriert, so dass nur rootBefehle ausgeführt werden können, was den Zweck von eher zunichte macht sudo. Wenn Sie rootwährend der Installation einen Nichtbenutzer hinzugefügt haben, wurde dieser der wheelGruppe hinzugefügt. Der einfachste Weg, um sudoauf einem OpenBSD-System nützlich zu sein, besteht darin, die %wheel ALL=(ALL)...Zeile über zu entfernen visudo.

  • Solaris : sudowird standardmäßig in Solaris 11 installiert, aber Solaris 10 und ältere Versionen verwenden das ähnliche, aber nicht ganz das gleiche pfexec.

    Sie können sudofür ältere Systeme erhalten, aber Standardeinstellungen sind wichtig. Solaris 10 und älter wird jahrelang bei uns sein. Wenn Sie also Solaris in Ihrer Umgebung haben und diese Systeme nicht persönlich kontrollieren und somit sicherstellen können, dass sie sudovorhanden sind, können Sie sich nicht darauf verlassen.

Je älter das System ist, desto größer ist die Wahrscheinlichkeit, dass es keine hat sudo. Obwohl sudoes sehr alt ist , wurde es erst Mitte der 2000er Jahre populär. Systeme, die älter als diese sind, sind höchst unwahrscheinlich sudo. Unix-Boxen leben in der Regel sehr lange, daher ist es nicht unvorstellbar, dass Sie auch heute noch auf einem solchen System laufen.

Ich verlasse mich nur sudoauf Systeme, die ich persönlich verwalte, oder auf Systeme wie Ubuntu, macOS oder openSuSE, bei denen es standardmäßig die einzige Möglichkeit ist, Root-Berechtigungen zu erhalten.

sunäher an einen universellen „hol mir Privilegien Super - User“ Befehl als sudo, aber dann , wo Sie haben Systeme wie Ubuntu und Mac OS das root - Konto standardmäßig Sie gezielt gesperrt ist zu zwingen , zu verwenden , sudostatt su. Sie können also auch nicht suuniversal nennen .


Fußnoten :

  1. CentOS, Oracle Linux, Scientific Linux ...

  2. Ja, auch bei minimalen Installationen.

Warren Young
quelle
9

sudoist ein Dienstprogramm, das auf fast allen Linux-Systemen verfügbar ist.
Es ist jedoch nicht standardmäßig in allen Distributionen enthalten. Alle großen Distributionen haben es jedoch standardmäßig gebündelt.

Linux-Distributionen wie Arch Linux, Gentoo, LFS usw., die dem Benutzer vollständige Anpassbarkeit ermöglichen, haben standardmäßig kein sudo.

Unter Arch Linux ist das Basissystem nicht sudoinstalliert. Der Benutzer muss sudodie sudoers-Datei manuell herunterladen und bearbeiten.
Das Gleiche gilt für Gentoo und LFS. Ich kenne keine andere große Distribution ohne Sudo.

Und nein, ich glaube nicht, dass es etwas Universelleres gibt, als sudoSuperuser-Rechte zu gewähren. Das heißt, abgesehen davon, dass Sie sich tatsächlich als root anmelden.

verdammt
quelle
1
sudoMöglicherweise wird es auf den meisten Distributionen gebündelt, aber nicht alle konfigurieren jeden Benutzer als ausführbar.
Jsbillings
Ein weiterer guter Punkt. Kommt darauf an, was die sudoers-Datei sagt.
Morgen
7

Die am weitesten verbreitete Distribution, Ubuntu, verwendet sudoals empfohlene Methode, root zu werden (wenn Sie die Befehlszeile verwenden - Benutzer, die sich an die GUI halten, erhalten eine Passwortabfrage, ohne zu verstehen oder sich darum zu kümmern, was unter der Haube passiert). Andere Distributionen können das Einrichten von sudo fördern oder nicht und können es möglicherweise sogar ausliefern oder nicht. Auf der anderen Seite suist es überall verfügbar und kann auf den meisten Systemen verwendet werden, mit Ausnahme derjenigen, auf denen nur sudoverfügbar ist, da der Benutzer das root-Passwort nicht hat.

Zwischen suund sudodecken Sie fast alle Ihre Benutzer ab. Die exotisch wenige , die brauchen califeoder opoder pfexecwissen , was bereits zu tun. Selbst wenn dies nicht der suFall sudoist , funktioniert ein System, das Dateien an unbekannten Orten weder verwendet noch wahrscheinlich hat, und genug Dinge, an die Sie nicht gedacht haben, dass Ihre Anweisungen wahrscheinlich sowieso nicht funktionieren.

Gilles 'SO - hör auf böse zu sein'
quelle
6

Um Ihre Frage genau zu beantworten: Nein sudowird nicht als universell angesehen. Wahrhaftig, das gesamte Konzept von "universal" ist oft ein roter Hering. Dies gilt insbesondere im Hinblick auf die Cross-Distro-Kompatibilität. Sobald Sie die Vielzahl unterschiedlicher Softwareversionen in den Griff bekommen, wird die Universalität semi-unrealistisch. Das Schreiben von Skripten ist von Natur aus pragmatisch, wenn es pedantisch wäre, wäre es praktisch unmöglich, tragbare Skripte zu schreiben.

Normalerweise überprüfe ich meine beabsichtigte Ausführungsumgebung. Als eine semimoderne Linux-Distribution erwarte ich eine POSIX-Shell mit den üblichen GNU-Utils. Für Skripte, die außerhalb von Linux laufen könnten, erwarte ich nur den vollen POSIX-Standard. Offensichtlich sind viele Skripte Linux-spezifisch oder distro-spezifisch, so dass der Umfang der Portabilität häufig eingeschränkt wird.

So gehen Sie auf Ihren speziellen Skriptfall ein:

#!/bin/sh


## Exit Point
die() {
    [ -n "$2" ] && echo "$2"
    exit $1
}


## Require SuperUser Execution, Otherwise Re-Execute
[ `id -u` -ne 0 ] && {

    command -v lsb_release > /dev/null && {
        DISTRO="`lsb_release -is`"
        [ "$DISTRO" = "Ubuntu" ] && SUPERUSER='sudo'
    }
    SUPERUSER="${SUPERUSER:-su}"

    case "$SUPERUSER" in
        su)
            su -c "$0"
            ;;
        sudo)
            sudo "$0"
            ;;
    esac
}

## Require SuperUser Execution
[ `id -u` -ne 0 ] && die 78




echo 'Script Executed by UID'
id -u




## Clean Up
die 0

Dieses eingefügte Skript ist ein POSIX-Shell-Kompliment. Ich schreibe immer Dash-kompatibel.

JM Becker
quelle
Aber erfordert Ihr Skript nicht die Installation von sudo? Gibt es eine Möglichkeit, Superuser-Zugriff ohne die Verwendung von sudo zu erlangen? Durch einfaches Scripting?
Darnir
@darnir: Nein, das eingefügte Skript muss nicht sudoinstalliert werden. Es erfordert eine Superuser-Ausführung und kann verwendet werden, sudowenn es verfügbar ist. Ist dies sudonicht der Fall, muss das Skript als Root-Benutzer ausgeführt werden die.
JM Becker
@darnir: Außerdem gibt es wirklich nichts, was als "einfaches Scripting" bezeichnet wird. Fast alles, mit Ausnahme von Shell-Built-Ins, wird über reguläre Binärdateien ausgeführt. Das ist der springende Punkt der Shell, um andere interaktive oder automatisierte Befehle aufzurufen. Es ist dieses definierende Merkmal, das die Shell von den Allzweck-Programmiersprachen trennt. Unabhängig davon, wie Sie den Superuser erwerben, können Sie dies über externe Befehle tun, vorausgesetzt, Sie codieren nicht mit unformatierten Kernel-Schnittstellen.
JM Becker
1
@ varesa: Interessanterweise ist Ubuntu in sudo / su-Standardkonfigurationen genau das Gegenteil. Sie können überprüfen, über welche Sudo-Berechtigungen ein Benutzer verfügt, indem Sie Folgendes ausführen sudo -l. Leider ist es in dieser Situation unbrauchbar, da möglicherweise ein Kennwort eingegeben werden muss. Wenn ich genauer darüber nachdenke, denke ich, dass das gesamte Konzept am besten über einen Pro-Distro-Test erreicht werden kann. Verwenden, es su -csei denn, Sie führen eine sustandardmäßig deaktivierte Distribution aus. In diesem Fall verwenden Sie sudo su -c. Wie andere bereits erwähnt haben, ist es am besten, den Superuser-Zugriff dem Benutzer zu überlassen. Ich würde jede Art von Scrip-Around als Annehmlichkeit betrachten.
JM Becker
1
@varesa: Ich habe das eingefügte Skript aktualisiert, um die Wahrscheinlichkeit der Verwendung eines nicht konfigurierten Skripts zu verringern sudo. Dies sollte in den meisten Distributionen unter der Annahme von Standardeinstellungen su/ sudoKonfigurationen ordnungsgemäß funktionieren . Ich weiß, dass ein veraltetes Ubuntu, Pre lsb_release, angesprochen werden müsste ... Aber das ist wirklich nur ein Beispiel und könnte offensichtlich erweitert werden.
JM Becker,