LINUX.ORG.RU

Запретить или требовать пароль для выключения/перезагрузки компьютера

 , , ,


3

2

В современных системах какая-то модная дичь, позволяющая любому активному пользователю выключать, суспендить или перезагружать компьютер. Правила эти прописаны в /usr/share/polkit-1/actions/org.freedesktop.login1.policy. Редактировать этот файл не рекомендуется, т.к. он перезапишется при обновлении. Вместо этого они предлагают создать .rules файл, например в /usr/share/polkit-1/rules.d/.
Ок, создал файл /usr/share/polkit-1/rules.d/local.shutdown.rules

polkit.addRule(function(action, subject) {
    if (
        action.id == "org.freedesktop.login1.reboot" ||
        action.id == "org.freedesktop.login1.reboot-ignore-inhibit" ||
        action.id == "org.freedesktop.login1.reboot-multiple-sessions" ||
        action.id == "org.freedesktop.login1.power-off" ||
        action.id == "org.freedesktop.login1.power-off-ignore-inhibit" ||
        action.id == "org.freedesktop.login1.power-off-multiple-sessions" ||
        action.id == "org.freedesktop.login1.halt" ||
        action.id == "org.freedesktop.login1.halt-multiple-sessions" ||
        action.id == "org.freedesktop.login1.halt-ignore-inhibit" ||
        action.id == "org.freedesktop.login1.suspend" ||
        action.id == "org.freedesktop.login1.suspend-multiple-sessions" ||
        action.id == "org.freedesktop.login1.suspend-ignore-inhibit" ||
        action.id == "org.freedesktop.login1.hibernate" ||
        action.id == "org.freedesktop.login1.hibernate-multiple-sessions" ||
        action.id == "org.freedesktop.login1.hibernate-ignore-inhibit"
       ) {
                return polkit.Result.AUTH_ADMIN;
    }
});

Однако нифига, по прежнему из диалога входа SDDM и из меню KDE залогиненного пользователя по прежнему можно перезагрузить и выключить без запроса прав. Что за фигня?

Понавыдумали всякую дичь переусложнённую...

Система Ubuntu 18.04, если это что-то значит.

Deleted

Последнее исправление: pyroman (всего исправлений: 1)

вопрос-то в чем?

ЗЫ как бе логично что залогиненный в графический сеанс может выключать свой комп не спрашивая у себя самого пароль рута лол)))

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

вопрос-то в чем?

Вопрос в том как сделать чтобы работало как хочется.

ЗЫ как бе логично что залогиненный в графический сеанс может выключать свой комп не спрашивая у себя самого пароль рута лол)))

Да не важно, настройки на то и настройки чтобы их можно было менять, если дефолт по каким-то причинам не подходит. Или линукс уже до такой степени скатился что дефолт нельзя поменять?

Deleted
()

Разве группу не надо указать?

subject.isInGroup("users")) {
            return subject.active ? polkit.Result.AUTH_ADMIN : polkit.Result.NO;
    }

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

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

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

А если на компе одновременно три индуса на разных мониторах работают? Multiseat или че-то типа того.

Или попросту удалённые сеансы открыты.

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

залогиненный В ХАРДВАРНУЮ КОНСОЛЬ.
а если в неё 3 индуса то и надо думать.
у ТС просто хотелка, впрочем реализуемая за 5 минут гугления.

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

По смыслу поста, запретить юзерам указанные действия и есть цель.

Попробовал простой конфиг

cat /etc/polkit-1/rules.d/60-noshutdown.rules
polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.login1.power-off" ||
        action.id == "org.freedesktop.login1.power-off-multiple-sessions")
	{
            return polkit.Result.NO;
	}
});

Получил заблокированную кнопку выключения в гуях, а при выключении из терминала получаю
Failed to set wall message, ignoring: Interactive authentication required.
Failed to call ScheduleShutdown in logind, proceeding with immediate shutdown: Access denied
Failed to set wall message, ignoring: Interactive authentication required.
Failed to power off system via logind: Access denied

