Qual é a diferença entre conta root e raízes simuladas?

4

Então, se eu desativar minha conta raiz com sudo passwd -dl root , ainda tenho acesso a sudo {su,bash} ou sudo -{s,i} conceitualmente, como os direitos elavados são diferentes da conta raiz?

Eu sei a diferença entre cada uma das elevações , ou shells, estou à procura de uma diferença profunda entre uma conta e direitos elevados?

    
por kmassada 04.12.2012 / 15:52

2 respostas

4

Não há diferença. sudo altera seu ID de usuário para root, sem considerar se a conta root possui ou não uma senha.

A diferença entre sudo -s e sudo -i é se as variáveis de ambiente (como $ HOME) são mantidas ou não em seus valores atuais (portanto, ~ ainda aponta para seu diretório pessoal) ou são redefinidas para os valores root ficaria se ele logasse normalmente.

    
por psusi 04.12.2012 / 16:32
3

passwd -dl root não desativa o usuário root. Ele remove e "bloqueia" a senha, ou seja, define um hash de senha sem sentido.

Ter uma conta com uma senha bloqueada significa que você não pode entrar no usuário usando a senha. su, login e lightdm não permitirão que você faça login como root porque, por padrão , eles perguntam a senha do usuário.

No entanto o sudo funciona de uma maneira diferente: aproximadamente, ele tem uma lista de usuários que podem rodar o sudo (os usuários dessa lista são chamados de sudoers ) e, por padrão , pede a senha do usuário lançou o sudo.

Por isso, usando o sudo, você pode logar na raiz mesmo que a raiz não tenha uma senha. Se você tentar o comando su root , verá que não poderá efetuar login, porque ele pedirá uma senha que você não pode fornecer.

su, login, lightdm, sudo, ssh e outros são todos os programas que você pode usar para efetuar login em um sistema como usuário, mas eles lidam com a autenticação de maneiras diferentes. É importante não confundir o método de autenticação com a ação do login .

Como você pode esperar, o tópico de autenticação é bastante longo e pode ser complicado. Explicar aqui todos os métodos de autenticação disponíveis e como utilizá-los seria muito difícil. Felizmente há uma ferramenta que pode lhe dar respostas mais exaustivas: cara, o que com certeza você já sabe. Você pode estar interessado em ler:

  • man passwd
  • man su
  • man sudo
  • man login

Em particular, man passwd contém este parágrafo que você pode achar interessante:

   -l, --lock
       Lock the password of the named account. This option disables a password by
       changing it to a value which matches no possible encrypted value (it adds a
       ´!´ at the beginning of the password).

       Note that this does not disable the account. The user may still be able to
       login using another authentication token (e.g. an SSH key). To disable the
       account, administrators should use usermod --expiredate 1 (this set the
       account's expire date to Jan 2, 1970).

       Users with a locked password are not allowed to change their password.

Portanto, para desabilitar o usuário root, você deve executar usermod --expiredate 1 root . Embora a experimentação seja sempre uma coisa boa, lembre-se de que esse comando pode ser realmente perigoso e tornar sua caixa inutilizável. Então, se você quiser experimentar, certifique-se de saber como recuperar seu sistema ou (melhor) usar um container chroot / linux / máquina virtual / live CD / live USB.

Dito isto, você notará que às vezes você receberá uma mensagem como esta:

Your account has expired; please contact your system administrator
su: Authentication failure

No entanto, existem outras maneiras de usar contas expiradas. Por exemplo, o sudo ignora a data de expiração do usuário de destino (mas verifica a data de expiração do sudoer). Também o ignora, mas apenas quando executado como root:

Your account has expired; please contact your system administrator
su: Authentication failure
(Ignored)

Para realmente tornar um usuário inacessível, você deve lidar com o PAM. Veja man 7 pam e sua seção VEJA TAMBÉM para mais informações.

    
por Andrea Corbellini 04.12.2012 / 16:49