Vim è sicuro da usare in combinazione con sudo?


25

Non è consigliabile utilizzare sudoun'applicazione grafica come gedit, come descritto a questo link . Di conseguenza, ho la tendenza a usare vimcon sudo.

Di recente ho notato che il mio ~/.viminfoera di proprietà di root su un'installazione abbastanza recente di Ubuntu 16.04 (Xenial Xerus), quindi mi chiedevo se anche Vim fosse considerato grafico o se ci fossero altri problemi con l'invocazione sudo vim. Dopo aver cambiato la proprietà a me stesso tramite:

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

e successivamente in esecuzione sudo vimnon ero in grado di essere ~/.viminfo posseduto da root. Tuttavia, sono certo che recentemente è stato di proprietà di root.

Non è consigliabile invocare sudo vim?



1
Puoi anche usare vim senza sudo e quando si tratta di salvare il file, puoi usare:w !sudo tee %
ChatterOne

Risposte:


22

Sì, è sicuro.

Il problema sudo geditè che le applicazioni della GUI usano determinati file, come ad esempio ~/.cache/dconf, e dopo aver elevato geditquel file diventa di proprietà root. Bene, quel particolare file contiene impostazioni specifiche dell'utente per le applicazioni della GUI, incluso il desktop, quindi se il sistema non è in grado di leggere quelle impostazioni - è male. IIRC un utente non può avviare un determinato desktop. Anche i dati dei file recenti dell'utente vengono recently-used.xbelinteressati.

D'altra parte, Vim non ha questo problema. Non utilizza alcun database correlato alla GUI e non inserisce nulla recently-used.xbel. È stato creato solo per una console, sebbene esista anche gVim. In effetti, su alcuni sistemi Vim è la tua unica scelta di editor. Quindi è più sicuro di Gedit in quanto non causa gli stessi problemi. Stai ancora modificando come root in entrambi i casi, quindi potresti causare problemi con modifiche errate.

Secondo questo post del blog :

La prima volta che si utilizza vim, il file ~/.viminfoviene creato e se si utilizza sudo vimla prima volta che si utilizza vim dopo averlo installato su un nuovo sistema, le autorizzazioni su ~/.viminfoavranno il proprietario impostato su root anziché l'utente predefinito.

Mentre l'autore sottolinea che può portare a problemi, non c'è nulla di complesso: solo chownil file torna a te stesso.

Guarda anche:


6
Si noti che vim non è sicuro su un sistema multiutente in cui si sta tentando di limitare le autorizzazioni amministrative di altri utenti. Un utente può utilizzare sudo vimper ottenere una copia di VIM in esecuzione come root, quindi :!/bin/shper ottenere una shell root.
Segna il

3
@Mark e cosa impedisce all'utente di fare solo sudo /bin/sh? In pratica, se l'utente ha già l'accesso come root non ha bisogno di usare trucchi elaborati.
Sergiy Kolodyazhnyy

7
Il /etc/sudoersfile. Non è necessario fare %wheel ALL=(ALL) ALL- sudoconfigurazione consente di gran lunga più sfumature di quello.
Segna il

1
@Mark OK, buon punto lì - non tutti i sistemi hanno le stesse impostazioni.
Sergiy Kolodyazhnyy

Uhm ... L'autorizzazione cambierà anche se il file esiste? Supponiamo di hackerare un account utente non amministratore, ma non conosco la sua password (forse sono riuscito ad aprire una shell). Questo significa che posso copiare /bin/basha ~/.viminfo, mettere un setuid su di esso e di attesa per l'utente di eseguire sudo vimdi averlo chowned alla radice?
ChatterOne

15

È anche possibile utilizzare sudoeditper raggiungere questo obiettivo; apre una copia temporanea del file nel tuo editor, con il tuo editor in esecuzione come te. Dalla pagina man :

  1. Vengono eseguite copie temporanee dei file da modificare con il proprietario impostato sull'utente che effettua il richiamo.

  2. L'editor specificato dal criterio viene eseguito per modificare i file temporanei. La politica sudoers utilizza le SUDO_EDITOR, VISUALe EDITORvariabili d'ambiente (in questo ordine). Se nessuno di SUDO_EDITOR, VISUALo EDITORsono impostati, il primo programma elencato nell'editor sudoers(5)opzione viene utilizzata.

  3. Se sono stati modificati, i file temporanei vengono copiati nella loro posizione originale e le versioni temporanee vengono rimosse.

Funziona bene con Vim (è quello che faccio generalmente) e immagino che ti permetterebbe di usare anche Gedit. Ci sono alcune restrizioni di sicurezza .


