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

10

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

Оставшееся время невозможно, верно?

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

РЕДАКТИРОВАТЬ: я исследовал больше и обнаружил, что /var/lib/sudo/$USER/$nPts(где $ nPts является текущим значением терминала pts ps -p $$) обновляет свою временную метку каждый раз при выполнении команды sudo, и она доступна только при использовании команды sudo, поэтому оставшееся время всегда будет настроил один ...

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

Водолей Сила
источник
2
Почему за это проголосовали? Хотя это не самый ясный пост, вопрос названия все еще кажется мне правильным (и довольно полезным)
DaimyoKirby
не могли бы вы сказать, что можно уточнить? мой неотредактированный первоначальный пост был в 3 раза больше, и я многое его очистил, чтобы сделать его более лаконичным :)
Aquarius Power
Я думаю, что было уже поздно - я перечитал это, и это имеет больше смысла.
DaimyoKirby

Ответы:

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

РЕДАКТИРОВАТЬ: Я обнаружил, что 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

Водолей Сила
источник
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странице руководства говорится: «Политика sudoers кэширует учетные данные в течение 15 минут, если они не отменены в sudoers (5)». Это означает, что по умолчанию, если вы sudoвведете команду (и введете свой пароль), а затем подождите 14,9 минуты, прежде чем sudoвводить вторую команду, вам больше не придется вводить пароль. Если вы подождете 15,1 минуты, вам придется повторно ввести пароль. sudo -kпросто истекает 15-минутный таймер сразу. Единственное использование, которое я вижу, sudo -kэто когда вы собираетесь отдать свой разблокированный терминал кому-то, кому вы не доверяете UID 0.

waltinator
источник
Вы сказали «воздержитесь от ввода sudoперед командой». Но если я хочу проверить мои правила брандмауэра, iptables -Lони не будут работать, если я не наберу sudo iptables -L. Я хочу сказать, как мы можем на самом деле избежать использования sudo?
Водолей Сила
Также, что касается оставшегося времени, я хочу знать, сколько времени остается каждый раз, когда я нажимаю клавишу Enter на терминале. О sudo -k, я беспокоюсь о том, что взломщики пытаются получить удаленный доступ к моей машине (я действительно не знаю, могут ли они сделать это в любом случае ...), или в случае, если я оставлю свою машину открытой, не блокируя ее в течение нескольких минут ... хорошо, Суть в том, что я хочу сделать это так! Меня не волнует необходимость вводить sudo -kпароль и его пароль позже столько раз, сколько мне нужно, я чувствую себя хорошо, когда делаю это таким образом! :)
Водолей Сила
"Избегайте использования sudo"? Sudo был решением для распространения пароля root, установки двоичных файлов или использования /bin/su. Вы уверены, что хотите отказаться от него? «Удаленный доступ к моей машине ...» и, я полагаю, вступить во владение /proc/YourPID/fd/{0,1,2}. Нет. Если к вашей машине обращаются удаленно, у Плохого парня есть более простые способы UID 0. Вы должны повысить уровень Linux-foo до такого уровня беспокойства.
вальтинатор
Извините за напыщенную речь, похоже, вы должны alias k=/usr/bin/sudo -kзаменить sudoкоманду псевдонимом или функцией bash, которая оборачивает вызов /usr/bin/sudoс /usr/bin/touch $HOME/tmp/$$/sudotime, и, наконец, добавить что-то для печати $ {{time (now) - time ($ HOME / tmp / $) $ / sudotime))) в вашем приглашении Bash. Не тривиально, но если это заставит вас чувствовать себя хорошо, сделайте это.
вальтинатор
это интересно, я бы также регистрировал, когда попытка произошла, или, что еще лучше, отключил любую сетевую связь, круто! но даже если я скрою sudoс псевдонимом любое случайное слово, они все равно могли бы печатать /usr/bin/sudoвместо, sudoи он все равно работал бы как sudo :(. В любом случае, мне нравится идея. Интересно, если я изменю реальное, /usr/bin/sudoэто сломает что-то другое, кроме все мои сценарии, которые его используют ... даже если бы я делал это, они могли, прочитав сценарии, угадать, что стало Судо ...
Сила Водолея