
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 :sh
or :!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 vim
já menciona explicitamente o seu editor padrão, o que não é necessário se você o tiver definido em $EDITOR
. sudoedit
evita 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 sudo
privilégios para editar determinados arquivos. Eles estão proibidos de executar sudo
qualquer outra coisa. Você teria que permitir que eles fizessem sudo vi
e sudo vim
e sudo nano
e sudo emacs
e sudo pico
(etc.). Em vez de ter que fazer isso, você pode simplesmente permitir que eles acessem sudoedit
o arquivo, com a escolha de configuração $EDITOR
como quiserem. (Imagine que você forçaria um amante do Emacs a usar o Vim…)
Outro problema é que se o seu $EDITOR
estiver 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 vim
ou sudo $EDITOR
. sudoedit
no 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?