Пакет: $ rpm -qf --qf '%{NAME}\n' /usr/bin/pkexec polkit Тестовая система: $ cat /image/.disk/info Simply Linux/x86_64 2017-07-07 Первый пользователь в системе, регистрируемый на инсталляции, это личный пользовательский аккаунт root. Новый пользователь добавленный в группу wheel, права которому делегируются через sudoers, это не root. Это другое физическое лицо. Выполнение в X-терминале: Получение root-сессии пользователем группы wheel не знающим пароля root [test@localhost ~]$ id uid=501(test) gid=501(test) группы=501(test),10(wheel) [test@localhost ~]$ Здесь в окне запрос пароля любого из wheel на выбор: [test@localhost ~]$ pkexec /bin/bash с последующим получением сессии root в X-терминале: [root@localhost ~]# [root@localhost ~]# echo $USER root [root@localhost ~]# [root@localhost ~]# echo $UID 0 [root@localhost ~]# [root@localhost ~]# echo $HOME /root [root@localhost ~]# [root@localhost ~]# echo $PATH /root/bin:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin [root@localhost ~]# [root@localhost ~]# echo $GROUPS 0 Запретить получение прав уровня root всеми wheel через pkexec: polkit.addRule(function(action, subject) { if (action.id.indexOf("org.freedesktop.policykit.exec") == 0) { return polkit.Result.NO; } }); Этот рулез выше, приведёт к отказу получения прав уровня root всеми wheel, через pkexec и свой личный пароль: [test@localhost ~]$ pkexec /bin/bash Error executing command as another user: Not authorized This incident has been reported. Ошибка в ту же тему о безопасности: https://bugzilla.altlinux.org/18344 https://bugzilla.altlinux.org/35763 Затрагивает все altlinux.
Это правило заблокирует вход в оболочку root любому wheel через 'pkexec /bin/bash' по своему паролю, как и запретит выполнение любого любым wheel через pkexec, если это не root (следующая строка после && это продолжение строки и этот перенос непреднамеренный): # cat /etc/polkit-1/rules.d/60-pkexec-to-root-only.rules polkit.addRule(function(action, subject) { if (action.id.indexOf("org.freedesktop.policykit.exec") == 0 && subject.isInGroup("root") ) { return polkit.Result.YES; } }); polkit.Result.YES, - это для sysv на которых авторизация сломана. Все остальные экшны, будут обрабатываться в соответствии с политикой polkit описанной в 50-default.rules
Мне кажется, что это в точности https://bugzilla.altlinux.org/show_bug.cgi?id=35763
В контексте комметария 12 https://bugzilla.altlinux.org/show_bug.cgi?id=35763#c12 параллельного бага #35763: Всё много хуже. /etc/polkit-1/rules.d/50-default.rules polkit считает пользователя в группе wheel не рутом, а админом. И при наличии в системе администратора и соадминистратора (группа wheel) предложит ввод пароля любого wheel на выбор, включая того, чей пароль скомпроментирован: # grep -v '^\/\|^$' /etc/polkit-1/rules.d/50-default.rules polkit.addAdminRule(function(action, subject) { return ["unix-group:wheel"]; }); # groups user1 tester tester2 user1 : user1 wheel ... tester : tester wheel audio tester2 : tester2 $ su - tester2 Password: $ whoami; pkexec /bin/bash tester2 ==== AUTHENTICATING FOR org.freedesktop.policykit.exec ==== Authentication is needed to run `/bin/bash' as the super user Multiple identities can be used for authentication: 1. user1 2. tester Choose identity to authenticate as (1-2): 2 Password: ... Баги #35763 #37516 в стартеркитах на sysvinit и в частности в p9-xfce-sysv неактуальны, по причине: a) отсутствия systemd. b) сломанной авторизации (и отсутствующего для sysv elogind) и значит не работающего по-умолчанию pkexec при выполнении команды от другого пользователя, с отказом на сбое аутентификации. c) ненастроенного по-умолчанию sudo (всё для всех wheel). Также см. сообщение Лёши Гладкова по поводу elogind: https://lists.altlinux.org/pipermail/devel/2019-November/208963.html
Используя такой существующий алгоритм и скомпроментированный пароль одного из wheel (выбор предлагается на аутентификации), непривилегированный пользователь, в системе на systemd, через X-терминал может получить окружение root: [root@localhost ~]# ls -l /proc/1/exe lrwxrwxrwx 1 root root 0 окт 14 2020 /proc/1/exe -> /lib/systemd/systemd [altlinux@localhost ~]$ groups altlinux test test2 altlinux : altlinux wheel uucp proc cdwriter audio radio users scanner xgrp netadmin fuse test : test wheel test2 : test2 [altlinux@localhost ~]$ [altlinux@localhost ~]$ su - test2 Password: [test2@localhost ~]$ [test2@localhost ~]$ whoami; pkexec /bin/bash test2 [root@localhost ~]# echo $USER $HOME $UID root /root 0
Я вот не понимаю, зачем вы включаете пользователя в группу wheel? Просто не добавляйте его в эту группу. Для sudo вы можете давать доступ индивидуально пользователям, или сделать группу типа sudousers.
(Ответ для Alexey Shabalin на комментарий #5) > Я вот не понимаю, зачем вы включаете пользователя в группу wheel? Потому что политика запрещает не wheel использовать sudo: # control | grep 'sudo ' sudo wheelonly (public wheelonly restricted) # ll /usr/bin/sudo -rws--x--- 1 root wheel 147136 ноя 8 05:22 /usr/bin/sudo А установить public, всё равно что закурить возле пороховой бочки.
(In reply to Alexey Shabalin from comment #5) > Я вот не понимаю, зачем вы включаете пользователя в группу wheel? Потому, что в ALT так исторически сложилось. То, что wheel в некотором роде администратор, но ещё без прав суперпользователя. В общем есть bug 18344, решение по которому при текущем polkit становится бессмысленно.
(In reply to Alexey Shabalin from comment #5) > Я вот не понимаю, зачем вы включаете пользователя в группу wheel? Просто не > добавляйте его в эту группу. В ALT группа wheel с самого начала используется в качестве группы отсечения доступа к привилегированным инструментам вроде su и sudo. Почему-то polkit подменил значение группы wheel: теперь при наличии работающего polkit члены группы wheel по умолчанию автоматически приравниваются к root, что эквивалентно включению по умолчанию "control sudowheel enabled". Эта подмена смысла группы wheel является уязвимостью в конфигурации polkit по-умолчанию, которую необходимо исправить в Сизифе и бранчах.