$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul 4 2017 /usr/bin/sudo
so sudo
pode ser executado por qualquer usuário, e qualquer usuário que executar sudo
terá root como o ID de usuário efetivo do processo porque o bit set-user-id de /usr/bin/sudo
está 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.
A senha de qual usuário
sudo
solicita? É o usuário representado pelo ID de 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 para alguns usuários?É correto que
sudo
pede a senha apósexecve()
iniciar a execuçãomain()
do/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 de sudo solicitar a senha mais tarde?
Obrigado.
Eu li https://unix.stackexchange.com/a/80350/674 , mas não responde às perguntas acima.
Em sua configuração mais comum,
sudo
pede a senha do usuário em execuçãosudo
(como você diz, o usuário correspondente ao id de usuário real do processo). O objetivosudo
é conceder privilégios extras a usuários específicos (conforme determinado pela configuração emsudoers
), sem que esses usuários tenham que fornecer qualquer outra autenticação além da sua própria. No entanto,sudo
verifica se o usuário que está executandosudo
é realmente quem afirma ser, e faz isso solicitando sua senha (ou qualquer mecanismo de autenticação configurado parasudo
, geralmente usando PAM - então isso pode envolver uma impressão digital ou autenticação de dois fatores autenticação etc).sudo
não concede necessariamente o direito de se tornar root, mas pode conceder uma variedade de privilégios. Qualquer usuário autorizado a se tornar rootsudoers
pode fazê-lo usando apenas sua própria autenticação; mas um usuário sem permissão, não pode (pelo menos, não usandosudo
). Isso não é imposto pelo próprio Linux, mas porsudo
(e sua configuração de autenticação).sudo
de fato pede a senha depois de iniciada a execução; não pode fazer de outra forma ( ou seja , não pode fazer nada antes de começar a funcionar). O objetivo desudo
pedir a senha, mesmo sendo root, é para verificar a identidade do usuário em execução (em sua configuração típica).sudo
geralmente pede a senha do usuário que o está executando, embora isso possa ser configurado :A configuração
rootpw
sempresudo
solicita a senha do root,targetpw
solicita a senha do usuáriosudo
que eventualmente executará o programa como erunaspw
solicita a senha do usuário definido emrunas_default
.Um
sudo
binário configurado como esse pode de fato ser iniciado com privilégio de root por qualquer usuário. Supondosudo
que não haja nenhum bug com seu código de autenticação, isso por si só não importa muito.Da mesma forma, 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 de espaço de usuário como root.) Enquanto o kernel não tiver bugs, eles não poderão executar código arbitrário.Da(s) primeira(s) linha(s) de
man sudo
:Então:
Sim, qualquer usuário ( permitido ) pode obter privilégios adicionais de superusuário (ou outros) executando sudo e fornecendo a autenticação ( configurada ) necessária. Ambos permitidos e configurados são definidos no(s) arquivo(s) sudoers.
O Linux pode restringir isso para 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
. Normalmente, outros arquivos (também/em vez) podem ser usados.De
man setresuid
: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.
Depois que 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 apenas pelo root), o próprio executável (sudo) autentica o usuário solicitando sua senha (ou outra coisa conforme configurado) e decide se e quais permissões conceder.
Adicional a outras boas respostas sobre
sudo
:su
permite que você efetivamente se torne 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 arquivossudo
. Se eu quiser usarsudo
, posso usarsu
para "tornar-me" o usuário administrador e, em seguida, nessa função, usarsudo
. Nessa situação, acabo inserindo a senha da conta Admin duas vezes - uma vez quando executosu
e outra quando executosudo
.