$ 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 sudo
terá root como o ID do usuário efetivo do processo porque o bit set-user-id /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.
Qual senha do usuário
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 em alguns usuários?É verdade que
sudo
pede a senha depois deexecve()
começar a executarmain()
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.
fonte
Respostas:
Na configuração mais comum,
sudo
solicita a senha do usuário em execuçãosudo
(como você diz, o usuário correspondente ao ID do usuário real do processo). O objetivosudo
é conceder privilégios extras a usuários específicos (conforme determinado pela configuraçãosudoers
), 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 executasudo
realmente é quem diz ser, e ele faz isso por pedir a sua senha (ou qualquer mecanismo de autenticação está configurado parasudo
, geralmente usando PAM - de modo que este poderia envolver uma impressão digital, ou de dois fatores autenticação etc.).sudo
não necessariamente concede o direito de se tornar root, ele 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 não tem 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
realmente 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 desudo
solicitar a senha, mesmo sendo raiz, é verificar a identidade do usuário em execução (em sua configuração típica).fonte
sudo
geralmente solicita a senha do usuário que está executando, embora isso possa ser configurado :Definição
rootpw
temsudo
sempre pedir a senha de root,targetpw
pede a senha do usuáriosudo
acabará por executar o programa como, erunaspw
pede a senha do conjunto de utilizador norunas_default
.Uma
sudo
configuração binária como essa pode realmente ser iniciada com privilégios de root por qualquer usuário. Supondosudo
que 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.fonte
A partir da primeira linha (s) de
man sudo
:Assim:
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.
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
: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 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.
fonte
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 o uso diário - o que significa que, entre outras coisas, não posso (diretamente) usarsudo
. Se eu quiser usarsudo
, posso usarsu
para "me tornar" o usuário Administrador e, em seguida, nessa funçãosudo
. Nessa situação, acabo inserindo a senha da conta de administrador duas vezes - uma vez quando executosu
e outra quando executosudo
.fonte