como ser avisado se o terminal tem privilégios sudo e também mostra quanto tempo resta?

10

Como ver no terminal que você tem privilégios de sudo? (sabendo que eu tenho esses privilégios, posso apenas digitar sudo -k ) Seria melhor não adicionar muita informação no terminal também, apenas algum tipo de alerta simples e pequeno!

O TEMPO REMANESCENTE É IMPOSSÍVEL, certo?

Além disso, como ver quanto tempo ainda tenho com esses privilégios nesse terminal específico? (então eu posso deixar isso terminar em vez de digitar sudo -k ). Eu acho que o tempo restante pode aparecer toda vez que eu pressionar a tecla Enter.

EDIT: Eu pesquisei mais e descobri que /var/lib/sudo/$USER/$nPts (onde $ nPts é atual pts de terminal a partir de ps -p $$ ) tem seu timestamp atualizado toda vez que um comando sudo é emitido, e só é acessível se você usar um comando sudo, então o tempo restante será sempre o configurado ...

PS .: Como alternativa, tentei alias sudo='sudo -k' , mas eu não gosto de ter que digitar a senha para cada comando ... E também, esse alias sudos='sudo -k' (ou alias ssudo='sudo -k' , bom se você digitou uma linha longa, apenas pressione Home e digite 's') funciona se você quiser apenas emitir um comando digitando sudos . Mas ainda sinto falta de saber quando tenho privilégios normais de sudo para saber que preciso agir ...

    
por Aquarius Power 10.05.2013 / 02:08

2 respostas

5

[Eu ainda gostaria de saber se existe uma resposta melhor.]

Eu encontrei uma maneira que funciona, e o prompt será mantido em uma única linha:

no final do seu ~/.bashrc , adicione isto:

function FUNCsudoOn() { 
    if sudo -n uptime 2>/dev/null 1>/dev/null; then 
        echo -ne "\E[0m\E[93m\E[41m\E[1m\E[5m SUDO \E[0m"; 
        #echo #without newline, the terminal seems to bugout with lines that are too big... discomment this if you find any problems...
    fi; 
}
function FUNCpromptCommand () { 
    FUNCsudoOn
}
export PROMPT_COMMAND=FUNCpromptCommand
#export PS1="\'FUNCsudoOn\'$PS1" #this also works, use instead of PROMPT_COMMAND

EDIT: Eu achei que sudo -n uptime atualizará o tempo limite do sudo, então toda vez que você apertar a tecla Enter, o tempo do sudo será atualizado ... Isso torna inútil o tempo restante, pois sempre será o configurado, com um padrão de 15min ...

e para encontrar a melhor formatação de cores para seu gosto, você pode usar ScriptEchoColor com a opção --escapedchars como:

echoc --escapedchars "@{nRlyo} SUDO " #that outputs below...
echo -e "\E[0m\E[93m\E[41m\E[1m\E[5m SUDO \E[0m"

para apenas interromper a remoção piscando \E[5m como em \E[0m\E[93m\E[41m\E[1m SUDO \E[0m

    
por Aquarius Power 11.05.2013 / 20:40
4

Seu terminal não "tem privilégios sudo", a menos que você faça algo bobo como sudo bash NÃO FAÇA ISSO!

Tudo o que você precisa fazer para "ter privilégios sudo normais" é evitar digitar sudo na frente do comando.

/usr/bin/id é uma boa maneira de ver o que o sudo faz. Por exemplo:

id -a        # returns my UID info
sudo id -a   # returns root's info
id -a        # me again
sudo id -a   # root again

A página sudo man diz "A política de sudoers armazena as credenciais em cache por 15 minutos, a menos que seja substituída em sudoers (5)". O que isso significa é que, por padrão, se você emitir um comando sudo (e digitar sua senha), aguarde 14.9 minutos antes de emitir um segundo comando sudo , não será necessário inserir sua senha novamente. Se você esperar 15,1 minutos, precisará redigitar a senha. sudo -k simplesmente expira o temporizador de 15 minutos imediatamente. O único uso que eu posso ver por sudo -k é se você está prestes a entregar seu terminal desbloqueado para alguém que você não confia com UID 0 .

    
por waltinator 10.05.2013 / 06:11

Tags