LINUX.ORG.RU

Спрашивать подтверждение при использовании systemctl reboot

 ,


0

1

Ситуация: если залогинен один пользователь, то systemctl reboot молча ребутает машину (замечу, не от root'а).
Надо: спрашивать подтверждения на ребут.
Единственное решение, которое я сейчас вижу, написать свою обертку. Неужели Поттеринг не запилил такую фичу?


Неужели Поттеринг не запилил такую фичу?

Не смущает, что /sbin/reboot тоже всю жизнь ребутал без никакого подтверждения? Это, вообще-то, не венда. Если юзер ввёл команду, её нужно тут же выполнить, а не переспросить его ещё раз, действительно ли он хочет выполнить эту команду и не передумал ли он за это время.

если залогинен один пользователь, то systemctl reboot молча ребутает машину

ЕМНИП, в такой ситуации вызывается метод на D-Bus. Это можно ограничить с помощью polkit, в том числе сделать запрос авторизации (как рут или как пользователь).

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

у него ребутает не от рута, это бред, чтобы непривилигированный юзер ребутал тачилу.

Если больше пользователей не залогинено, то это не бред, а вполне ожидаемое нормальное поведение. И до systemd так было: нажимаю в KDE или GNOME кнопку «Выключить», у ConsoleKit вызывается метод org.freedesktop.ConsoleKit.Manager.Stop, комп выключается, если не было залогинено других пользователей. И до ConsoleKit тоже было такое поведение, работало через HAL.

В любом случае, это поведение настраивается через polkit.

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

не не, одно дело бутнуть из DE, другое из консоли. на /sbin/reboot suid нету, я его без euid == 0 не дерну. кроме того, представь себе логин по ssh и ребут там, хост может и не ожить уже.

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

не не, одно дело бутнуть из DE, другое из консоли. на /sbin/reboot suid нету, я его без euid == 0 не дерну.

Одно и то же. Например, в системе с ConsoleKit эта команда даст тот же эффект, что и кнопка в DE:

dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart

А в системе с systemd команда «systemctl reboot» даст тот же самый эффект.

Так что и без всяких suid'ов можно ребутнуть комп хоть с консоли, хоть из DE.

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

Если хост может не ожить, зачем вообще писать команду перезагрузки? Лишние вопросы после ввода команды здесь не спасут. Если человек собрался ребутать комп, он всё равно нажмёт «y». И если человек ребутает комп, то он предполагает, что он загрузится после этого.

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

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

Ну так в чём проблема взять и убрать эту возможность? Настройки для того и сделаны, чтобы ими пользоваться и менять их, если нужно, чтобы было удобно.

По существу, с точки зрения юзера даже ничего не изменилось, просто длинная команда dbus-send стала короткой «systemctl reboot». /sbin/reboot как был, так и остался недоступным пользователю.

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

При дефолтной конфигурации удаленно или из консоли перегрузить систему не получится. В Х, если залогинен еще один пользователь запрашивается подтверждение. Т.е. ввод пароля.

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

То есть, кроме как обертку над ним написать, больше никак?
Просто я часто по ctrl-r старые команды выполняю, и частенько проскакивает systemctl reboot. Боюсь, как бы случайно не ребутнуть машину.

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

Правильный вариант: изменить настройки polkit. С этим помочь не смогу,я его не знаю.

Неправильный, но рабочий: залогинится в консоли (можно даже под своим пользователем). В этом случае polkit считает, что пользователей несколько и перед ребутом просит ввести пароль.

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

Завтра попробую. Отпишусь.

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

Не смущает, что /sbin/reboot тоже всю жизнь ребутал без никакого подтверждения?

Даже проверил:

kroz@lix:~> /sbin/reboot 
reboot: must be superuser

Я уже молчу о том, что в PATH простого юзера /sbin нет.

Что до выключения: /usr/share/config/kdm/kdmrc

...
AllowShutdown=Root
...
Я, конечно поменял на All, но мы ведь про дефолтное поведение говорим?

Вы точно про gentoo говорите?

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

Даже проверил:

Я уже молчу о том, что в PATH простого юзера /sbin нет.

Я что-то говорил о том, чтобы /sbin/reboot запускать не от рута? А от рута никакого подтверждения не требовалось никогда.

AllowShutdown=Root

А вот это никаким боком к выключению не относится. У меня так и стоит AllowShutdown=Root, при этом я спокойно выключаю комп от обычного пользователя, потому что kdm никаким боком к выключению компа из KDE отношения не имеет.

Вы точно про gentoo говорите?

Нет, я говорю про linux взагали. Про gentoo говорить трудно, там у всех разный набор софта стоит, начиная от hal и заканчивая systemd.

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

Я что-то говорил о том, чтобы /sbin/reboot запускать не от рута?

Смотрим о чем писал топикстартер:
«systemctl reboot молча ребутает машину (замечу, не от root'а).»

А зачем вы говорите про перезагрузку от рута?

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

AllowShutdown=Root
А вот это никаким боком к выключению не относится.

Только когда ставишь ее в Root и KDE загружается через kdm, при нажатии на большую красную кнопку ShutDown в KDE (в меню или через виджет) оно просит пароль рута.

dbus-send в любом случае перегружает комп. Ну, а про кнопку выключения (если она только не обрабатывается KDE) я вообще молчу.

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

Смотрим о чем писал топикстартер:

«systemctl reboot молча ребутает машину (замечу, не от root'а).»

Смотрим дальше:

Надо: спрашивать подтверждения на ребут.

В каком месте здесь написано, что при запуске от пользователя нужно спрашивать подтверждение, а при запуске от рута не нужно? Здесь этого не написано. Здесь написано, что надо спрашивать подтверждение всегда, в том числе и у рута. А такое необычное желание меня весьма удивило.

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

Только когда ставишь ее в Root и KDE загружается через kdm, при нажатии на большую красную кнопку ShutDown в KDE (в меню или через виджет) оно просит пароль рута.

Не угадал. Никаких паролей не просит, если я единственный залогиненный юзер.

Ну, а про кнопку выключения (если она только не обрабатывается KDE) я вообще молчу.

С ней ситуация весьма интересная. Если предположить, что acpid не запущен (или даже не установлен за ненадобностью), то есть 2 обработчика: systemd и powerdevil. Когда systemd видит в logind, что есть кто-то залогиненный, он не реагирует на кнопку и оставляет это powerdevil'у. Если же нет залогиненных пользователей, то systemd обрабатывает кнопки и реагирует на них в соответствии со своим конфигом.

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

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

Вот именно ради того, чтобы этого не было, пилили *kit'ы и пилят куски systemd сейчас. И в том числе для этого сломали сетевую прозрачность иксов и добавили эти наши dbus'ы. По ssh нельзя заюзать безрутовый consolekit/systemd-ребут, локально — можно, поскольку ограничивать локального юзера, способного физически отключить ПК — бред.

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

что надо спрашивать подтверждение всегда, в том числе и у рута

И где ты там такое увидел? Пусть ТС рассудит.

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

Не угадал. Никаких паролей не просит, если я единственный залогиненный юзер.

Перед тем, как писать, я проверил. Так что это ты не угадал.

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

Для policykit: в файле /usr/share/polkit-1/actions для действий org.freedesktop.login1.reboot и org.freedesktop.login1.power-off необходимо заменить <allow_active>yes</allow_active> на <allow_active>auth_admin_keep</allow_active>

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

Под рутом я, ессно, не сижу.
Пару раз выполнял systemctl reboot (от обычного юзера) и оно сохранилось в истории.
Зачем мне это нужно, отписал выше.

Просто я часто по ctrl-r старые команды выполняю, и частенько проскакивает systemctl reboot. Боюсь, как бы случайно не ребутнуть машину.

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

Я дал не совсем правильное решение. Файл в /usr/share/polkit-1/actions может перезаписываться при обновлении системы. В man pklocalauthority указано, что свои правила надо помещать в /etc/polkit-1/localauthority/50-local.d, но у меня этот вариант почему-то не работает.

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

Как я понял, нельзя поместить .policy файл в любой каталог, отличный от /usr/share/polkit-1/actions, поэтому переделал на вариант, предложенный здесь

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

Перед тем, как писать, я проверил. Так что это ты не угадал.

Упс, я не заметил, что в kdmrc у меня почему-то два раза встречается AllowShutdown. Первый раз Root, второй раз All. Естественно, поиском нашло первое вхождение, а дальше я не искал, а KDM использует то, что самое нижнее, т.е. второе.

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