Qual é a diferença entre os comandos "su -s" e "sudo -s"?

23

Qual é a diferença entre os dois comandos de superusuário su -se sudo -s?

Ambos fornecem um shell com acesso à conta do superusuário.

Callum
fonte

Respostas:

30

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 -snão. Na prática, isso geralmente significa que suas variáveis ​​de ambiente não serão alteradas rootpara sudo -s. Observe que você pode executar apenas supara não obter um shell de login ou sudo -ipara obter um shell de login [não em todas as versões].

Em segundo lugar, sue su -mude para um novo usuário, solicitando que você se autentique como o novo usuário. sudo -se 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 sudoparte).

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 -sousudo -i

Mikeage
fonte
5
Também vale a pena dizer que em muitas distribuições sudonão dá privilégios padrão para usuários regulares. Nesses sistemas, sué a única opção.
Telemachus
12
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.

Mark Turner
fonte
9

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.

Dan Udey
fonte
boa explicação das diferenças entre os dois comandos su e sudo.
John aka hot2use
5
  • su pedirá a senha do usuário root .
  • O sudo solicitará sua senha (e você precisará ser limpo para ter acesso ao sudo).
badp
fonte
2
Geralmente, esse é o comportamento padrão do sudo, mas também pode ser configurado para solicitar a senha root ou outra senha.
theotherreceive
2

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).

Yaakov Ellis
fonte
2

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 ( suou 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 sudomaneira mais refinada, consulte man sudoerscomo 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.

Telêmaco
fonte
1

Nos sistemas em que a conta de superusuário está desativada, como o Mac OS X, sunão funcionará; sudo -svai.

Além disso, parece que não há su -sdisponível, pelo menos na minha máquina.

jtbandes
fonte
O inverso é frequentemente verdadeiro. Ou seja, em muitas distribuições antigas do tipo unix, os usuários comuns não têm privilégios padrão sudo(o que nem sempre é instalado).
Telemachus
1

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.

Nikhil Chelliah
fonte
1

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'.

hendrasaputra
fonte