VIM: “sudo vim bad_idea”?


20

Un utente irc in #Vim mi ha esortato a non usare Sudo con Vim come:

sudo vim bad_idea

Quando sto facendo cose in luoghi come / var / www /, non posso scrivere senza di esso. Quindi non usare sudo diventa un problema. Naturalmente, potrei apportare modifiche in diverse posizioni come / tmp / e quindi copiare le directory in / var / www. Tuttavia, percepisco un modo più semplice.

  1. Se non "sudo Vim", perché?
  2. In caso affermativo alla prima domanda, come si evitano i problemi a non usare sudo?

Risposte:


35

Ricado nella prima categoria: sudo vim /var/www/html/some_fileè una cattiva idea; consente fughe di shell che non sono registrate. Invece, usa sudoedit /var/www/html/some_file; quello ha lo stesso effetto.


5
Cosa sono le "escape della shell che non sono registrate"? e perché non importa solo in / var / www?
hasen

6
vim ha il potere di eseguire altri comandi su una riga comandi. Tuttavia, poiché vim è stato avviato tramite sudo ed è quindi in esecuzione come root, tutti questi comandi verranno eseguiti con i privilegi di root. Questi comandi sono noti come "shell escape" e non sono registrati come altre invocazioni di sudo. E non è limitato a solo / var / www; è ovunque che lo userei. Nel mio file bashrc ho persino "aldo vi" su "sudoedit".
Kevin M,

Vedo cosa stai cercando e voglio essere d'accordo ma chiarire. Non abbiamo idea se le sue normali attività su e sudo root vengano registrate o meno. "sudo vim" consente di eseguire una subshell come root - questo è molto preciso; all'interno di quella shell, "sudo" non controllerà ciò che root può e non può fare.
PBR

3
Kevin, come sei riuscito ad alias "sudo vi" a "sudoedit"? Dal manuale di bash ... "I caratteri /, $,` e = e tutti i metacaratteri della shell o i caratteri di citazione elencati sopra potrebbero non apparire in un nome alias. " ... lo spazio è uno di quei metacaratteri di cui parla.
PBR

9
OK, quindi non è un alias in sé, ma ha lo stesso effetto: 'function sudo () {[[$ 1 == vi]] && shift && sudoedit "$ @" || comando sudo "$ @"; } "
Kevin M,

10

Consultare: /programming/1005/getting-root-permissions-on-a-file-inside-of-vi :

% viene sostituito con il nome del file corrente, quindi è possibile utilizzare:

: w! sudo tee%


Se hai intenzione di usare tee, ti suggerirei ': w! Sudo tee%> / dev / null' in modo da non farti riecheggiare l'intero file. In genere uso ": w! Dd di =%" invece poiché è più veloce da digitare e ottiene la stessa cosa. Ovviamente, questo è solo quando ho dimenticato di usare sudoedit / sudo -e.
Jamessan,

7

vim consente agli utenti di eseguire comandi di shell arbitrari, pertanto molti amministratori di sistema non consentono l'utilizzo di vim con sudo.

rvim è incluso in vim. È un vim limitato, che non consente i comandi di shell. (O consentirti di sospendere Vim, per gli stessi motivi.)

Se hai bisogno di andare a questi estremi nella tua scatola è discutibile.


1
+1. Sono completamente d'accordo. sudo vimpoi entra :!bashe hai una shell come root - esattamente perché rvimesiste
dbr

3
In realtà se puoi sudo vim, probabilmente sudo basho sudo su -no?
dlamblin,

I privilegi di @diamblin possono essere raccolti con dettagli più fini di così, quindi non necessariamente. Ecco perché è necessario rvim. "sudo vim" è uguale a "sudo su -" a tutti gli effetti. Su una scatola di bit Debian in cui l'unico utente è l'amministratore di sistema, questo è tutto accademico.
Richard Hoskins,

In che modo Ubuntu gestisce questo problema? Su CentOS viene viavviato vimma come root viene viavviato vi. Su Ubuntu vimviene utilizzato in entrambi i casi e viene sudo vianche avviato vim...
cwd,

6

Quando modifichi i file di configurazione a livello di sistema, va tutto bene --- ricorda sempre che sei root e quindi hai tutto il potere, e rilascia quei privilegi non appena non ti servono più.

