VIM: “sudo vim bad_idea”?

20

Um usuário do irc no #Vim pediu que eu não usasse o Sudo com o Vim, como:

sudo vim bad_idea

Quando estou fazendo coisas em locais como / var / www /, não consigo escrever sem ele. Portanto, não usar o sudo se torna um problema. Obviamente, eu poderia fazer alterações em locais diferentes, como / tmp /, e copiar diretórios para / var / www. No entanto, sinto uma maneira mais fácil.

  1. Se você não "sudo Vim", por quê?
  2. Se sim à 1ª pergunta, como contornar os problemas para não usar o sudo?
Léo Léopold Hertz 준영
fonte

Respostas:

35

Caí na primeira categoria: sudo vim /var/www/html/some_fileé uma má ideia; permite escapes de shell que não são registrados. Em vez disso, use sudoedit /var/www/html/some_file; isso tem o mesmo efeito.

Kevin M
fonte
5
O que são "escapes de shell que não são registrados"? e por que não importa apenas em / var / www?
hasen
6
O vim tem o poder de executar outros comandos em uma linha de comandos. No entanto, como o vim foi iniciado via sudo e, portanto, está sendo executado como root, qualquer um desses comandos será executado com privilégios de root. Esses comandos são conhecidos como "escape de shell" e não são registrados da mesma forma que outras invocações do sudo. E não está restrito a apenas / var / www; está em todo lugar que eu usaria. Eu até aliastei "sudo vi" para "sudoedit" no meu arquivo bashrc.
Kevin M
Entendo o que você está dizendo e quero concordar, mas esclareço. Não temos idéia se suas atividades normais de raiz su e sudo estão sendo registradas ou não. "sudo vim" permite executar um subshell como root - isso é preciso; dentro desse shell, "sudo" não controlará o que o root pode ou não fazer.
PBR
3
Kevin, como você conseguiu alias "sudo vi" para "sudoedit"? No manual do bash ... "Os caracteres /, $,` e = e qualquer um dos metacaracteres do shell ou caracteres de citação listados acima podem não aparecer em um nome alternativo. " ... o espaço é um daqueles metacaracteres de que está falando.
PBR
9
OK, então não é um alias em si, mas tem o mesmo efeito: 'function sudo () {[[$ 1 == vi]] && shift && sudoedit "$ @" || comando sudo "$ @"; } '
Kevin M
10

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

% é substituído pelo nome do arquivo atual, portanto, você pode usar:

: w! sudo tee%

hyperslug
fonte
Se você usar o tee, sugiro ': w! Sudo tee%> / dev / null' para que você não veja o arquivo inteiro ecoando em você. Normalmente, uso ': w! Dd of =%', pois é mais rápido digitar e alcança a mesma coisa. Claro, isso é apenas quando eu esqueci de usar o sudoedit / sudo -e.
2113 jamessan
7

O vim permite que os usuários executem comandos arbitrários do shell; portanto, muitos administradores de sistema não permitem que o vim seja usado com o sudo.

O rvim está incluído no vim. É um vim restrito, que não permite comandos de shell. (Ou permita que você suspenda o vim, pelos mesmos motivos.)

Se você precisa ir a esses extremos por conta própria é discutível.

Richard Hoskins
fonte
11
+1. Totalmente de acordo. sudo vimem seguida, entrar :!bashe você tem um shell como root - exatamente por isso que rvimexiste
DBR
3
Na verdade, se você pode sudo vim, você pode provavelmente sudo bashou sudo su -certo?
dlamblin 15/09/09
Os privilégios do @diamblin podem ser reunidos com detalhes mais refinados do que isso, portanto não necessariamente. É por isso que o rvim é necessário. "sudo vim" é o mesmo que "sudo su -" para todos os efeitos. Em uma caixa de bits Debian onde o único usuário é o administrador do sistema, tudo isso é acadêmico.
Richard Hoskins
Como o ubuntu lida com esse problema? No CentOS vilançamentos vim, mas como raiz vilançamentos vi. No Ubuntu vimé usado em ambos os casos e sudo vitambém lançamentos vim...
CWD
6

Ao editar arquivos de configuração em todo o sistema, tudo fica bem - lembre-se sempre de que você é root e, portanto, tem todo o poder, e abandone esses privilégios assim que não precisar mais deles.

