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)
  • выполнение любой команды до истечения тайм-аута сбрасывает таймаут в максимум

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

Поскольку таймаут ты знаешь, оберни sudo в скрипт, который будет, перед вызовом настоящего sudo, куда-то писать время запуска. А в PS1 ты будешь проверять прошло ли время-таймаут.

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

Не, так тоже не выйдет. Можно, конечно, написать по функции для sudo и sudoeditor и сохранять время в переменную, но тут тоже есть сюрприз: я никак не смогу отличить случай, когда я неправильно ввел пароль, от завершения вызванной через sudo команды, которая тоже возвратит 1.

Да и работать в не-интерактивном режиме (вызов sudo из скрипта) такая обертка не сможет. Крайний случай с заменой бинарника sudo, понятное дело, не рассматриваем.

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

Крайний случай с заменой бинарника sudo, понятное дело, не рассматриваем.

Оберни вызов sudo в скрипт, который будет фиксировать время и терминал запуска.

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

И шо, что бубунта? У тещи тоже это говно, но я спокойно делаю там su -c ...

Неужто ты сразу не догадался сделать sudo passwd?

Мде...

И я не говорил, что это локалхост.
Убунта

Однозначно.

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

Да я и 'sudo -i' могу сделать, не вопрос.

Вот просто представь: есть некий сервак с доступом по ssh, а за рулем у него абизяна. И эта самая абизяна всё время забывает делать 'sudo -k' перед запуском прочих команд.

avallach2000
() автор топика

А толку? PS статичен. Если ты не будешь трогать терминал в течении 24 часов, PS всё равно будет отображать старый результат.

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

Мне просто напоминалка нужна, не более. Убирать timestamp_timeout в 0 я не хочу, а вот как-то напомнить себе о *возможно* не истекшей sudo-сессии очень даже хочется.

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

Возможно, но я не хочу перечитывать код всех аддонов к vim'у, например. А так, хоть немного, но безопасней.

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

Нет, не безопаснее. Аддон для vim'а может прописать тебе в .bashrc/.zshrc/whatever `alias sudo=log-passwd-and-run-sudo'. Так что нет, не безопаснее.

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

Btw, если ты боишься аддонов для vim'а — скорее всего, все интересные кому-то данные лежат в твоем хомяке. И тебе это не поможет.

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

Это можно решить с помощью apparmor, например. Правда, на каждую собственную глупость профиль не напишешь =).

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

Нет, это тебе тоже не поможет. Просто успокойся и смирись с тем, что у тебя не такой уровень безопасности и мандатного доступа, как в архивах КГБ. Потому что тебе и не нужно.

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

Это не защита от дурака. Это бесполезный хак, для которого никто не делал интерфейсы по причине редкостной бесполезности.

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

И чо? Это внутреннее состояние программы. Тебе никто не дал опцию команды, которая покажет тебе оставшееся время.

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

man tty man stat

Никакой проблемы нет. Разве что каталог может разнится в зависимости от дистрибутива (/var/run/sudo/, /var/db/sudo и т.п.).

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

Ещё раз — у меня там ничего нет. Этот интерфейс не является публичным и может меняться хоть в минорных релизах.

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

Ок, тогда логировать успешный запуск (по-моему он по дефолту в лог пишется), и тогда запись в лог будет служить триггером для запуска таймера (точнее записывать в файл момент успешного запуска sudo). Здесь полет фантазии не ограничен, начиная от периодического проверки даты обновления лога (глупо, но быстро) до настройки какого-то syslog-ng чтоб он отлавливал нужные сообщения и просто запускал скрипт (умно, но долго).

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

У меня sudo используется только для двух вещей (и то, в alias'ах): mount/umount (для работы с NTFS и всякой левизной) и poweroff/reboot.

Все.

В остальных случаях я просто делаю su - и выполняю все, что мне нужно.

Это ж не сервер общественного пользования со 100500 админами, где нельзя давать полноценные полномочия рута!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от alozovskoy

А в чем профит использовать su?

Не надо заморачиваться

а) с прописыванием тонны разрешенных команд в sudoers

