sudoedit: por que usá-lo em vez do sudo vi?

sudoedit: por que usá-lo em vez do sudo vi?

De acordo compágina de manual:

sudoedit /etc/file

cria uma cópia do arquivo, abre-o como o usuário atual e, quando salvo, substitui o arquivo existente pela cópia.

enquanto

sudo vi /etc/file

abre o arquivo como root

A página de manual afirma que o sudoedit é diferente do sudo porque:

o editor é executado com o ambiente do usuário invocador não modificado

O primeiro método é mais seguro? Em caso afirmativo, por quê? Existem outras razões para usar o sudoedit em vez do sudo vi?

Responder1

Me deparei com essa questão enquanto procurava por algo completamente não relacionado, mas pensei em acrescentar a seguinte distinção importante, que não foi mencionada até agora:sudoedit não executa seu editor como root.

$ sudo vim /etc/farts.conf 

Simplesmente executará o vim como root, permitindo que ele leia o arquivo. A desvantagem é que o editor agora também roda como root e pode fazer qualquer coisa. Se você apenas quisesse permitir que um usuário editasse um arquivo de configuração e nada mais, que pena, você apenas deu a eleraizem todo o sistema. Nada me impede de gerar um shell do vim com :shor :!command, e como são subprocessos, também serão executados como root.

Por outro lado:

$ sudoedit /etc/farts.conf

na verdade operarão de maneira diferente. Ele criará uma cópia com um nome exclusivo em /tmp com permissões bloqueadas apenas para o seu usuário e, em seguida, gerará seu editor normalmente, sem privilégios de root, nessa cópia.

Depois de sair do editor, ele comparará o arquivo temporário e o arquivo original e substituirá com segurança o original pela sua edição, caso ela tenha sido alterada.

Nesse cenário, torna-se possível permitir que um usuário edite um arquivo do sistema, mas não permitir que ele execute binários aleatórios como root ou cutuque em qualquer lugar do sistema de arquivos.

Essa é principalmente a diferença real, o resto que foi mencionado são apenas efeitos colaterais interessantes.

Responder2

Em primeiro lugar, sudo vimjá menciona explicitamente o seu editor padrão, o que não é necessário se você o tiver definido em $EDITOR. sudoeditevita que você defina o editor toda vez que quiser editar algo - e em um sistema multiusuário permite que todos usem o editor de sua preferência.

Como assim? Considere um sistema onde usuários normais só obtêm sudoprivilégios para editar determinados arquivos. Eles estão proibidos de executar sudoqualquer outra coisa. Você teria que permitir que eles fizessem sudo vie sudo vime sudo nanoe sudo emacse sudo pico(etc.). Em vez de ter que fazer isso, você pode simplesmente permitir que eles acessem sudoedito arquivo, com a escolha de configuração $EDITORcomo quiserem. (Imagine que você forçaria um amante do Emacs a usar o Vim…)

Outro problema é que se o seu $EDITORestiver definido como vim, e você tiver configurações de personalização para ele no seu usuário .vimrc, essas configurações não serão usadas se você usar sudo vimou sudo $EDITOR. sudoeditno entanto, preserva o ambiente do usuário chamador e, portanto, suas configurações.

Veja também:O que há de tão bom no sudoedit?

informação relacionada