No caso especial /var/www/, ou seja, páginas de servidor da web, você pode querer pensar em alterar algumas propriedades / grupos / permissões --- mas se e como depende em grande parte de sua configuração específica (usuário único / multiusuário, servidor da web real / apenas host local, dinâmico / estático, etc.)

balpha
fonte
6
+1 de fato - essa é a melhor maneira de lidar com páginas de servidores da web. Verifique se você tem acesso a eles em vez de elevar seus privilégios.
bedwyr 16/08/09
11
-1 Não há razão para executar o vim com privilégios elevados quando o sudoedit fará o mesmo trabalho.
sml 21/09/10
4

Uma pergunta como essa me faz bater na minha testa. Estou do outro lado da segurança ", a segurança não deve interferir na experiência do usuário, a menos que seja esperado ou exigido para impedir que uma pessoa comum pratique atividades maliciosas".

Prevenir o uso do vim pelo sudo é apenas um band-aid. Como afirmado anteriormente, alguém pode simplesmente usar:

sudo su -

Ou

sudo /bin/bash

Ou

sudo nano file

Ou

sudo my_exectuable_text_editor file

ect

Se você está realmente preocupado com alguém fazendo algo malicioso na caixa, não dê a eles privilégios de sudo (ou senha de root obviamente). Não existe um marcador para impedir atividades maliciosas usando o sudo e você só ficará louco ao aplicar todas as "correções" para garantir que uma pessoa não possa fazer nada malicioso.

Alguém mencionou mudar de propriedade / grupos. Esse é um problema persistente, como se o servidor da web fosse executado como outro usuário e você alterasse as permissões no arquivo, agora, de repente, seu site não funciona. Bem, obviamente isso não irá ajudá-lo. Você pode se adicionar ao grupo em que o servidor da web executa, no entanto, se o grupo não tiver acesso de gravação aos arquivos, será necessário executar chmod -R g + w * (ou arquivos individuais do chmod) que podem não estar disponíveis. o que você quer e pode ser um aborrecimento se você precisar chmod todos os arquivos.

Algumas pessoas até sugeriram o uso do rvim. Certamente, pode-se adicionar uma linha no / etc / sudoers para permitir apenas a certos usuários o sudo rvim, no entanto, seria lógico que se você tivesse que seguir esse caminho, seria melhor implementar um gerenciador de arquivos baseado na Web. Dessa forma, ele está sendo executado como o usuário em que o servidor da Web está sendo executado, portanto, não há problemas de permissão de arquivo e você ainda pode ter um controle granular sobre quem edita quais arquivos.

Meus dois centavos de qualquer maneira.

Natalie Adams
fonte
2

A execução sudo vimnão altera o $HOMEdiretório, portanto você estará executando o Vim com permissões de root, mas $HOMEainda está apontando para o usuário normal.

Se esta é a primeira vez que você executa o Vim, pode ser que o ~/.viminfoarquivo seja criado dentro do diretório normal do usuário, mas com permissões de root.

Denilson Sá Maia
fonte
11
Depende do sudo. No meu laptop sudo vim -c '!echo $HOME' -c q, minha pasta pessoal é exibida, mas no meu servidor, ela é exibida /root. Talvez eu tenha que dar uma olhada no porquê disso, pode ser porque um OS X enquanto o Gentoo do outro, ou algo relacionado à /etc/sudoersconfiguração.
Nemo157
aha! você está certo - acabei aqui me perguntando por que meu acesso .viminfoera root apenas.
Ayrat
1

SE ESTE É O SEU PRÓPRIO COMPUTADOR ... Não vejo razão para você não usar o 'sudo vim', além do caso de borda que Denilson observou - que pode criar o seu ~ / .viminfo de propriedade do root.

Caso contrário - se um administrador de sistemas estiver restringindo o que você pode ou não fazer - por "man sudo": "na maioria dos sistemas, é possível evitar fugas de shell com a funcionalidade noexec do sudo. Consulte o manual do sudoers (5) para obter detalhes. "

Portanto, neste caso, se o seu administrador de sistemas estiver preocupado com o potencial de você executar subshells como root no vim, eles poderão usar o recurso noexec. Mas ... voltando ao caso inicial - se este é o seu computador, acho que você é bastante seguro executando o 'sudo vim'.

pbr
fonte