Qual senha do usuário o `sudo` pede?

10
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul  4  2017 /usr/bin/sudo

portanto, sudoé executável por qualquer usuário, e qualquer usuário que executa sudoterá root como o ID do usuário efetivo do processo porque o bit set-user-id /usr/bin/sudoestá definido.

De https://unix.stackexchange.com/a/11287/674

a diferença mais visível entre sudo e su é que sudo requer a senha do usuário e su requer a senha do root.

  1. Qual senha do usuário sudosolicita? O usuário é representado pelo ID do usuário real do processo?

    Se sim, nenhum usuário pode obter o privilégio de superusuário executando sudoe fornecendo sua própria senha? O Linux pode restringir isso em alguns usuários?

  2. É verdade que sudopede a senha depois de execve() começar a executar main()de /usr/bin/sudo?

    Como o euid do processo foi alterado para root (porque o bit set-user-id de / usr / bin / sudo está definido), qual é o sentido do sudo pedir senha posteriormente?

Obrigado.

Eu li https://unix.stackexchange.com/a/80350/674 , mas ele não responde às perguntas acima.

Tim
fonte
3
Não é um usuário, mas apenas aqueles incluídos na lista de sudoers.
1155 Rodrigo Rodrigo
1
@Rodrigo Isso soa como uma resposta, coloque-a em uma resposta, não em um comentário.
Philip Kendall
2
@PhilipKendall Isso respondeu apenas parte das dúvidas do OP.
Rodrigo

Respostas:

22
  1. Na configuração mais comum, sudosolicita a senha do usuário em execução sudo (como você diz, o usuário correspondente ao ID do usuário real do processo). O objetivo sudoé conceder privilégios extras a usuários específicos (conforme determinado pela configuração sudoers), sem que esses usuários tenham que fornecer outra autenticação além da sua. No entanto, sudo faz verificação de que o usuário que executa sudorealmente é quem diz ser, e ele faz isso por pedir a sua senha (ou qualquer mecanismo de autenticação está configurado para sudo, geralmente usando PAM - de modo que este poderia envolver uma impressão digital, ou de dois fatores autenticação etc.).

    sudonão necessariamente concede o direito de se tornar root, ele pode conceder uma variedade de privilégios. Qualquer usuário autorizado a se tornar root sudoerspode fazê-lo usando apenas sua própria autenticação; mas um usuário não tem permissão, não pode (pelo menos não usando sudo). Isso não é imposto pelo próprio Linux, mas por sudo(e sua configuração de autenticação).

  2. sudorealmente pede a senha depois que ela começa a ser executada; não pode fazer o contrário ( ou seja , não pode fazer nada antes de começar a rodar). O objetivo de sudosolicitar a senha, mesmo sendo raiz, é verificar a identidade do usuário em execução (em sua configuração típica).

Stephen Kitt
fonte
12

sudogeralmente solicita a senha do usuário que está executando, embora isso possa ser configurado :

Ao contrário su(1), quando sudoersrequer autenticação, valida as credenciais do usuário que está chamando, não as credenciais do usuário de destino (ou raiz). Isto pode ser alterado através dos rootpw, targetpwe runaspwbandeiras, descritos mais tarde.

Definição rootpwtem sudosempre pedir a senha de root, targetpwpede a senha do usuário sudoacabará por executar o programa como, e runaspwpede a senha do conjunto de utilizador no runas_default.

Uma sudoconfiguração binária como essa pode realmente ser iniciada com privilégios de root por qualquer usuário. Supondo sudoque não haja nenhum erro com seu código de autenticação, isso por si só não importará muito.

De maneira semelhante, qualquer processo também pode executar código no modo kernel, chamando qualquer chamada do sistema, digamos open(). (isso não é o mesmo que código do espaço do usuário que raiz.) Enquanto o kernel não tiver bugs, eles não poderão executar código arbitrário.

ilkkachu
fonte
8

A partir da primeira linha (s) de man sudo:

DESCRIÇÃO
sudo permite que um usuário permitido execute um comando como superusuário ou outro usuário, conforme especificado pela política de segurança. O ID do usuário real (não efetivo) do usuário que está chamando é usado para determinar o nome do usuário com o qual consultar a política de segurança.

Assim:

  1. O ID do usuário real (não eficaz) do usuário que está chamando é usado ...
  2. Sim, qualquer usuário ( permitido ) pode obter privilégios adicionais do superusuário (ou outro) executando o sudo e fornecendo a autenticação ( configurada ) necessária. Permitido e configurado são definidos no (s) arquivo (s) do sudoers.

  3. O Linux pode restringir isso em alguns usuários?
    Sim, pode, mas não. O Linux está configurado para permitir que o binário sudo tome a decisão com base no conjunto de regras (política de segurança) dentro do programa sudo e dentro do arquivo /etc/sudoers. Geralmente, outros arquivos (também / em vez disso) podem ser usados.

De man setresuid:

DESCRIÇÃO
setresuid () define o ID do usuário real, o ID do usuário efetivo e o set-user-ID salvo do processo de chamada.

  1. A única maneira de obter permissões de superusuário concedidas pelo kernel é executar um programa suid. Não pode ser de outra forma. É a maneira que o Linux selecionou para conceder permissões de superusuário.

  2. Depois que o kernel carrega um executável que não pode ser modificado por nenhum outro usuário (arquivo e diretório de propriedade do root e gravável apenas pelo root), o próprio executável (sudo) autentica o usuário solicitando sua senha (ou outra coisa como configurada) e decide se e quais permissões conceder.

Isaac
fonte
-1

Adicional a outras boas respostas sobre sudo:

supermite que você efetivamente se torne um usuário diferente. No meu próprio computador, não corro como administrador para o uso diário - o que significa que, entre outras coisas, não posso (diretamente) usar sudo. Se eu quiser usar sudo, posso usar supara "me tornar" o usuário Administrador e, em seguida, nessa função sudo. Nessa situação, acabo inserindo a senha da conta de administrador duas vezes - uma vez quando executo sue outra quando executo sudo.

Stephen R
fonte