Como o sudo decide se deve pedir uma senha, quando recebe um comando que realmente não precisa de 'sudo'?

10

Ao aplicar sudo a um comando que realmente não precisa de sudo ,

  • por vezes, não me pede a minha senha. Por exemplo, sob meu $HOME , sudo ls .

  • Mas lembro-me de que serve para algum outro comando, embora tenha esquecido qual deles.

Então, eu queria saber como sudo decide se deve pedir uma senha, quando recebe um comando que não precisa realmente de sudo ? Existe alguma regra em /etc/sudoers especificando isso?

Meu verdadeiro problema é que quando eu uso du , às vezes mostra "permissão negada" para alguns diretórios, e às vezes não, provavelmente porque eu não tenho permissão em alguns diretórios? Eu aplico sudo a du de qualquer forma, e pensei que eu seria perguntado por uma senha independente, mas na verdade não em meus próprios diretórios.

    
por Tim 08.05.2018 / 16:09

3 respostas

21

Em uma configuração típica, o comando é irrelevante. Você precisa digitar sua senha na primeira vez que usar o sudo, e você não precisará da sua senha nesse shell específico pelos próximos 15 minutos.

Do ponto de vista do computador, não existe um “comando que precise de sudo”. Qualquer usuário pode tentar executar qualquer comando. O resultado pode ser apenas uma mensagem de erro como "Permissão negada" ou "Nenhum arquivo ou diretório", mas é sempre possível executar o comando.

Por exemplo, se você executar du em uma árvore de diretórios com conteúdo que você não tem permissão para acessar, você receberá erros de permissão. Isso é o que "permissão negada" significa. Se você executar sudo du , sudo executará du como root, para que você não receba erros de permissão (esse é o ponto da conta root: root¹ sempre tem permissão). Quando você executar sudo du , du será executado como raiz e sudo não estará envolvido após o início de du . Se du encontrar erros de permissão é completamente irrelevante para o funcionamento do sudo.

Existem comandos que precisam do sudo para fazer algo útil . Utilidade é um conceito humano. Você precisa usar o sudo (ou alguns outros métodos para executar o comando como root) se o comando fizer algo útil quando executado como root, mas não quando for executado na sua conta.

Se o sudo pede sua senha depende de duas coisas.

  1. Com base na configuração, o sudo decide se você precisa ser autenticado. Por padrão, o sudo requer uma senha. Isso pode ser desativado de várias maneiras, incluindo a configuração da opção authenticate como false e com uma regra aplicável com a tag NOPASSWD .
  2. Se o sudo exigir sua senha, talvez seja um conteúdo usar um valor em cache. Tudo bem porque a razão pela qual o sudo precisa da sua senha não é para autenticar quem está chamando (sudo sabe o que o usuário a invocou), mas para confirmar que ainda é você nos comandos e não alguém que tenha controle sobre o teclado. Por padrão, o sudo está disposto a acreditar que você ainda está nos comandos se você inseriu sua senha há menos de 15 minutos (isso pode ser alterado com a opção timeout ). Você precisa ter digitado a senha no mesmo terminal (para que, se você permanecer logado em um terminal, deixar o terminal sem supervisão e usar outro terminal, alguém não pode tirar proveito disso para usar o sudo no outro terminal - mas esta é uma vantagem muito fraca e pode ser desativada configurando a opção tty_tickets para false).

¹ quase, mas isso está além do escopo deste segmento.

    
por 08.05.2018 / 21:36
45

sudo não sabe se o comando solicitado para ser executado precisa ser executado como algum outro usuário (geralmente root), tudo o que ele sabe é sua configuração. Isso determina quais usuários têm permissão para executar sudo , com quais usuários são “alvos” e para quais comandos; ele também determina se uma senha é necessária, qual delas e se deve manter um token de autenticação.

Se você estiver usando a configuração padrão da Debian, o último é provavelmente o que está envolvido aqui: sudo irá pedir sua senha na primeira vez que você a usar em qualquer terminal, então ela manterá um token de autenticação para um certo período de tempo. Se você reutilizar sudo no mesmo terminal dentro desse período, ele não solicitará uma senha.

    
por 08.05.2018 / 16:39
6

to a command which doesn't actually need sudo

Não é que um comando precise ou não precise de sudo. Quando você corre

sudo -u user command

o sistema executa command como user .

Se a chamada é bem-sucedida ou não e se uma senha é solicitada ou não, depende da política de segurança sudoers (geralmente configurada em /etc/sudoers ).

    
por 08.05.2018 / 16:38

Tags