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.