Ist Vim in Kombination mit sudo sicher?

25

Es ist nicht ratsam, sudomit einer grafischen Anwendung wie geditder unter diesem Link beschriebenen zu arbeiten . Dementsprechend habe ich eher zu verwenden vimmit sudo.

Kürzlich habe ich meine bemerkt ~/.viminfo root- Benutzer eine relativ neue Installation von Ubuntu 16.04 (Xenial Xerus) ist, und fragte mich, ob selbst Vim als grafisch angesehen wird oder ob es ein anderes Problem beim Aufrufen gibt sudo vim. Nach dem Eigentümerwechsel an mich selbst über:

sudo find $HOME -not -user $USER -exec chown $USER:$(id -g) {} +

und anschließend ausgeführt konnte sudo vimich nicht ~/.viminfo von root besessen haben . Ich bin mir jedoch sicher, dass es kürzlich im Besitz von root war.

Ist es nicht ratsam, aufzurufen sudo vim ?

H2ONaCl
quelle
1
Sie können vim auch ohne sudo verwenden. Wenn Sie die Datei speichern :w !sudo tee %
möchten

Antworten:

22

Ja, das ist sicher.

Das Problem mit dem sudo geditist , weil GUI - Anwendungen bestimmte Dateien verwenden, wie zum Beispiel ~/.cache/dconf, und danach wieder nach geditdieser Datei wird root Besitz. Nun, diese bestimmte Datei enthält benutzerspezifische Einstellungen für GUI-Anwendungen, einschließlich des Desktops. Wenn das System diese Einstellungen nicht lesen kann, ist dies schlecht. IIRC ein Benutzer kann einen bestimmten Desktop nicht starten. Die letzten Dateidaten des Benutzersrecently-used.xbel ebenfalls beeinflusst.

Auf der anderen Seite hat Vim dieses Problem nicht. Es verwendet keine GUI-bezogene Datenbank und fügt nichts ein recently-used.xbel. Es wurde nur für Konsolenzwecke erstellt, obwohl es auch gVim gibt. Tatsächlich ist Vim auf einigen Systemen Ihre einzige Wahl für den Editor. Es ist also sicherer als Gedit, da es nicht dieselben Probleme verursacht. In beiden Fällen bearbeiten Sie immer noch als Root, sodass Probleme mit der fehlerhaften Bearbeitung auftreten können.

Laut diesem Blogbeitrag :

~/.viminfoWenn Sie vim zum ersten Mal verwenden, wird die Datei erstellt. Wenn Sie sudo vimvim nach der Installation auf einem neuen System zum ersten Mal verwenden, wird für die Berechtigungen für ~/.viminfoden Eigentümer anstelle des Standardbenutzers root festgelegt.

Während der Autor darauf hinweist, dass dies zu Problemen führen kann, gibt es nichts Komplexes - nur chowndie Datei für sich.

Siehe auch:

Sergiy Kolodyazhnyy
quelle
6
Beachten Sie, dass vim auf einem System mit mehreren Benutzern, auf dem Sie versuchen, die Administratorrechte anderer Benutzer zu beschränken, nicht sicher ist . Ein Benutzer kann mithilfe sudo vimvon eine Kopie von vim als root ausführen und anschließend :!/bin/sheine root-Shell abrufen.
Mark
3
@Mark und was hindert Benutzer daran, nur zu tun sudo /bin/sh? In der Praxis müssen Benutzer, die bereits über Root-Zugriff verfügen, keine aufwändigen Tricks anwenden.
Sergiy Kolodyazhnyy
7
Die /etc/sudoersDatei. Sie müssen nicht müssen tun %wheel ALL=(ALL) ALL- sudoKonfiguration weit mehr Nuance als erlaubt.
Mark
1
@Mark OK, guter Punkt da - nicht jedes System hat die gleichen Einstellungen.
Sergiy Kolodyazhnyy
Ähm ... Wird sich die Berechtigung ändern, auch wenn die Datei existiert? Angenommen, ich hacke in ein Benutzerkonto, das kein Administrator ist, aber ich kenne sein Kennwort nicht (möglicherweise habe ich es geschafft, eine Shell zu öffnen). Heißt das , dass ich kopieren kann , /bin/bashum ~/.viminfoeine setuid auf sie setzen und warten auf den Benutzer zu laufen , sudo vimes zu root haben chowned?
ChatterOne
15