Nel caso speciale /var/www/, ad esempio le pagine del server Web, potresti voler pensare a cambiare alcune proprietà / gruppi / autorizzazioni --- ma se e quanto dipende in gran parte dalla tua configurazione specifica (singolo / multiutente, vero web server / solo localhost, dinamico / statico, ecc.)


6
+1 in effetti - questo è il modo migliore di gestire le pagine del server web. Assicurati di avervi accesso anziché elevare i tuoi privilegi.
bedwyr

1
-1 non c'è motivo per eseguire vim con privilegi elevati quando sudoedit farà lo stesso lavoro.
sml

4

Una domanda come questa mi fa schioccare la fronte. Sono dall'altro lato della sicurezza, "la sicurezza non dovrebbe interferire con l'esperienza dell'utente, a meno che non sia previsto o richiesto per impedire alla persona media di svolgere attività dannose".

Prevenire l'uso sudo di vim è solo un cerotto. Come affermato in precedenza, qualcuno può semplicemente usare:

sudo su -

O

sudo /bin/bash

O

sudo nano file

O

sudo my_exectuable_text_editor file

ect

Se sei davvero preoccupato per qualcuno che fa qualcosa di dannoso sulla scatola, non dare loro privilegi sudo (o password di root ovviamente), punto. Non esiste un proiettile a nastro per impedire attività dannose utilizzando sudo e ti farà impazzire solo "applicando" tutte le "correzioni" per assicurarti che una persona non possa fare nulla di dannoso.

Qualcuno ha menzionato il cambio di proprietà / gruppi. Questo è un problema grave come se il web server fosse eseguito come un altro utente e tu cambiassi i permessi sul file, ora all'improvviso il tuo sito non funziona. Beh, ovviamente questo non ti aiuterà. È possibile aggiungersi al gruppo in cui viene eseguito il server Web, tuttavia, se il gruppo non ha accesso in scrittura ai file, è necessario eseguire chmod -R g + w * (o singoli file chmod) che potrebbe non essere quello che vuoi e può essere una seccatura se devi modificare ogni file.

Alcune persone hanno persino suggerito di usare rvim. Certo, si potrebbe semplicemente aggiungere una riga in / etc / sudoers per consentire solo a determinati utenti di sudo rvim, tuttavia sarebbe logicamente logico che se si dovesse percorrere quella strada, potrebbe essere meglio implementare un file manager basato sul web. In questo modo è in esecuzione come l'utente sul quale è in esecuzione il server Web, quindi nessun problema di autorizzazione dei file e puoi comunque avere un controllo granulare su chi modifica i file.

I miei due centesimi comunque.


2

L'esecuzione sudo vimnon cambierà la $HOMEdirectory, quindi eseguirai Vim con i permessi di root, ma $HOMEcontinui a puntare al tuo normale utente.

Se è la prima volta che esegui Vim, può succedere che il ~/.viminfofile venga creato nella tua normale directory utente, ma con i permessi di root.


1
Dipende dal sudo. Sul mio laptop sudo vim -c '!echo $HOME' -c qdà la mia cartella home, ma sul mio server dà /root. Potrei dare un'occhiata al perché, potrebbe essere perché il proprio OS X mentre l'altro è Gentoo, o potrebbe essere qualcosa a che fare con il modo in cui /etc/sudoersè configurato.
Nemo157,

aha! hai ragione - sono finito qui chiedendomi perché il mio .viminfofosse accessibile solo alla radice.
Ayrat,

1

SE QUESTO È IL TUO COMPUTER ... Non vedo alcun motivo per cui non si possa usare 'sudo vim', a parte il caso limite notato da Denilson - che potrebbe creare il tuo ~ / .viminfo di proprietà di root.

Altrimenti - se un amministratore di sistema sta limitando ciò che puoi e non puoi fare - per "man sudo": "sulla maggior parte dei sistemi è possibile prevenire la fuga di shell con la funzionalità noexec di sudo. Per i dettagli, consultare il manuale di sudoers (5). "

Quindi, in questo caso, se il tuo amministratore di sistema è preoccupato per il potenziale di eseguire subshells come root all'interno di vim, possono utilizzare la funzionalità noexec. Ma ... tornando al caso iniziale - se questo è il TUO computer, penso che tu sia dannatamente sicuro eseguendo 'sudo vim'.


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.