Website-Suche

So bearbeiten Sie eine Systemdatei mit sudoedit unter Beibehaltung der aufrufenden Benutzerumgebung


Unter Linux und anderen Unix-basierten Betriebssystemen wird sudo verwendet, um ein Programm mit den Rechten eines anderen Benutzers, oft root, auszuführen. Wenn wir eine Datei ändern müssen, für deren Bearbeitung Administratorrechte erforderlich sind, wenn wir unseren bevorzugten Texteditor direkt mit sudo starten, wird er ohne die Anpassungen und Einstellungen ausgeführt, die wir verwenden, wenn wir ihn normal aufrufen, da die Umgebung des aufrufenden Benutzers nicht erhalten bleibt. In diesem Tutorial werden wir sehen, wie wir dieses Problem leicht lösen können und wie wir Systemdateien mit sudoedit sicher ändern können.

In diesem Tutorial lernen Sie:

  • So bearbeiten Sie eine Systemdatei mit sudoedit
  • Welche Schritte werden ausgeführt, wenn eine Datei mit sudoedit bearbeitet wird?
  • So legen Sie den von sudo verwendeten Standard-Editor fest

Verwendete Softwareanforderungen und Konventionen

Sudo-Standardverhalten

Die meisten Linux-Distributionen sind so konfiguriert, dass der Hauptweg zum Erlangen von Root-Rechten die Verwendung von sudo ist. Die Verwendung von sudo gewährt uns eine Reihe von Privilegien über su, wobei die wichtigste darin besteht, dass einem Benutzer bestimmte Privilegien gewährt werden können, ohne ihm vollen Root-Zugriff gewähren zu müssen.

Sudo kann über die Datei /etc/sudoers fein abgestimmt werden; Da diese Datei sehr wichtig ist, sollte sie mit dem Befehl visudo bearbeitet werden, der sicherstellt, dass keine Syntaxfehler vorhanden sind, bevor die Änderungen gespeichert werden.

In den allermeisten Fällen, wenn ein Befehl mit sudo ausgeführt wird, wird die aufrufende Benutzerumgebung nicht beibehalten, so dass zum Beispiel, wenn wir unseren Editor mit sudo aufrufen, um eine Systemdatei zu ändern, die root gehört, er ohne Rücksicht auf unser persönliches Setup ausgeführt wird. Dies kann ziemlich unpraktisch sein, und in bestimmten Fällen kann das Ausführen eines Editors mit erweiterten Berechtigungen zu Sicherheitsproblemen führen. Schauen wir uns stattdessen an, was wir tun können.

Das Problem: Der Editor wird ohne benutzerdefinierte Einstellungen gestartet

Nehmen wir an, wir müssen eine Datei mit Administratorrechten bearbeiten, z. B. /etc/fstab, in der die statischen Informationen über Dateisysteme unter Linux gespeichert sind. Wenn wir unseren bevorzugten Texteditor verwenden und ihn direkt mit sudo,
aufrufen, wird die Anpassung, die wir darauf festlegen (typischerweise über die entsprechenden Dotfiles, die in unserem HOME-Verzeichnis gespeichert sind), nicht berücksichtigt, da die aufrufende Benutzerumgebung nicht beibehalten wird.

Sehen wir uns ein Beispiel an. Nehmen wir an, unser Lieblingseditor ist Vim und in unserer ~/.vimrc-Datei haben wir die set-number-Direktive eingegeben, die bewirkt, dass Zeilennummern angezeigt werden. Wenn wir die Datei /etc/fstab bearbeiten, indem wir den Editor direkt mit sudo aufrufen, können wir sehen, dass die Einstellungen nicht wirksam sind:

sudo vim /etc/fstab

Die Datei wird im Editor geöffnet und wie folgt angezeigt. Der Inhalt der Datei spielt für uns in diesem Fall keine Rolle, daher wird sie gekürzt:

#
/etc/fstab
#
Accessible filesystems, by reference, are maintained under '/dev/disk/'.
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
After editing this file, run 'systemctl daemon-reload' to update systemd
units generated from this file.
#
/dev/mapper/fingolfin_vg-root_lv /                       ext4    defaults,x-systemd.device-timeout=0 1 1
UUID=b308fbe5-68a6-4142-82de-ba1dc3380484 /boot          ext2    defaults                            1 2
[...]

Wie Sie sehen können, werden Zeilennummern nicht angezeigt. Das Obige ist nur ein Beispiel und wahrscheinlich gehen unsere Editor-Anpassungen weit darüber hinaus. Wie können wir dieses Problem lösen?

Die Lösung: mit sudoedit

Um das oben dargestellte Problem zu lösen, können wir einfach sudoedit anstelle von sudo verwenden. Die Verwendung von sudoedit entspricht dem Aufruf von sudo mit der Option -e, der Abkürzung für --edit. Wie im sudo-Handbuch angegeben, bedeutet diese Option im Grunde: "Eine Datei bearbeiten, anstatt einen Befehl auszuführen".

Wenn diese Strategie verwendet wird und der aufrufende Benutzer die Aktion durch die Systemrichtlinie ausführen darf, wird eine Reihe von Schritten ausgeführt. Zunächst wird eine temporäre Kopie der Datei erstellt, die wir bearbeiten möchten. Die temporäre Datei befindet sich im Besitz des aufrufenden Benutzers, so dass keine Administratorrechte erforderlich sind, um sie zu ändern.

Die temporäre Datei wird im Standard-Texteditor geöffnet. Der Standardeditor wird über einige Variablen gesetzt, die in einer bestimmten Reihenfolge gelesen werden. Sie sind:

  1. SUDO_EDITOR
  2. VISUELL
  3. REDAKTEUR

Abhängig von der Distribution und der Shell, die wir verwenden, kann der Wert dieser Variablen dauerhaft in der ~/.bash_profile (nur von der Bash-Shell bezogen) oder der ~/.profile-Datei festgelegt werden. Um z.B. vim als Standard-Editor festzulegen, würden wir schreiben:

export SUDO_EDITOR=/usr/bin/vim

Beachten Sie, dass wir die eingebaute Export-Shell vor der Variablendefinition verwendet haben: Sie wird benötigt, um die Variable selbst in alle untergeordneten Prozesse der Shell zu exportieren. Die Änderungen werden nicht sofort wirksam: Wir sollten uns abmelden und erneut anmelden,
oder die geänderte Datei "manuell" beziehen:

source ~/.bash_profile

Wenn keine dieser Variablen gesetzt ist, wird der erste Editor verwendet, der als Wert der editor-Option in der Datei sudoers (/etc/sudoers) angegeben ist.

Sobald die von uns geänderte Datei gespeichert ist (sie wird von Grund auf neu erstellt, falls sie noch nicht vorhanden ist) und der Editor geschlossen ist, wird sie an die ursprüngliche Position zurückkopiert und die temporäre Datei wird entfernt. Der Benutzer wird aufgefordert
die Aktion zu bestätigen, wenn die bearbeitete Datei leer wird. Dies ist eine zusätzliche und sehr nützliche Sicherheitsmaßnahme, die katastrophale Fehler verhindern kann:

sudoedit: truncate /etc/fstab to zero bytes? (y/n) [n] n
sudoedit: not overwriting /etc/fstab

Da bei der Verwendung von sudoedit anstelle von sudo die Umgebung des aufrufenden Benutzers erhalten bleibt und die Datei als Benutzer selbst und nicht als root bearbeitet wird, können wir unseren Editor mit allen von uns vorgenommenen Anpassungen verwenden, einschließlich geladener Plugins.

Schlüsse

In diesem Tutorial haben wir gelernt, wie es möglich ist, eine Datei zu bearbeiten, die Administratorrechte erfordert, um geändert zu werden, während die aufrufende Benutzerumgebung sudoedit anstelle von sudo verwendet. Wir haben gesehen, was die Vorteile dieses Ansatzes sind, welche Schritte ausgeführt werden, wenn er übernommen wird, und wie der von sudo verwendete Standardeditor festgelegt wird.

Verwandte Artikel: