Com su, você se torna outro usuário - root por padrão, mas potencialmente outro usuário. Se você disser su -, seu ambiente também será substituído pelo ambiente de login desse usuário, de modo que o que você vê é indistinguível de efetuar login como esse usuário. Não há como o sistema saber o que você faz enquanto faz sucom outro usuário as ações desse usuário quando ele faz login.
As coisas são muito diferentes com sudo:
Os comandos que você executa sudo executam como o usuário de destino - root por padrão, mas podem ser alterados com -u- mas registram os comandos executados, marcando-os com seu nome de usuário para que a culpa possa ser atribuída posteriormente. :)
sudoé muito flexível. Você pode limitar os comandos que um determinado usuário ou grupo de usuários tem permissão para executar, por exemplo. Com su, é tudo ou nada.
Esse recurso geralmente é usado para definir funções. Por exemplo, você pode definir um grupo de "backups" com permissão para execução dumpe tar, cada um deles precisa de acesso root para fazer o backup adequado do disco do sistema.
Menciono isso aqui porque significa que você pode dar sudoprivilégios a alguém sem dar a eles sudo -sou sudo bashhabilidades. Eles têm apenas as permissões necessárias para realizar seu trabalho, enquanto suexecutam todo o sistema. Porém, você deve ter cuidado com isso: se você der a alguém a capacidade de dizer sudo vi, por exemplo, ela pode se livrar vie ter efetivamente o mesmo poder que com sudo -s.
Como leva a senha do sudoer em vez da senha root, sudoisola a permissão entre vários sudoers.
Isso resolve um problema administrativo com o suqual é que, quando a senha root muda, todos aqueles que precisavam conhecê-la sudeveriam ser informados. sudopermite que as senhas dos sudoers sejam alteradas independentemente. De fato, é comum bloquear com senha a conta do usuário root em um sistema sudopara forçar a execução de todas as tarefas sysadmin sudo. Em uma organização grande com muitos sudoers confiáveis, isso significa que quando um dos administradores do sistema sai, você não precisa alterar a senha root e distribuí-la aos administradores que permanecerem.
A principal diferença entre sudo bashe sudo -sé que -sé mais curta e permite passar comandos para executar no shell padrão do usuário de duas maneiras:
Você pode dizer sudo -s some-commandqual é executado some-commandsob o seu shell. É basicamente uma abreviação de sudo $SHELL -c some-command.
Em vez disso, você pode passar os comandos para a entrada padrão do shell, como sudo -s < my-shell-script. Você pode usar isso com um heredoc para enviar vários comandos para uma única sudochamada, evitando a necessidade de digitar sudorepetidamente.
Ambos os comportamentos são opcionais. Muito mais comumente, você cede -ssozinho, por isso apenas executa o shell do usuário interativamente. Nesse modo, ele difere de sudo bashque pode executar um shell diferente do que bash, uma vez que parece primeiro na SHELLvariável de ambiente e, em seguida, se não estiver definido, na configuração do shell de login do usuário, normalmente em /etc/passwd.
O shell executado sudo -sherda seu ambiente de usuário atual. Se o que você realmente deseja é um ambiente limpo, como você obtém logo após o login, o que você deseja é sudo -iuma adição relativamente recente ao sudo. Grosso modo, sudo -ié o sudo -sque su -é su: redefine todas, exceto algumas variáveis-chave do ambiente, e envia de volta ao diretório inicial do usuário. Se você também não der comandos para executar sob esse shell via entrada padrão ou sudo -i some-command, ele será executado como um shell de logon interativo, para que os scripts de inicialização do shell do usuário (por exemplo .bash_profile) sejam executados novamente.
Tudo isso torna sudo -iconsideravelmente mais seguro que sudo -s. Por quê? Porque se alguém puder modificar seu ambiente antes sudo -s, poderá causar a execução de comandos não intencionais. O caso mais óbvio é a modificação SHELL, mas também pode acontecer menos diretamente, como via PAGERse você disser man fooenquanto está abaixo sudo -s.
Você pode dizer: "Se eles podem modificar PAGER, eles podem modificar PATHe, em seguida, podem simplesmente substituir um sudoprograma maligno ", mas alguém suficientemente paranóico pode dizer /usr/bin/sudo /bin/bashpara evitar essa armadilha. Você provavelmente não é tão paranóico que também evita as armadilhas em todas as outras variáveis de ambiente suscetíveis. Você também se lembrou de verificar EDITOR, por exemplo, antes de executar qualquer comando VCS ? Assim sudo -i.
Como sudo -itambém altera o diretório de trabalho para o diretório inicial do usuário, você ainda pode querer usá sudo -s-lo nas situações em que sabe que deseja permanecer no mesmo diretório em que estava cdquando executou sudo. Ainda é mais seguro sudo -ie de cdvolta para onde você estava.
sudo su -Desse modo, você não precisa da senha root e-garante que o diretório pessoal esteja definido corretamente.