как быть предупрежденным, если терминал имеет привилегии sudo, а также показывает, сколько осталось времени?

10

Как увидеть в терминале, что у вас есть привилегии sudo? (так что зная, что у меня есть эти привилегии, я могу просто набрать sudo -k ). Было бы лучше не добавлять слишком много информации в терминал, просто какое-то простое и маленькое предупреждение!

ОСТАВШЕЕСЯ ВРЕМЯ НЕВОЗМОЖНО, правильно?

Также, как узнать, сколько времени у меня есть с этими привилегиями на этом конкретном терминале? (так что я могу просто позволить ему закончить, а не набирать sudo -k ). Я думаю, что оставшееся время может появляться каждый раз, когда я нажимаю клавишу Enter.

EDIT: я исследовал больше и обнаружил, что /var/lib/sudo/$USER/$nPts (где $ nPts - это текущие терминальные точки в% от ps -p $$ ) обновляет свою временную метку каждый раз, когда выдается команда sudo, и она доступна, только если вы используете sudo, поэтому оставшееся время всегда будет сконфигурированным ...

PS: В качестве альтернативы этому я пробовал alias sudo='sudo -k' , но мне не нравится вводить пароль для каждой команды ... И также этот alias sudos='sudo -k' (или alias ssudo='sudo -k' , хорошо, если вы набрали длинную строку, просто нажмите «Домой» и введите «s»), если вы хотите только одну команду, набрав sudos . Но я все еще не знаю, когда у меня есть обычные привилегии sudo, чтобы знать, что мне нужно действовать ...

    
задан Aquarius Power 10.05.2013 в 00:08
источник

2 ответа

5

[Мне все еще хотелось бы узнать, есть ли лучший ответ.]

Я нашел способ, который работает, и подсказка будет храниться в одной строке:

в конце вашего ~/.bashrc добавьте это:

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: я обнаружил, что sudo -n uptime обновит тайм-аут sudo, поэтому каждый раз, когда вы нажимаете клавишу Enter, время sudo будет обновляться ... Это делает знание оставшегося времени бесполезным, поскольку оно всегда будет сконфигурированный, по умолчанию - 15 минут ...

и для поиска наилучшего цвета для вашего вкуса вы можете использовать ScriptEchoColor с опцией --escapedchars , например:

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

, чтобы просто остановить мигание, удалите \E[5m , как в \E[0m\E[93m\E[41m\E[1m SUDO \E[0m

    
ответ дан Aquarius Power 11.05.2013 в 18:40
4

У вашего терминала нет «привилегий sudo», если вы не сделаете что-то глупое как sudo bash НЕ ДЕЛАЙТЕ ЭТО!

Все, что вам нужно сделать, чтобы иметь «обычные привилегии sudo», - это воздержаться от ввода sudo перед командой.

/usr/bin/id - хороший способ увидеть, что sudo делает. Например:

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

На странице sudo man говорится: «Политика sudoers кэширует учетные данные в течение 15 минут, если не переопределена в sudoers (5)». Это означает, что по умолчанию, если вы выдаете команду sudo (и вводите свой пароль), затем подождите 14.9 минут до выдачи второй команды sudo , вам не нужно будет снова вводить пароль. Если вы подождете 15,1 минуты, вам придется повторно ввести пароль. sudo -k просто истекает 15-минутный таймер. Единственное, что я могу увидеть для sudo -k , это то, что вы собираетесь предоставить ваш разблокированный терминал кому-то, кому не доверяете UID 0 .

    
ответ дан waltinator 10.05.2013 в 04:11