Sebastian
YaBB God
Offline
Einträge: 521
|
|
Der Befehl sudo (su "do")
« am: 29. Januar 2023, 10:31:33 »
|
|
Achtung nicht ohne Verständnis Befehle aus diesem Beitrag ausführen.
Dieser Beitrag soll nur als kleine Ergänzung zu unseren Treffen von gestern dienen und richtet sich an Leute, die mehr über die Interna von sudo wissen möchten.
Der Begriff/Befehl sudo ist ein WortspielLink aus dem Befehl su (substitute user SU(1) ) und dem englischen Wort do (tun). Manchmal wird sudo auch als "super user do" übersetzt. Das ich persönlich aber nicht ganz passend finde, denn sudo kann viel mehr als einen kurzfristig zum "super User (root)" machen.
Denn genauso wie su kann auch sudo dafür kurzfristig wie auch langfristig Befehle als anderer Benutzer ausführen, bzw. zu Root wechseln.
https://en.wikipedia.org/wiki/Sudo
sudo (/suːduː/[4] or /ˈsuːdoʊ/[4][5]) is a program for Unix-like computer operating systems that enables users to run programs with the security privileges of another user, by default the superuser.[6] It originally stood for "superuser do",[7] as that was all it did, and it is its most common usage;[8] however, the official Sudo project page lists it as "su 'do' ".[9] The current Linux manual pages for su define it as "substitute user",[10] making the correct meaning of sudo "substitute user, do", because sudo can run a command as other users as well.
|
|
Hier ein paar Beispiele:
Angenommen ich bin mit dem Benutzer sebastian eingeloggt und möchte einen Befehl kurzfristig als root ausführen, dann benutzt man sudo ohne jegliche Optionen.
Teilt man sudo nicht mit als welchen Benutzer er den Befehl ausführen soll, geht sudo immer vom Benutzer root aus, da dies der häufigste Anwendungsfall ist.
Beispiel 2:
Angenommen ich möchte jetzt aber einen Befehl nicht als root ausführen, sondern als Benutzer andreas, dafür verwendet man die Option -u, --user
SUDO(8)
-u user, --user=user Run the command as a user other than the default target user (usually root). The user may be either a user name or a numeric user-ID (UID) prefixed with the ‘#’ character (e.g., ‘#0’ for UID 0). When running commands as a UID, many shells require that the ‘#’ be escaped with a backslash (‘’). Some security policies may restrict UIDs to those listed in the password database. The sudoers policy allows UIDs that are not in the password database as long as the targetpw option is not set. Other security policies may not support this.
|
|
sudo -u andreas nano textdatei.txt |
|
So würde der Text-Editor nano nun als Benutzer andreas gestartet werden. Wofür könnte so etwas gut sein? Nun ja, da der Text-Editor nun eigentlich von dem Benutzer andreas gestartet wurde, gehören ihm damit von Anfang an alle Textdateien, die mit diesem Editor gespeichert werden. Es gibt natürlich noch andere sinnvolle Anwendungsgebiete.
Zu root dauerhaft werden
Zudem hatte Andreas bei unseren gestiegenen Treffen uns einen Kniff gezeigt, wie man dauerhaft zu root werden kann, auch wenn man das eigentliche root Passwort nicht mehr kennt.
Andreas hat das so gelöst, dass man mit sudo das Programm su startet. Dadurch wird man von sudo nach seinem eigenen Passwort gefragt, und nachdem man dies angeben hat, schaut sudo in seine Berechtigungs-Datei nach, ob man Befehle als root ausführen darf. Darf man dies wird der Befehl/Programm su mit Root-Rechten gestartet und dies sorgt dann wiederum dafür das man selbst zu root wird.
Es gibt aber auch noch eine andere möglichkeit, ohne das Programm su zu benutzen um root zu werden. Und das alleine mit sudo. sudo besitzt nämlich auch noch die Optionen -i, --login bzw. -s, --shell
Man könnte also auch so dauerhaft zu root werden
Somit ist kein weiteres Programm wie su in dem Prozess involviert. Was ist nun aber der Unterschied zwischen den beiden? Man wird ja bei beiden zu root.
sudo -i verhält sich genauso wie su man wird also mit allen drum und dran zu root. Es werden auch die Konfigdateien, Umgebungsvariablen etc. von root geladen. Als ob sich wirklich root angemeldet hat.
Bei sudo -s verhält es sich ein wenig anderes. Man wird zwar auch zu root, aber mit dem Unterschied, dass root seine Konfigdateien, Umgebungsvariablen etc. nicht geladen werden. Somit bleibt die aktuelle Shell Umgebung auf dem vorherigen Nutzer eingestellt.
Das hat vor und Nachteile immer wie man es genau sehen mag. Somit würden z.B. alle liebgewordenen Aliase, die man sich erstellt hat, gültig bleiben und nicht mit denen, die von root kommen überschrieben, oder auch würde das Heimatverzeichnis ~ auf den vorherigen Nutzer eingestellt bleiben und nicht zu root seinem Heimatverzeichnis führen. Dies sollte man bedenken, wenn man Befehle in so einer Umgebung als root ausführt. Da dies zu Verwirrung und falschen Annahmen führen kann.
Weiterführende Informationen
Wer sich ausgiebiger mit sudo beschäftigen möchte, dem sei noch dieses Buch hier empfohlen. Wonach man so ziemlich alles über sudo weis.
Sudo Mastery, 2nd Edition
|