O Vim é seguro para uso em combinação com o sudo?

25

Não é aconselhável usar sudocom um aplicativo gráfico como gedit, conforme descrito neste link . Assim, eu tendem a usar vimcom sudo.

Recentemente, notei que o meu ~/.viminfopertencia ao root em uma instalação bastante recente do Ubuntu 16.04 (Xenial Xerus), por isso me perguntei se até o Vim é considerado gráfico ou se há algum outro problema ao invocar sudo vim. Depois de alterar a propriedade para mim via:

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

e, subseqüentemente executando sudo vim, não consegui ter ~/.viminfo propriedade de raiz. No entanto, estou certo de que recentemente ele pertenceu à raiz.

É desaconselhável invocar sudo vim?

H2ONaCl
fonte
1
Você também pode usar vim sem sudo e quando se trata de salvar o arquivo, você pode usar:w !sudo tee %
ChatterOne

Respostas:

22

Sim, é seguro.

O problema sudo gedité que os aplicativos da GUI usam determinados arquivos, como ~/.cache/dconf, e após elevados, geditesse arquivo se torna de propriedade da raiz. Bem, esse arquivo em particular contém configurações específicas do usuário para aplicativos da GUI, incluindo a área de trabalho, portanto, se o sistema não puder ler essas configurações - é ruim. IIRC, um usuário não pode iniciar uma área de trabalho específica. Os dados dos arquivos recentes do usuário recently-used.xbeltambém são afetados.

Por outro lado, o Vim não tem esse problema. Ele não usa banco de dados relacionado à GUI e não coloca nada recently-used.xbel. Foi criado apenas para o console, embora o gVim também exista. De fato, em alguns sistemas, o Vim é sua única opção de editor. Portanto, é mais seguro que o gedit em virtude de não causar os mesmos problemas. Você ainda está editando como raiz nos dois casos, para poder causar problemas com a edição incorreta.

De acordo com este post do blog :

Na primeira vez em que você usa o vim, o arquivo ~/.viminfoé criado e, se você usar sudo vima primeira vez depois de instalá-lo em um sistema novo, as permissões ~/.viminfoterão o proprietário definido como root em vez do usuário padrão.

Enquanto o autor aponta que isso pode causar problemas, não há nada complexo - apenas chowno arquivo de volta para si mesmo.

Veja também:

Sergiy Kolodyazhnyy
fonte
6
Observe que o vim não é seguro em um sistema multiusuário onde você está tentando limitar as permissões administrativas de outros usuários. Um usuário pode usar sudo vimpara obter uma cópia do vim executando como root e, em seguida, :!/bin/shobter um shell raiz.
Mark
3
@ Mark e o que impede o usuário de fazer sudo /bin/sh? Na prática, se o usuário já tiver acesso root, ele não precisará usar truques elaborados.
Sergiy Kolodyazhnyy
7
O /etc/sudoersarquivo Você não precisa fazer %wheel ALL=(ALL) ALL- a sudoconfiguração permite muito mais nuances do que isso.
Mark
1
@ Mark OK, bom ponto lá - nem todo sistema tem as mesmas configurações.
Sergiy Kolodyazhnyy 7/11
Uhm ... A permissão mudará mesmo se o arquivo existir? Suponha que eu invadir uma conta de usuário não administrador, mas não sei sua senha (talvez eu tenha conseguido abrir um shell). Isso significa que eu posso copiar /bin/bashpara ~/.viminfo, colocar um setuid nele e espera para o usuário execute sudo vimpara tê-lo chowned a raiz?
precisa saber é o seguinte
15

Também é possível usar sudoeditpara conseguir isso; ele abre uma cópia temporária do arquivo no seu editor, com o seu editor sendo executado como você. Na página do manual :

  1. São feitas cópias temporárias dos arquivos a serem editados com o proprietário definido para o usuário que está chamando.

  2. O editor especificado pela política é executado para editar os arquivos temporários. A política de sudoers usa as variáveis ​​de ambiente SUDO_EDITOR, VISUALe EDITOR(nessa ordem). Se nenhum SUDO_EDITOR, VISUALou EDITORestiver definido, o primeiro programa listado na sudoers(5)opção do editor será usado.

  3. Se eles foram modificados, os arquivos temporários são copiados de volta para o local original e as versões temporárias são removidas.

Isso funciona bem com o vim (é o que eu geralmente faço) e imagino que você também usaria o gedit. Existem algumas restrições de segurança .