Es ist auch möglich, dies sudoeditzu erreichen; Es wird eine temporäre Kopie der Datei in Ihrem Editor geöffnet, wobei Ihr Editor wie Sie ausgeführt wird. Von der Manpage :

  1. Temporäre Kopien der zu bearbeitenden Dateien werden erstellt, wobei der Eigentümer auf den aufrufenden Benutzer festgelegt ist.

  2. Der in der Richtlinie angegebene Editor wird ausgeführt, um die temporären Dateien zu bearbeiten. Die sudoers Politik nutzt das SUDO_EDITOR, VISUALund EDITORUmgebungsvariablen (in dieser Reihenfolge). Wenn keines SUDO_EDITOR, VISUALoder EDITOReingestellt ist, das erste Programm aufgeführt im Editor sudoers(5)wird Option verwendet.

  3. Wenn sie geändert wurden, werden die temporären Dateien an ihren ursprünglichen Speicherort zurückkopiert und die temporären Versionen werden entfernt.

Dies funktioniert gut mit vim (was ich im Allgemeinen tue) und ich stelle mir vor, dass Sie damit auch gedit verwenden können. Es gibt einige Sicherheitsbeschränkungen .

GKFX
quelle
4
Dies ist viel besser, wenn Sie statt der Root-Konfiguration lieber Ihre eigene VIM-Konfiguration verwenden möchten.
NieDzejkob
2
Dies ist auch sicherer, wenn Sie keinen zufälligen Plugin-Code als Root ausführen möchten (Plugins, die ausgeführt werden, können jedoch auch großen Schaden anrichten, wenn sie bösartig sind. Verwenden Sie also keine Plugins, denen Sie nicht vertrauen erster Platz).
Kevin
2

Der Link ist sehr alt (2013). Es wird empfohlen, gksudooder gksufür grafische Anwendungen zu verwenden, aber beide sind veraltet. Später schlägt die akzeptierte Antwort allerdings auch vor sudo -H.

Der allgemeine Konsens in der Ask Ubuntu- Community lautet in letzter Zeit:

sudo -H gedit /path/to/filename

Das einzige Problem bleibt, dass sudoes kein Profil für Registerkarteneinstellungen, Erweiterungen, Zeilenumbruch, Schriftname, Schriftgröße usw. gibt. Sie können diese jedoch mit einem Wrapper-Skript wie dem folgenden von Ihrem Benutzerprofil erben: Wie kann ich meinen Stamm synchronisieren? gedit mit den Einstellungen meines Benutzers gedit?

WinEunuuchs2Unix
quelle
2

Ja, es ist sicher zu bedienen sudo vim. Die Probleme, auf die ich stoße, sind

  • Die Datei beenden und erneut öffnen müssen sudo vim, um sie bearbeiten zu können.

  • Die Wurzel vimrcist die Standardwurzel, nicht meine angepassten nützlichen Dinge.

Hier ist eine Funktion, die Sie bashrchinzufügen können, damit vim automatisch sudo kann, wenn Sie die Datei nicht normal bearbeiten können.