4
Questo è molto meglio se preferisci usare la tua configurazione di vim invece di quella di root.
NieDzejkob,

2
Questo è anche più sicuro se non vuoi eseguire il codice casuale del plugin come root (tuttavia, i plugin in esecuzione in quanto puoi anche fare un sacco di danni se sono dannosi, quindi non usare plugin di cui non ti fidi primo posto).
Kevin,

2

Il link è molto vecchio (2013). Si consiglia di utilizzare gksudoo gksuper applicazioni grafiche ma entrambi stanno diventando obsoleti. In seguito la risposta accettata suggerisce anche sudo -Hperò.

Il consenso generale nella comunità Ask Ubuntu di recente è di usare:

sudo -H gedit /path/to/filename

L'unico problema rimane che sudonon ha un profilo per le impostazioni della scheda, le estensioni, la parola a capo, il nome del carattere, la dimensione del carattere, ecc. Puoi ereditarli dal tuo profilo utente anche se con uno script wrapper come questo: Come posso sincronizzare la mia radice gedit con le preferenze del mio utente gedit?


2

Sì, è sicuro da usare sudo vim. I problemi che incontro sono

  • Dover uscire dal file e riaprirlo con sudo vimper poterlo modificare.

  • Avere il root vimrccome predefinito, non le mie cose utili personalizzate.

Ecco una funzione che puoi inserire bashrcper consentire a vim di eseguire automaticamente sudo se non riesci a modificare il file normalmente.

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
}

Su Ubuntu sudodi default conserva la $HOMEvariabile d'ambiente, il che significa che sudo vim sarà usare il tuo personalizzato .vimrc, e significa anche che sudo vimcambieranno la proprietà di ~/.viminforoot: root e causare qualche inconveniente.
Marius Gedminas,

La risposta accettata non è d'accordo con te viminfo.
jeremysprofile,

1

Va bene usare vi come root. Ci saranno momenti in cui è necessario modificare un file che richiede i privilegi di sudo o root, come cambiare il file delle interfacce di rete o forse modificare il file di configurazione sshd. L'uso di root per cose grafiche è male perché le persone si connettono a IRC o navigano sul web come root. Se avessero avuto un virus mentre lo facevano, avrebbe pieno accesso alla radice.


2
C'è almeno un'eccezione specifica per l'utilizzo di vi come root. Il file che controlla il percorso sudo (/ etc / sudoers) non dovrebbe mai essere modificato con vi. Per quel file, dovrebbe essere usato il comando visudo. Non devi nemmeno specificare quale file deve essere modificato, è solo il caso speciale.
user628388

1

Qualcosa che non è stato menzionato nelle altre risposte è che l'esecuzione di vim con root darà i privilegi di root a qualsiasi plug-in installato. Quindi, la questione se sia o meno sicuro eseguire come root dipende dal fatto che tu ti fidi che quegli sviluppatori di plugin (o collaboratori del loro progetto) non posseggano il tuo sistema al suo interno.

Vim è in genere controllato dai manutentori di pacchetti in tutte le distribuzioni di Linux, quindi è facile fidarsi. Tuttavia, i plug-in vim sono in genere installati direttamente dai repository GitHub e in genere hanno molto meno controllo degli utenti (forse zero). In altre parole, non esiste un processo di verifica con loro.

Se non si caricano plug-in mentre si è in root, quindi suppongo che l'esecuzione come root dipende dal fatto che ti fidi degli sviluppatori di VIM. Puoi evitare di fidarti di loro, tuttavia, usando sudoedit, creato dagli stessi sviluppatori di sudo, persone di cui abbiamo già avuto fiducia nell'accesso root comunque. GKFX e NieDzejkob hanno già menzionato perché sudoedit è l'ideale. Oltre al fatto che non devi fidarti dell'accesso root a nessun altro oltre agli sviluppatori di sudo, puoi caricare tutti i plugin di cui ti sei già fidato con il tuo normale account utente.


Questa discussione sul non fidarsi di vari sviluppatori sembra un po 'incompleta; se hai sudoedit /etc/apt/sources.listinstallato un plug-in compromesso, puoi probabilmente inserire un repository dannoso e ottenere l'accesso root la prossima volta che esegui gli aggiornamenti comunque. Sono sicuro che esiste un lungo elenco di file protetti da root per i quali si applica qualcosa di simile. E, naturalmente, non tutti i virus richiedono root; si potrebbe prendere le tue coordinate bancarie con nient'altro che un'estensione del browser.
GKFX
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.