GKFX
fonte
4
Isso é muito melhor se você preferir usar sua própria configuração do vim em vez da raiz.
NieDzejkob 7/11
2
Isso também é mais seguro se você não deseja executar o código aleatório de plug-in como root (no entanto, os plug-ins em execução podem causar muitos danos se forem maliciosos. Portanto, não use plug-ins nos quais não confia. primeiro lugar).
Kevin
2

O link é muito antigo (2013). Ele recomenda usar gksudoou gksupara aplicativos gráficos, mas ambos estão se tornando obsoletos. Mais tarde, a resposta aceita também sugere sudo -H.

O consenso geral na comunidade Ask Ubuntu recentemente é usar:

sudo -H gedit /path/to/filename

O único problema é que sudonão existe um perfil para configurações de guias, extensões, quebra de linha, nome da fonte, tamanho da fonte etc. Você pode herdá-las do seu perfil de usuário com um script de wrapper como este: Como sincronizar minha raiz gedit com as preferências do meu usuário gedit?

WinEunuuchs2Unix
fonte
2

Sim, é seguro de usar sudo vim. Os problemas que encontro são

  • Ter que sair do arquivo e reabri-lo sudo vimpara poder editá-lo.

  • Tendo a raiz vimrccomo padrão, não minhas coisas úteis personalizadas.

Aqui está uma função que você pode colocar no seu bashrcpara permitir que o vim sudo automaticamente, se você não puder editar o arquivo 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
}
jeremysprofile
fonte
No Ubuntu, sudopor padrão, preserva a $HOMEvariável de ambiente, o que significa que sudo vim você usará seu .vimrc personalizado e também sudo vimmudará a propriedade de ~/.viminforoot: root e causará alguns inconvenientes.
Marius Gedminas
A resposta aceita discorda de você viminfo.
Jeremysprofile #
1

É bom usar o vi como root. Haverá momentos em que você precisará editar um arquivo que exija privilégios sudo ou root, como alterar seu arquivo de interfaces de rede ou talvez editar seu arquivo de configuração sshd. Usar o root para coisas gráficas é ruim porque as pessoas se conectam ao IRC ou navegam na web como root. Se eles pegassem um vírus ao fazê-lo, ele teria acesso root completo.

A letra M
fonte
2
Pelo menos existe uma exceção específica para o uso do vi como root. O arquivo que controla o caminho do sudo (/ etc / sudoers) nunca deve ser editado com o vi. Para esse arquivo, o comando visudo deve ser usado. Você nem especifica qual arquivo está sendo editado, é apenas o caso especial.
precisa saber é o seguinte
1

Algo que não foi mencionado nas outras respostas é que a execução do vim com root dará privilégios de root a quaisquer plugins que você instalou. Portanto, a questão de saber se é seguro ou não ser executado como root depende se você confia que os desenvolvedores de plug-ins (ou colaboradores do projeto) não possuam o sistema em sua essência.

O Vim é normalmente avaliado pelos mantenedores de pacotes em todas as distribuições Linux, por isso é fácil confiar. No entanto, os plugins vim geralmente são instalados diretamente dos repositórios do GitHub e normalmente têm muito menos usuários auditando (talvez nulo). Em outras palavras, não há processo de verificação com eles.

Se você não carregar plugins enquanto estiver no root, acho que a execução como root depende se você confia nos desenvolvedores do vim. No entanto, você pode deixar de confiar neles, usando o sudoedit, criado pelos mesmos desenvolvedores do sudo, pessoas nas quais já confiamos com acesso root. GKFX e NieDzejkob já mencionaram por que o sudoedit é ideal. Além do ponto em que você não precisa confiar no acesso root a ninguém além dos desenvolvedores do sudo, você pode carregar todos os plugins em que você já confiou com sua conta de usuário normal.

JoL
fonte
Essa discussão sobre não confiar em vários desenvolvedores parece um pouco incompleta; se você tiver sudoedit /etc/apt/sources.listum plug-in comprometido instalado, provavelmente poderá inserir um repositório mal-intencionado e obter acesso root na próxima vez em que executar as atualizações. Tenho certeza de que há uma longa lista de arquivos protegidos por raiz aos quais se aplica algo semelhante. E, claro, nem todo vírus requer raiz; pode-se pegar os detalhes do seu banco com não mais do que uma extensão do navegador.
GKFX