Насколько могу оценить, все работает.

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

А ADMIN_AUTH вместо NO работает? Интересует всё же запрос пароля админа, а не категорический отказ.

Deleted
()
Ответ на: комментарий от Yorween

С одной поправкой. Если из гуя выключать, то пароль не запрашивает, просто ничего не происходит. Если из терминала, то запрашивает.

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

AUTH_ADMIN правильно.

Да, в конфиге так и прописано.

И да, работает.

Мда... То есть ты прописал точно так же как у меня в пером посте пример по такому же пути?

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

Я не в курсе, как в убунту, поэтому не предъявляю по путям и прочему. Где у меня файл, я показывал:

cat /etc/polkit-1/rules.d/60-noshutdown.rules

Yorween
()
Ответ на: комментарий от Deleted

Диалог появляется, когда из терминала пытаюсь выключить. Может у меня не стоит чего, не знаю. Лениво сейчас логи шерстить.

Попробуй в /etc/... бросить мой конфиг и посмотреть, что выйдет.

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

Вообще у меня директория rules.d уже была в /usr/share/polkit-1/rules.d/ и там лежат ещё какие-то дистровские файлы .rules, а в /etc/polkit-1/ нет директории rules.d.

Deleted
()
Ответ на: комментарий от Yorween

Ну по сути обе должны работать.

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

Кстати, можно ведь по journalctl посмотреть, что пишет polkit.service. Подгружает он файлы по твоему пути или нет.

Jan 02 20:46:12 arch polkitd[515]: Loading rules from directory /etc/polkit-1/rules.d
Jan 02 20:46:12 arch polkitd[515]: Loading rules from directory /usr/share/polkit-1/rules.d
Jan 02 20:46:12 arch polkitd[515]: Finished loading, compiling and executing 4 rules

Yorween
()

Вобщем, создал файл /etc/polkit-1/localauthority/50-local.d/50-noshutdown.pkla с таким содержимым:

## https://superuser.com/questions/354678/what-is-the-correct-way-to-prevent-non-root-users-from-issuing-shutdowns-or-rebo
## https://www.linux.org.ru/forum/general/14709882

[Disallow shutdown]
Identity=unix-user:*
Action=org.freedesktop.login1.reboot;org.freedesktop.login1.reboot-ignore-inhibit;org.freedesktop.login1.reboot-multiple-sessions;org.freedesktop.login1.set-reboot-to-firmware-setup;org.freedesktop.login1.power-off;org.freedesktop.login1.power-off-ignore-inhibit;org.freedesktop.login1.power-off-multiple-sessions;org.freedesktop.login1.halt;org.freedesktop.login1.halt-ignore-inhibit;org.freedesktop.login1.halt-multiple-sessions;org.freedesktop.login1.suspend;org.freedesktop.login1.suspend-ignore-inhibit;org.freedesktop.login1.suspend-multiple-sessions;org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-ignore-inhibit;org.freedesktop.login1.hibernate-multiple-sessions
ResultAny=no
ResultInactive=no
ResultActive=auth_admin

Идиотизм блин, понавыдумали упоротой фигни, хрен уследишь за всей этой дичью. В результате из пользовательских сессий кнопки выключения и перезагрузки просто выкидывают из сессии. Ок, и так сойдёт. Но при этом в окне входа SDDM по прежнему есть кнопки выключения и перезагрузки и они по прежнему работают, ведь SDDM работает из под рута.

В четвёртых кедах это просто через GUI настраивалось в настройках, там была тупо галочка и всё, после чего ни в KDM, ни из сессий выключение и перезагрузка не работала, запашивался пароль админа (пользователя в группе sudo).

Deleted
()
Ответ на: комментарий от intelfx

Дык дух Дебияна же, стабильное API :D

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