LINUX.ORG.RU

Индикация статуса sudo в $PS1 или нечто подобное

 , ,


0

3

ЛОР, помоги. Хочется каким-то образом узнавать о истечении тайм-аута sudo в рамках текущей сессии (желательно, чтобы возможность повышения привилегий была видна прямо в приглашении шелла). Максимум, что у меня получилось придумать, это сделать в .bashrc вот так:

PROMPT_COMMAND='history -a ; sudo -n /bin/true > /dev/null 2>&1 ; if [ $? = "0" ]; then export __sudo_prompt_color=31 ; else __sudo_prompt_color=32 ; fi'

PS1='[$?]\n${debian_chroot:+($debian_chroot)}\[\033[01;${__sudo_prompt_color}m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

Очевидные минусы понятны:

  • срёт в /var/auth.log (sudo -n)
  • выполнение любой команды до истечения тайм-аута сбрасывает таймаут в максимум

Кто-нибудь может предложить более цивилизованные способы решить задачу?

Ответ на: комментарий от dexpl

Беспарольного запуска service, poweroff и powertop (и только их) su сам по себе не обеспечит, или я ошибаюсь?

man sudoers на предмет nopasswd. У меня там /sbin/poweroff, /etc/init.d/ftp start и т. п. Теперь можно это запускать с помощью sudo, только пароля не требует. А если сделать alias poweroff="sudo /sbin/poweroff", так юзер вообще ничего не заметит.

А таймаут в sudo у меня вообще выключен. Не понимаю зачем он нужен. Каждый раз запрашивает пароль.

Kroz ★★★★★
()
Ответ на: комментарий от kirk_johnson

Затем, что работу с service, poweroff и powertop для моего юзера я хочу сделать беспарольной. Ну вот хочется мне. И мне хочется. И я так сделал.

См. мой пост выше.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от kirk_johnson

Таймер не поможет. Есть sudo -k.

Напоминает анекдот, как один старичёк жаловался в ЖЕК, что из его окна женская баня видна с голыми тётками. «Бесстыдство,» - кричал он. Из ЖЕК'а пришли, смотрели-смотрели, не нашли как в окно бани можно заглянуть. На что старичёк сказал: «А если на шкаф залезть?».

Это я к чему:

Есть sudo -k.

Что, так прям часто используется, что это один из критических кейсов по которому отвергается решение?

Я уже молчу о том, что, наверняка, это можно как-то отловить.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от Kroz

Спасибо за идею c логами. Сгородил себе скрипт на perl'е.

Я решил просто искать в auth.log последнюю строчку попадающую под регулярку успешного входа:

m{
        (.*?)\s             # 'Feb  2 01:56:20 '
        $d{'hostname'}\s    # 'localhost '
        sudo:\s             # 'sudo: '
        $d{'user'}\s:\s     # 'vpupkin : '
        TTY=$d{'tty'}       # 'TTY=pts/8'
}x
Полученное время конвертирую в epoch, добавляю timestamp_timeout и сравниваю с текущим.

avallach2000
() автор топика
Ответ на: комментарий от Kroz

Ты предложил костыль. Почему костыль? Потому что не будет работать во всех возможных случаях, коих не так уж и много. Лепить костыли плохо. Почему? Потому что костыли добавляют неочевидности. Вопросы?

kirk_johnson ★☆
()
Ответ на: комментарий от Kroz

man sudoers […]

Спасибо, я в курсе и говорил (см. мою отквоченную фразу) о беспарольном запуске через su.

dexpl ★★★★★
()
Ответ на: комментарий от Kroz

Ещё раз — вы тут пытаетесь решить задачу, которую решать не нужно. Её решение не дает вообще никакого результата. Это не делает систему более безопасной (потому что проще запустить из того же скрипта `rm -rf ~/*' или кейлогер), это не дает никаких удобств (PS статичен, как я уже говорил).

kirk_johnson ★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.