A diferença principal entre sudo
e su
é o mecanismo usado para autenticar. Com su
o usuário deve saber a senha root
(que deve ser um segredo bem guardado), enquanto com sudo
o usuário usa sua própria senha. Para impedir que todos os usuários causem o caos, os privilégios descarregados pelo comando sudo
podem, felizmente, ser configurados usando o arquivo /etc/sudoers
.
Ambos os comandos executam um comando como outro usuário, geralmente root
.
sudo su -
funciona no exemplo fornecido porque o usuário (ou um grupo no qual o usuário é membro) está configurado no arquivo /etc/sudoers
. Ou seja, eles são permitidos para usar sudo
. Armado com isso, eles usam o sudo
para ganhar temporariamente root
privileges (que é o padrão quando nenhum nome de usuário é fornecido) e como root
iniciam outro shell ( su -
). Eles agora têm root
de acesso sem saber a senha de root
.
Por outro lado, se você não permitir que o usuário use sudo
, eles não poderão sudo su -
.
As distribuições geralmente têm um grupo (geralmente chamado de wheel
) cujos membros podem usar sudo
para executar todos os comandos. Removê-los deste grupo significa que eles não podem usar sudo
por padrão.
A linha em /etc/sudoers
que faz isso é:
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
Embora a remoção de usuários desse grupo torne seu sistema mais seguro, também é necessário que você (ou outros administradores do sistema) execute mais tarefas administrativas no sistema em nome de seus usuários.
Um compromisso mais sensato configuraria sudo
para dar a você um controle mais refinado de quem pode usar sudo
e quem não é, junto com quais comandos eles podem usar (em vez do padrão < em> todos comandos). Por exemplo,
## Allows members of the users group to mount and unmount the
## cdrom as root
%users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
(útil somente com a linha de rolagem anterior comentada ou sem usuários no grupo wheel
).
Presumivelmente, as distribuições não vêm com essa configuração mais refinada como padrão, pois é impossível prever quais são os requisitos do administrador para seus usuários e sistema.
A linha final é - aprenda os detalhes de sudo
e você pode parar sudo su -
enquanto permite outros comandos que não dão ao usuário root
shell acesso ou acesso a comandos que podem alterar os arquivos de outros usuários. Você deve considerar seriamente quem você permite usar sudo
e em que nível.
AVISO: Sempre use o comando visudo
para editar o arquivo sudoers
enquanto ele verifica suas edições e tenta salvá-lo da situação embaraçosa em que um arquivo mal configurado (devido a erro de sintaxe) impede que você use sudo
para editar erros. Isto é especialmente verdade no Debian / Ubuntu e nas variantes em que a conta root
está desativada por padrão.