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 -s e sudo -s ?

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

    
por Callum 15.07.2009 / 09:11

9 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 - muda você 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 para 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 - mudam para um novo usuário solicitando sua autenticação como novo usuário. sudo -s e sudo -i (e apenas sudo foo regular) permitem executar um comando para o qual você é pré-autorizado [ver /etc/sudoers ], possivelmente pedindo para confirmar sua atual ID.

Se você quer ser realmente fofo, você também pode executar sudo su - , que solicitará o login como root ( su - ) executado pelo usuário root (a parte sudo ).

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 ou sudo -i

    
por 15.07.2009 / 09:18
12
su -s

Mudará para um usuário (neste caso, root) e iniciará o shell especificado por você, ou um dos poucos outros métodos para determinar o shell. Isso é útil se você quiser usar zsh ou outro shell como root realmente rápido ... e por alguma razão você não está usando o sudo.

sudo -s

Apenas executa um shell usando sudo, o que lhe daria um shell de root. 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 fazer com que seja o mais fácil possível mudar para o uso do sudo.

    
por 15.07.2009 / 09:17
9

su é um comando para mudar para outro usuário, para executar um shell ou executar um comando específico. Você deve autenticar como o outro usuário. Se você quiser su para root, você precisa da senha de root.

sudo é um comando para executar outro comando (opcionalmente um shell) como um usuário diferente. Você deve autenticar como seu próprio usuário . A permissão para usar o sudo (e as coisas específicas que você pode fazer com isso) são especificadas por um administrador no arquivo sudoers.

Se você der a alguém acesso ao su (por exemplo, dando-lhe a senha root), eles podem fazer qualquer coisa com ele - executar outros comandos, abrir um shell, alterar a senha, fazer login remotamente via ssh e em. Você está essencialmente dando a eles acesso à outra conta, com 'su' sendo apenas uma coisa que eles podem fazer com isso.

o sudo é muito mais refinado. Você pode conceder privilégios para um usuário ou para um grupo. Você pode permitir que um usuário ou grupo faça sudo dentro de um determinado período de tempo (por exemplo, de segunda a sexta, das 9h às 17h). Você pode especificar uma lista específica de comandos que eles têm permissão para executar (por exemplo, apenas / usr / local / bin / run_backup) ou você pode especificar um usuário específico com permissão para executar comandos como (por exemplo, www, backup, staff, 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 tenha. Se você conceder acesso a alguém sudo, poderá revogá-lo removendo sua linha no arquivo sudoers ou removendo-a do grupo sudoers. Se você excluir a conta, o acesso deles será perdido.

Se você der a senha de root, mesmo que eles não façam nada desagradável com isso, eles saberão disso 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 sai ou presumir que está tudo bem para elas terem acesso total aos seus sistemas depois que você sair.

    
por 15.07.2009 / 09:25
5
  • su perguntará a senha do usuário root .
  • sudo perguntará a você sua senha (e você precisa estar liberado para acesso ao sudo para fazer isso).
por 15.07.2009 / 10:56
2

De Wikipedia :

su (short for substitute user or switch user) is a Unix command used to run the shell of another user without logging out.

A related command called sudo executes a command as another user but observes a set of constraints about which users can execute which commands as which other users (generally in a configuration file named /etc/sudoers, best editable by the command visudo). Unlike su, sudo authenticates users against their own password rather than that of the target user (to allow the delegation of specific commands to specific users on specific hosts without sharing passwords among them and while mitigating the risk of any unattended terminals).

    
por 15.07.2009 / 09:19
2

Uma coisa que não está sendo totalmente mencionada é a seguinte: qual delas você pode usar com frequência 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 desativam a conta root ( su ) por padrão. Da mesma forma, o Debian não concede aos usuários regulares qualquer privilégio padrão para sudo . (Em todos esses sistemas, você pode alterar esses padrões, mas somente se você tiver algum tipo de privilégio administrativo para começar. Suponho que estamos falando de uma situação que não é de servidor e você administra a máquina, já que estamos usando o SU de SF, mas apenas no caso.)

Finalmente, se você quiser usar sudo de maneira mais refinada, você deve olhar para man sudoers sobre como editar o arquivo / etc / sudoers . No entanto, você deve nunca editá-lo manualmente. Use o programa visudo - isso evitará que você salve suas edições, a menos que sejam pelo menos minimamente saudáveis. É uma ótima proteção contra erros simples que podem bloquear os privilégios de administrador do seu próprio sistema.

    
por 16.07.2009 / 13:10
1

Em sistemas nos quais a conta de superusuário está desabilitada, como o Mac OS X, su não funcionará; sudo -s será.

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

    
por 15.07.2009 / 09:17
1

Esta introdução pode ajudá-lo. su é a 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 por um período de tempo.

    
por 15.07.2009 / 09:17
1

su basicamente criará um novo shell de login com outros privilégios de usuário (login) O sudo permitirá temporariamente que você execute o comando usando o usuário que você especificou. Em alguns UNIX, como o FreeBDS, não há opções '-s'.

    
por 15.07.2009 / 09:23

Tags