Respostas:
Na prática, ambos farão de você o superusuário. No entanto, eles fazem coisas ligeiramente diferentes, de maneiras ligeiramente diferentes.
Primeiro, su -
você muda para um shell de login, enquanto sudo -s
não. Na prática, isso geralmente significa que suas variáveis de ambiente não serão alteradas root
para sudo -s
. Observe que você pode executar apenas su
para não obter um shell de login ou sudo -i
para obter um shell de login [não em todas as versões].
Em segundo lugar, su
e su -
mude para um novo usuário, solicitando que você se autentique como o novo usuário. sudo -s
e sudo -i
(e apenas regular sudo foo
) permitem executar um comando para o qual você está pré-autorizado [ver /etc/sudoers
], possivelmente solicitando a confirmação do seu ID atual .
Se você quer ser realmente fofo, também pode executar sudo su -
, o que solicitará o login como root ( su -
) executado pelo usuário root (a sudo
parte).
Se o usuário root estiver bloqueado (como no Ubuntu), você não poderá fazer login como root usando su
. Nesse caso, você precisará usar sudo -s
ousudo -i
su -s
Mudará para um usuário (neste caso, raiz) e iniciará o shell que você especificar, ou um dos poucos outros métodos para determinar o shell. Isso é útil se você deseja usar o zsh ou outro shell como root muito rápido ... e por algum motivo você não está usando o sudo.
sudo -s
Apenas executa um shell usando o sudo, o que lhe daria um shell raiz. Você pode passar um shell para ele também.
su -s é mais antigo, muito mais antigo que o comando sudo -s. Meu palpite é que o desenvolvedor está tentando facilitar ao máximo a mudança para o uso do sudo.
su é um comando para mudar para outro usuário, para executar um shell ou executar um comando específico. Você deve se autenticar como o outro usuário. Se você deseja su para root, precisa da senha root.
sudo é um comando para executar outro comando (opcionalmente um shell) como um usuário diferente. Você deve se autenticar como seu próprio usuário . A permissão para usar o sudo (e as coisas específicas que você pode fazer com ele) são especificadas por um administrador no arquivo sudoers.
Se você conceder a alguém acesso ao su (fornecendo, por exemplo, a senha root), eles poderão fazer qualquer coisa com ele - executar outros comandos, abrir um shell, alterar a senha, efetuar login remotamente via ssh e assim por diante. Você está essencialmente dando a eles acesso à outra conta, com 'su' sendo apenas uma coisa que eles podem fazer com ela.
sudo é muito mais refinado. Você pode conceder privilégios a um usuário ou a um grupo. Você pode permitir que um usuário ou grupo sudo dentro de um determinado período de tempo (por exemplo, de segunda a sexta-feira, das 9:00 às 17:00). Você pode especificar uma lista específica de comandos que eles podem executar (por exemplo, apenas / usr / local / bin / run_backup) ou você pode especificar um usuário específico que ele pode executar comandos como (por exemplo, www, backup, equipe etc. )
Além de sua flexibilidade, o sudo é uma solução melhor em todos os casos, porque não requer acesso a qualquer coisa que o usuário ainda não possua. Se você conceder acesso a alguém ao sudo, poderá revogá-lo removendo a linha no arquivo sudoers ou removendo-a do grupo sudoers. Se você excluir a conta deles, o acesso será desativado.
Se você der a senha root, mesmo supondo que eles não façam nada desagradável com ela, eles saberão para sempre. Se você tiver várias pessoas que precisam de acesso root para tarefas administrativas, isso significa alterar todas as senhas raiz sempre que alguém sair ou supor que não há problema em que elas tenham acesso total aos seus sistemas depois que você sair.
Da Wikipedia :
su (abreviação de usuário substituto ou alternar usuário) é um comando Unix usado para executar o shell de outro usuário sem fazer logout.
Um comando relacionado chamado sudo executa um comando como outro usuário, mas observa um conjunto de restrições sobre quais usuários podem executar quais comandos como quais outros usuários (geralmente em um arquivo de configuração chamado / etc / sudoers, melhor editável pelo comando visudo). Diferentemente do su, o sudo autentica os usuários com sua própria senha, e não com o usuário de destino (para permitir a delegação de comandos específicos a usuários específicos em hosts específicos, sem compartilhar senhas entre eles e, ao mesmo tempo, atenuar o risco de quaisquer terminais não assistidos).
Uma coisa que não está sendo dita completamente é a seguinte: qual delas você pode usar geralmente depende de qual distribuição você está usando e quem a executa. Um ou outro ( su
ou sudo
) provavelmente não está configurado para uso total por padrão. Por exemplo, como algumas pessoas mencionaram, o OS X e o Ubuntu desabilitam a conta root ( su
) por padrão. Da mesma forma, o Debian não concede aos usuários regulares privilégios padrão sudo
. (Em todos esses sistemas, você pode alterar esses padrões, mas apenas se você tiver algum tipo de privilégio administrativo. Suponho que estamos falando de uma situação de não servidor e você administra a máquina, pois estamos no SU. do que SF, mas apenas no caso.)
Por fim, se você deseja usar de sudo
maneira mais refinada, consulte man sudoers
como editar o arquivo / etc / sudoers . No entanto, você nunca deve editá-lo manualmente. Use o programa visudo - ele impedirá que você salve suas edições, a menos que sejam pelo menos minimamente saudáveis. É uma excelente salvaguarda contra erros simples que podem impedir você de obter os privilégios de administrador do seu próprio sistema.
Nos sistemas em que a conta de superusuário está desativada, como o Mac OS X, su
não funcionará; sudo -s
vai.
Além disso, parece que não há su -s
disponível, pelo menos na minha máquina.
sudo
(o que nem sempre é instalado).
Esta introdução pode ajudá-lo. su
é uma abreviação de su root
, e você mantém seus direitos como o outro usuário indefinidamente. Mais perigoso, mas também mais conveniente se você estiver executando muitos comandos de acesso root durante um período de tempo.
O su basicamente criará um novo shell de login com outros privilégios de usuário (login). O sudo permitirá apenas que você execute temporariamente o comando usando o usuário especificado. Em alguns UNIX como o FreeBDS, não há opções '-s'.
sudo
não dá privilégios padrão para usuários regulares. Nesses sistemas,su
é a única opção.