Summary: | Получение прав уровня root всеми wheel через pkexec | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Speccyfighter <zxwarior> |
Component: | polkit | Assignee: | Valery Inozemtsev <shrek> |
Status: | NEW --- | QA Contact: | qa-sisyphus |
Severity: | blocker | ||
Priority: | P3 | CC: | aris, asy, glebfm, iv, ldv, mike, nbr, shaba, shrek |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux |
Description
Speccyfighter
2019-11-20 12:06:02 MSK
Это правило заблокирует вход в оболочку 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 по-умолчанию, которую необходимо исправить в Сизифе и бранчах. |