Corra sudo -v. Geralmente é usado para estender o tempo limite da senha do sudo, mas pode ser usado para determinar se você possui algum sudoprivilégio.
$ sudo -v
Sorry, user [username] may not run sudo on [hostname].
Trecho da página de manual:
Se for dada a opção -v (validar), o sudo atualizará o registro de data e hora do usuário, solicitando a senha do usuário, se necessário. Isso prolonga o tempo limite do sudo por mais 5 minutos (ou qualquer que seja o tempo limite definido em sudoers), mas não executa um comando.
Se seu usuário tiver permissão para executar apenas comandos específicos , esse comando funcionará, indicando que você pode executar algo com privilégios diferentes. Embora a mensagem pareça diferente ao tentar executar um comando que você não tem permissão nesse caso (e nenhum email é enviado para o root ), ainda é possível que você tenha problemas se os administradores lerem /var/log/secure.
$ sudo ls
[sudo] password for [username]:
Sorry, user [username] is not allowed to execute '/bin/ls' as root on [hostname].
Para descobrir o que você pode executar com privilégios diferentes, você pode usar sudo -l. Observe que este comando requer que você digite sua senha.
Obrigado. sudo -v funciona para mim. A página de manual diz que também posso executar o sudo -l, mas isso solicita uma senha. Por que é que?
Bruce
2
@ Bruce Estou supondo aqui, mas, caso contrário, alguém (ou um programa que você executa) pode descobrir quais programas podem ser executados (possivelmente sem digitar a senha) pelo seu usuário atual e tentar usar essas informações maliciosamente.
Daniel Beck
O que você acha que significa quando eu recebo de volta patrick@<host>:~$ sudo -v sudo: unable to resolve host <host>:? Digitei minha senha e não recebi nada de não autorizado. Eu sei que tenho sudode executar com êxito outros comandos, mas essa unable to resolve hostmensagem me preocupou que outra coisa poderia ser descolada no host.
21714 Patrick M
@PatrickM Parece um problema com o sudoersarquivo. Lá você pode especificar em qual host um usuário está autorizado a executar um comando específico (isso é útil ao usar o mesmo sudoersarquivo em várias máquinas). Possivelmente, o nome do host especificado nesse arquivo não pôde ser resolvido. Tente verificá-lo com o hostcomando, por exemplo.
Ale
Não funciona para mim no RHEL 6, sudo -vdeu "xx não está no arquivo sudoers. Este incidente será relatado".
79E09796
43
Isto é muito simples. Corra sudo -l. Isso listará todos os privilégios do sudo que você tiver.
Talvez com votos negativos, porque repete o que Daniel Beck disse há quase dois anos.
G-Man
11
Ou explica o que acontece, é um comentário, na melhor das hipóteses
Ramhound
2
@ Jonathan: se você criar um script no ubuntu rigt agora, sudo -lsolicita uma senha se você pode sudo ou não. sudo -vpergunta apenas se você pode, e "$(whoami)" != "root"nunca perguntará nada em qualquer linux.
bksunday
@bksunday Você está correto. Eu testei agora em um Debian Jessy limpo e confirmei seus resultados. Meu comentário anterior (excluído agora) provavelmente foi o resultado de testes em uma máquina na qual eu tinha alguns sudoprivs.
Jonathan Ben-Avraham
@ G-Man, mas esta resposta simples me ajudou mais do que provavelmente a resposta mais precisa de Daniel, onde esse comando é o fim, infelizmente ...
Aqui está um exemplo completo de uso em um script :
#!/usr/bin/env bash
is_root (){return $(id -u)}
has_sudo(){local prompt
prompt=$(sudo -nv 2>&1)if[ $?-eq 0];then
echo "has_sudo__pass_set"elif echo $prompt | grep -q '^sudo:';then
echo "has_sudo__needs_pass"else
echo "no_sudo"fi}
elevate_cmd (){local cmd=$@
HAS_SUDO=$(has_sudo)case"$HAS_SUDO"in
has_sudo__pass_set)
sudo $cmd
;;
has_sudo__needs_pass)
echo "Please supply sudo password for the following command: sudo $cmd"
sudo $cmd
;;*)
echo "Please supply root password for the following command: su -c \"$cmd\""
su -c "$cmd";;esac}if is_root;then
echo "Error: need to call this script as a normal user, not as root!"
exit 1fi
elevate_cmd which adduser
Para mim, ' sudo -v' e ' sudo -l' não funcionaram em um script porque às vezes são interativos (solicitando uma senha, como mencionado acima). ' sudo -n -l' também não funcionou, deu o código de saída '1', embora eu tenha permissões de sudo, devido à falta de senha. Mas estendendo o comando para:
foi bem sucedido para mim no roteiro. Essa expressão fornece 0se o usuário atual pode chamar 'sudo' e, 1se não.
Explicação:
O parâmetro adicional -npara sudoimpedir interatividade.
A saída $Ado comando ' sudo -n -v 2>&1' pode ser:
- vazia (neste caso, sudo pode ser chamado pelo usuário atual) ou:
- uma observação de que o usuário atual não está autorizado para sudo ou:
- um texto de pergunta para o senha (neste caso, o usuário está autorizado).
("asswor" serve para uma "senha" em inglês e para uma "passwort" alemã).
Eu tenho uma classificação baixa para votar e comentar, mas eu queria aprovar a resposta de Gerald Schade, pois descobri que era a única maneira anteriormente e pensei que ninguém mais o sabia - até agora: D
O "acesso ao Sudo" vem com sabores. Dois tipos principais: Primeiro, você ou um grupo do qual é membro, precisa ser configurado para acesso ao sudo no arquivo / etc / sudoers.
Em segundo lugar, você precisa saber sua senha ou precisa ter feito um comando sudo recentemente. Recentemente, o tempo limite não expirou. (Curiosidade: você pode demorar muito tempo no arquivo do sudoer.)
Frequentemente, quero testar o segundo tipo de acesso no prólogo de um script que precisará executar algumas etapas. Quando essa verificação falha, posso aconselhar o usuário que ele precisa habilitar o segundo tipo de acesso antes de executar o script.
bash-3.2$ if sudo -S -p '' echo -n < /dev/null 2> /dev/null ; then echo 'Sudo is enabled.' ; else echo 'Sudo is not enabled' ; fi
Sudo is enabled.
bash-3.2$ sudo -K
bash-3.2$ if sudo -S -p '' echo -n < /dev/null 2> /dev/null ; then echo 'Sudo is enabled.' ; else echo 'Sudo is not enabled' ; fi
Sudo is not enabled
O -S diz ao sudo para ler a senha do stdin. O -p define um prompt vazio. O -K limpa a segunda vez de acesso.
Como ele envia o stderr para / dev / null, também verificará se o usuário tem o primeiro tipo de acesso ao sudo.
O OP "teve problemas" ao executar sudo, então provavelmente não é o administrador do sistema, nem mesmo um dos administradores de elite do sistema. Ele provavelmente é apenas um usuário que pensou que poderia ter recebido alguns poderes limitados. O que faz você suspeitar que ele pode ir su?
Respostas:
Corra
sudo -v
. Geralmente é usado para estender o tempo limite da senha do sudo, mas pode ser usado para determinar se você possui algumsudo
privilégio.Trecho da página de manual:
Se seu usuário tiver permissão para executar apenas comandos específicos , esse comando funcionará, indicando que você pode executar algo com privilégios diferentes. Embora a mensagem pareça diferente ao tentar executar um comando que você não tem permissão nesse caso (e nenhum email é enviado para o root ), ainda é possível que você tenha problemas se os administradores lerem
/var/log/secure
.Para descobrir o que você pode executar com privilégios diferentes, você pode usar
sudo -l
. Observe que este comando requer que você digite sua senha.fonte
patrick@<host>:~$ sudo -v sudo: unable to resolve host <host>
:? Digitei minha senha e não recebi nada de não autorizado. Eu sei que tenhosudo
de executar com êxito outros comandos, mas essaunable to resolve host
mensagem me preocupou que outra coisa poderia ser descolada no host.sudoers
arquivo. Lá você pode especificar em qual host um usuário está autorizado a executar um comando específico (isso é útil ao usar o mesmosudoers
arquivo em várias máquinas). Possivelmente, o nome do host especificado nesse arquivo não pôde ser resolvido. Tente verificá-lo com ohost
comando, por exemplo.sudo -v
deu "xx não está no arquivo sudoers. Este incidente será relatado".Isto é muito simples. Corra
sudo -l
. Isso listará todos os privilégios do sudo que você tiver.fonte
sudo -l
solicita uma senha se você pode sudo ou não.sudo -v
pergunta apenas se você pode, e"$(whoami)" != "root"
nunca perguntará nada em qualquer linux.sudo
privs.Aqui está a versão compatível com scripts:
pois não ficará preso na entrada da senha se você não tiver
sudo
acesso.Você também pode configurá-lo em uma variável como:
Nota: No macOS, você precisa instalar
coreutils
, por exemplobrew install coreutils
.fonte
timeout
não está disponível por padrão, por exemplo, no OS X?coreutils
, por exemplobrew install coreutils
.A resposta de Gerald Schade aqui ainda pode ser melhorada!
Usar
Aqui está um exemplo completo de uso em um script :
fonte
Para mim, '
sudo -v
' e 'sudo -l
' não funcionaram em um script porque às vezes são interativos (solicitando uma senha, como mencionado acima). 'sudo -n -l
' também não funcionou, deu o código de saída '1', embora eu tenha permissões de sudo, devido à falta de senha. Mas estendendo o comando para:foi bem sucedido para mim no roteiro. Essa expressão fornece
0
se o usuário atual pode chamar 'sudo' e,1
se não.Explicação:
O parâmetro adicional
-n
parasudo
impedir interatividade.A saída
$A
do comando 'sudo -n -v 2>&1
' pode ser:- vazia (neste caso, sudo pode ser chamado pelo usuário atual) ou:
- uma observação de que o usuário atual não está autorizado para sudo ou:
- um texto de pergunta para o senha (neste caso, o usuário está autorizado).
("asswor" serve para uma "senha" em inglês e para uma "passwort" alemã).
fonte
Eu tenho uma classificação baixa para votar e comentar, mas eu queria aprovar a resposta de Gerald Schade, pois descobri que era a única maneira anteriormente e pensei que ninguém mais o sabia - até agora: D
entre minha solução:
(a partir do final de 2015, mwhahaaa)
fonte
O "acesso ao Sudo" vem com sabores. Dois tipos principais: Primeiro, você ou um grupo do qual é membro, precisa ser configurado para acesso ao sudo no arquivo / etc / sudoers.
Em segundo lugar, você precisa saber sua senha ou precisa ter feito um comando sudo recentemente. Recentemente, o tempo limite não expirou. (Curiosidade: você pode demorar muito tempo no arquivo do sudoer.)
Frequentemente, quero testar o segundo tipo de acesso no prólogo de um script que precisará executar algumas etapas. Quando essa verificação falha, posso aconselhar o usuário que ele precisa habilitar o segundo tipo de acesso antes de executar o script.
O -S diz ao sudo para ler a senha do stdin. O -p define um prompt vazio. O -K limpa a segunda vez de acesso.
Como ele envia o stderr para / dev / null, também verificará se o usuário tem o primeiro tipo de acesso ao sudo.
fonte
Siga estas etapas para visualizar o arquivo sudoers. Se você está lá, você tem sudo. Caso contrário, você pode se adicionar.
su
visudo
your_username_here ALL=(ALL) ALL
:wq
exit
sudo
fonte
sudo
, então provavelmente não é o administrador do sistema, nem mesmo um dos administradores de elite do sistema. Ele provavelmente é apenas um usuário que pensou que poderia ter recebido alguns poderes limitados. O que faz você suspeitar que ele pode irsu
?