б) с безопасностью (т.к. для su нужно пароль рута ввести, а не юзверя)

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

А если sudo вызывается из стороннего скрипта ($- != *i*) что делать?

а там не нужно такого sudo. Если уж нужно, то юзер весь скрипт должен запускать через своё sudo.

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

Убунта, сносить - себе дороже

настроить пробовал?

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

есть некий сервак с доступом по ssh, а за рулем у него абизяна.

sudo

ССЗБ

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

я не хочу, а вот как-то напомнить себе о *возможно* не истекшей sudo-сессии очень даже хочется.

разлогинься. А для обезьяны сделай _другой_ логин. Там sudo работать НЕ будет. В этом и фишка инновации Марка, sudo только для первого юзера нужно.

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

Это не защита от дурака. Это бесполезный хак, для которого никто не делал интерфейсы по причине редкостной бесполезности.

ППКС

emulek
()
Ответ на: комментарий от Eddy_Em

На серваке бубунта? Это ж клиника!!!

Эдди, у меня для тебя плохие новости…

emulek
()
Ответ на: комментарий от Eddy_Em

У меня sudo используется только для двух вещей (и то, в alias'ах): mount/umount (для работы с NTFS и всякой левизной)

А почему бы не использовать pmount безо всякого sudo?

и poweroff/reboot.

А почему бы не использовать usermode безо всякого sudo?

В остальных случаях я просто делаю su - и выполняю все, что мне нужно.

sudoedit и редактирование файла через su — существенно разные вещи.

с прописыванием тонны разрешенных команд в sudoers

Зачем их прописывать на локалхосте?

с безопасностью (т.к. для su нужно пароль рута ввести, а не юзверя)

Во-первых, в каком месте здесь безопасность? Во-вторых, в sudoers можно вписать хоть rootpw, хоть targetpw.

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

А почему бы не использовать pmount безо всякого sudo?

Зачем мне лишние костыли? У меня все предельно просто: воткнул носитель, udev загнал нужную запись в fstab и создал директорию в media, потом тупо монтирую. Но ntfs-3g без рута на запись не примонтировать (по умолчанию это убрали, а пересобирать с особыми ключами влом).

А почему бы не использовать usermode безо всякого sudo?

Что это?

sudoedit и редактирование файла через su — существенно разные вещи.

На локалхосте sudoedit 7 лет не втарахтелся!

Зачем их прописывать на локалхосте?

В целях безопасности: чтобы кто-нибудь случайно или преднамеренно какую-нибудь хрень не запустил. Мой-то пароль все знают, а пароль рута — нет.

в каком месте здесь безопасность?

см. предыдущий абзац.

в sudoers можно вписать хоть rootpw, хоть targetpw

на кой хрен мне париться с sudo, если я просто пишу su - и все ОК?

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

У меня все предельно просто: воткнул носитель, udev загнал нужную запись в fstab и создал директорию в media, потом тупо монтирую.

У меня еще проще: воткнул носитель, сказал pmount /dev/disk/by-label/<метка>, носитель смонтирован в /media/<метка>, без всяких записей в fstab.

Что это?

https://fedorahosted.org/usermode/

На локалхосте sudoedit 7 лет не втарахтелся!

Кому как.

В целях безопасности: […] Мой-то пароль все знают

В голове не укладывается.

на кой хрен мне париться с sudo, если я просто пишу su - и все ОК?

Сугубо в порядке ликбеза информирую, не тебя, так кого-нибудь еще. Впрочем, если твой пароль знают все, то сказать нечего.

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

Зачем их прописывать на локалхосте?

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

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

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

Да на здоровье. Только разговор был насчет «su против sudo», и необходимость прописывания кучи команд приводилась как недостаток sudo, которого лишен su. Беспарольного запуска service, poweroff и powertop (и только их) su сам по себе не обеспечит, или я ошибаюсь?

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