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

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

so sudo é executável por qualquer usuário, e qualquer usuário que execute sudo terá raiz como o ID de usuário efetivo do processo porque o bit set-user-id de /usr/bin/sudo está definido.

De link

the most visible difference between sudo and su is that sudo requires the user's password and su requires root's password.

  1. Qual senha do usuário a sudo solicita? É 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 sudo e fornecendo sua própria senha? O Linux pode restringir isso a alguns usuários?

  2. É correto que sudo peça a senha após 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 mais tarde?

Obrigado.

Eu li o link , mas ele não responde às perguntas acima.

    
por Tim 01.05.2018 / 21:52

4 respostas

22
  1. Em sua configuração mais comum, sudo solicita a senha do usuário executando sudo (como você diz, o usuário corresponde ao ID do usuário real do processo). O ponto de sudo é conceder privilégios extras a usuários específicos (conforme determinado pela configuração em sudoers ), sem que esses usuários tenham que fornecer qualquer outra autenticação além da própria. No entanto, sudo faz verificar se o usuário que está executando sudo é realmente quem afirma ser, e faz isso solicitando sua senha (ou qualquer mecanismo de autenticação configurado para sudo , geralmente usando o PAM - então isso pode envolver uma impressão digital ou autenticação de dois fatores, etc.).

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

  2. sudo realmente solicita a senha depois que ela é iniciada; não pode fazer nada ( isto é, não pode fazer nada antes ser executado). O ponto de sudo pedir a senha, mesmo sendo a raiz, é verificar a identidade do usuário em execução (em sua configuração típica).

por 01.05.2018 / 23:10
12

sudo geralmente solicita a senha do usuário que a executa, embora isso possa ser configurado :

Unlike su(1), when sudoers requires authentication, it validates the invoking user's credentials, not the target user's (or root's) credentials. This can be changed via the rootpw, targetpw and runaspw flags, described later.

A configuração rootpw tem sudo sempre solicita a senha do root, targetpw solicita a senha do usuário sudo eventualmente executará o programa como e runaspw solicita a senha do usuário definida em runas_default .

Um conjunto de binário sudo assim pode, de fato, ser iniciado com privilégios de root por qualquer usuário. Assumindo que sudo não tenha nenhum bug com seu código de autenticação, isso por si só não importa muito.

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

    
por 01.05.2018 / 23:22
8

Das primeiras linhas de man sudo :

DESCRIPTION
sudo allows a permitted user to execute a command as the superuser or another user, as specified by the security policy. The invoking user's real (not effective) user ID is used to determine the user name with which to query the security policy.

Então:

  1. O ID do usuário real (não eficaz) do usuário solicitante é usado ...
  2. Sim, qualquer usuário ( permitido ) pode obter privilégios adicionais para o superusuário (ou outro) executando sudo e, em seguida, fornecendo o ( configurado ) autentificação requerida. Ambos permitidos e configurados são definidos no (s) arquivo (s) sudoers.

  3. O Linux pode restringir isso a alguns usuários?
    Sim, pode, mas isso não acontece. 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 . Normalmente, outros arquivos (também / em vez disso) podem ser usados.

De man setresuid :

DESCRIPTION
setresuid() sets the real user ID, the effective user ID, and the saved set-user-ID of the calling process.

  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. Após o kernel carregou 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 somente pelo usuário root) o próprio executável (sudo) autentica o usuário solicitando sua senha (ou algo mais como configurado) e decide se e quais permissões conceder.

por 02.05.2018 / 00:08
-1

Adicional a outras boas respostas sobre sudo :

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

    
por 03.05.2018 / 18:31