Teste se um usuário tem privilégios sudo sem exigir entrada do usuário

12

Eu tenho um script de shell local que executa vários testes em um host remoto, antes de entregar a carga útil; um desses testes é se o usuário possui privilégios de sudo, verificado simplesmente com sudo -visso, porém isso exige que o usuário digite sua senha. Além disso, o host remoto parece ter um tempo limite instantâneo no sudo, portanto a entrada da senha é necessária em todas as novas conexões, e isso é algo que não tenho permissão para alterar (como política).

É claro que posso testar se o usuário faz parte de determinados grupos, mas isso não seria independente da configuração do host remoto, então eu esperava que houvesse um método que pudesse verificar que não precisa assumir os grupos de usuários também como não precisar de entrada do usuário?

Obrigado!

ATUALIZAÇÃO: Para repetir meus comentários, quero apenas testar se um usuário pode sudo, sem exigir a interação do usuário para esse teste.

DanH
fonte
você precisa verificar se o usuário tem a possibilidade de usar o sudo ou se ele está executando o shell script via sudo?
Niko SP
Só se ele tem a possibilidade. O script local exigirá que a senha do sudo seja inserida posteriormente, então, só quero verificar se o usuário no host remoto é mesmo um sudoer.
DanH
uma verificação rápida na minha caixa do ubuntu me deu o sudo -l, ele retorna os comandos que o usuário pode executar, se (ALL) ALL faz parte deles, o usuário pode usar o sudo para qualquer comando. Talvez esse seja o ângulo certo?
Niko SP
1
sudo -lsolicita minha senha.
ThatGraemeGuy
1
O Sudo armazena em cache com base em tty, portanto, se uma nova sessão fornecer o mesmo tty, talvez você não seja solicitado. Tente executar sudo -kprimeiro.
Mark Wagner

Respostas:

12

Receio que a única coisa que você possa testar seja se o usuário tiver privilégios de sudo sem uma senha.

Executar

sudo -n true

Se $? é 0, o usuário tem acesso ao sudo sem uma senha, se $? é 1, o usuário precisa de uma senha.

Se você precisar de verificação para um programa específico, mude truecom o programa, de forma que o programa não faça nada, comochmod --help

erickzetta
fonte
1
Note que isto não ajudar detecção preliminar se o comando Xé sudocapaz sem digitar uma senha e sem correr acidentalmente lo
try-catch-finally
3

Se você tiver um usuário com acesso ao sudo, como "root", poderá usá-lo para verificar outros logins. Como o usuário com acesso é executado:

sudo -n -l -U foo 2> & 1 | egrep -c -i "não tem permissão para executar sudo | usuário desconhecido"

Se retornar zero, "foo" terá acesso. Caso contrário, ele não tem acesso ao sudo.

Todd Moyer
fonte
3
Simplesmente, sudo -n -l cmdvocê será informado se o usuário atual tem acesso sudo ao cmd. Se você deseja testar o resultado.
Philippe A.
1

sudo -l

Isso deve lhe dar o suficiente para decidir se você tem os privs que deseja / precisa.

dmourati
fonte
1
Isso ainda pede uma senha no meu sistema (Ubuntu 16.04).
Mario Vilas
1

Sei que essa é uma pergunta super antiga, mas achei sorte com a -nbandeira (não interativa) e -v/ -l. Mas, você precisa inspecionar a saída:

$ sudo -vn && sudo -ln  #User with cached credentials
User adminuser may run the following commands on computername:
    (ALL) ALL
$ sudo -vn && sudo -ln  #User who _can_ sudo but isn't cached
sudo: a password is required
$ sudo -vn && sudo -ln  #User who can't at all
Sorry, user nonadmin may not run sudo on computername.

Alguns redirecionamentos de saída e grepping chegarão lá, provavelmente:

if (sudo -vn && sudo -ln) 2>&1 | grep -v 'may not' > /dev/null; then
  #they're cool
  exit 0 #Or, whatever
fi
Matt Moretti
fonte