vim() {
    #only good for auto-sudo. delete if no sudo privileges.
    #If you're not just opening a single file, let's not use this.
    if [[ "$#" -ne 1 ]]; then
        command vim "$@"
    #cases: if we can write to the file, or the file doesn't exist and we can make new files in that directory
    elif [[ -w "$1" || ( -w $(dirname "$1") && ! -f "$1" ) ]]; then
        # \vim or 'vim' only escape aliases, not functions
        command vim "$1"
    else
        sudo env HOME="$HOME" vim -u $HOME/.vimrc "$1"
    fi
}
jeremysprofile
quelle
Auf Ubuntu sudostandardmäßig bewahrt die $HOMEUmgebungsvariable, das heißt, sudo vim wird Ihre individuelle .vimrc, und es auch Mittel verwenden , die sudo vimdas Eigentum an ändert sich ~/.viminfoan root: root und führen , dass Sie einige Unannehmlichkeiten.
Marius Gedminas
Die akzeptierte Antwort stimmt mit Ihnen nicht überein viminfo.
jeremysprofile
1

Es ist in Ordnung, vi als root zu verwenden. Es wird Zeiten geben, in denen Sie eine Datei bearbeiten müssen, die Sudo- oder Root-Rechte erfordert, z. B. das Ändern Ihrer Netzwerkschnittstellendatei oder das Bearbeiten Ihrer sshd-Konfigurationsdatei. Die Verwendung von root für grafische Zwecke ist schlecht, da Benutzer eine Verbindung zum IRC herstellen oder als root im Web surfen würden. Wenn sie dabei einen Virus bekämen, hätte dieser vollständigen Root-Zugriff.

Der Buchstabe M
quelle
2
Es gibt mindestens eine spezifische Ausnahme für die Verwendung von vi als root. Die Datei, die den Sudo-Pfad steuert (/ etc / sudoers), sollte niemals mit vi bearbeitet werden. Für diese Datei sollte der Befehl visudo verwendet werden. Sie geben nicht einmal an, welche Datei bearbeitet werden soll, sondern nur den Sonderfall.
User628388
1

Was in den anderen Antworten nicht erwähnt wurde, ist, dass das Ausführen von vim mit root den von Ihnen installierten Plugins root-Berechtigungen verleiht. Die Frage, ob es sicher ist, als Root ausgeführt zu werden, hängt davon ab, ob Sie den Plug-in-Entwicklern (oder Mitwirkenden an ihrem Projekt) vertrauen, dass sie Ihr System nicht vollständig besitzen.

Vim wird in der Regel von Paketverwaltern in allen Linux-Distributionen überprüft, daher ist es leicht zu vertrauen. VIM-Plugins werden jedoch normalerweise direkt von GitHub-Repos installiert und haben in der Regel viel weniger Benutzer, die das Auditing durchführen (möglicherweise null). Mit anderen Worten, bei ihnen findet kein Überprüfungsprozess statt.

Wenn Sie keine Plugins im Root-Verzeichnis laden, hängt die Ausführung als Root davon ab, ob Sie VIM-Entwicklern vertrauen. Sie können jedoch darauf verzichten, ihnen vertrauen zu müssen, indem Sie sudoedit verwenden, das von denselben Entwicklern von sudo entwickelt wurde, denen wir ohnehin schon mit root-Zugriff vertraut haben. GKFX und NieDzejkob haben bereits erwähnt, warum sudoedit ideal ist. Abgesehen davon, dass Sie nicht nur den Entwicklern von sudo den Root-Zugriff anvertrauen müssen, können Sie alle Plugins, denen Sie bereits vertraut haben, mit Ihrem normalen Benutzerkonto laden.

JoL
quelle
Diese Diskussion, verschiedenen Entwicklern nicht zu vertrauen, scheint etwas unvollständig zu sein. Wenn Sie sudoedit /etc/apt/sources.listein kompromittiertes Plugin installiert haben, kann es möglicherweise ein bösartiges Repository einfügen und Root-Zugriff erhalten, wenn Sie das nächste Mal Updates ausführen. Ich bin mir sicher, dass es eine lange Liste von root-geschützten Dateien gibt, für die etwas Ähnliches gilt. Und natürlich benötigt nicht jeder Virus root; Man könnte Ihre Bankdaten mit nicht mehr als einer Browser-Erweiterung abrufen.
GKFX