LINUX.ORG.RU

pkexec, дыра или фича?

 


0

1

Начал писать программу на Qt, которая должна в /etc вносить некоторые правки.
Для получения прав root начал гуглить такие вещи как kdesu/gksu, но оказалось что они не актуальны и необходимо использовать pkexec.

Но тут заметил, что pkexec su вполне себе заходит в оболочку под root используя пароль пользователя. Это нормально?

С ходу не смог найти инструкции как отключить подобные действия. Вопрос, как?

ls -lah /etc/polkit-1/rules.d/
total 8.0K
drwxr-x--- 2 root polkitd 4.0K Jan 15 11:36 .
drwxr-xr-x 3 root root    4.0K Jan 31 22:37 ..
pkexec cat /etc/shadow
# показывает содержимое файла
★★★★★

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

Методом тыка нашёл закономерность, что пользователь с ID 1000 может выполнять подобный трюк, но это не точно.

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

Тоже считаешь, что так быть не должно?
Я раньше не вникал, как работет PolKit, может так и должно быть (не думаю).

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

Проверил на Ubuntu 24.04 и 18.04, просит пароль от root.
Значит точно баг.

IIIypuk ★★★★★
() автор топика

pkexec это одна большая дыра, да.

Начал писать программу на Qt, которая должна в /etc вносить некоторые правки.

Скорее всего у тебя в проге тоже дыра получится с таким подходом.

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

Нужно настраивать Mesh VPN, так что всё в порядке.
Запускать будет монтажник, который не умеет в терминал.

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

Круто, спасибо. Убрал себя из wheel и начало спрашивать пароль пользователя.

Ну тогда скорее всего нет дыры, полазь там по /etc/sudoers, там поди у wheel стоит но-пассворд на все или на эту команду …

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

Я впервую очередь посмотрел туда и в /etc/sudoers.d.
Похоже PolKit тоже обрабатывает группу wheel. Просто я не грамотный и не знал этого.

IIIypuk ★★★★★
() автор топика

В man’е ничего про wheel не написано. В документации к другим дистрам необходимо добавить правило, чтобы wheel имел права.
И только в Arch Wiki есть абзац:

Polkit works by delimiting distinct actions, e.g. running GParted, and delimiting users by group or by name, e.g. members of the wheel group.

IIIypuk ★★★★★
() автор топика

Делай раз:

$ pacman -Ql polkit | grep rules
polkit /etc/polkit-1/rules.d/
polkit /usr/share/polkit-1/rules.d/
polkit /usr/share/polkit-1/rules.d/50-default.rules

Делай два:

$ cat /usr/share/polkit-1/rules.d/50-default.rules
/* -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- */

// DO NOT EDIT THIS FILE, it will be overwritten on update
//
// Default rules for polkit
//
// See the polkit(8) man page for more information
// about configuring polkit.

polkit.addAdminRule(function(action, subject) {
    return ["unix-group:wheel"];
});

Делай три:

$man polkit

The addAdminRule() method is used for adding a function that
may be called whenever administrator authentication is
required. The function is used to specify what identities
may be used for administrator authentication for the
authorization check identified by action and subject.
Functions added are called in the order they have been added
until one of the functions returns a value. Each function
should return an array of strings where each string is of
the form "unix-group:<group>", "unix-netgroup:<netgroup>" or
"unix-user:<user>". If the function returns null, undefined
or does not return a value at all, the next function is
tried.

P.S. Если не хочется самому настраивать дистр - лучше не использовать Arch =)

Belkrr ★★
()

заходит в оболочку под root используя пароль пользователя. Это нормально?

Да, нормально. Ибо по соображениям безопасности пользователь root обычно запрещён и скрыт. Ну а если вы любитель работать под рутом - ССЗБ.

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

Больше 10 лет работаю под рутом и не использую sudo. Брат жив.

Я привык все необходимые операции выполнять под учёткой суперпользователя, нежели использовать sudo каждый раз, так как отдаю себе отчёт.

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

Спасибо, что сообщили. Продолжайте.

Проверил на Ubuntu 24.04 и 18.04, просит пароль от root.

Как раз-то в Ubuntu и нет юзера root. Если сами его специально не включали.

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

Но как отключить sudo я знаю, а как PolKit не знал.

С ходу не смог найти инструкции как отключить подобные действия. Вопрос, как?

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

Arch сам ничего не делает. А вот манжара или всякие скрипты arch-install вполне могут и сами.

$: sudo useradd test               

$: id test                             
uid=1001(test) gid=1001(test) группы=1001(test)
ALiEN175
()
Ответ на: комментарий от ALiEN175

по-умолчанию - рута нет

Да ладно? В любой юникс-подобной системе есть root. Даже в макоси. Просто пока для него не задан пароль, под ним нельзя залогиниться, вот и всё. А процессы, запущенные от рута, есть и их легко увидеть. Как и файлы, принадлежащие руту.

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

Ну я и говорю именно про учётку, а не про то что вообще рут в системе отсутствует.

$: sudo passwd -S root
root L 2010-09-19 -1 -1 -1 -1

$: sudo passwd root
Новый пароль:
Повторите ввод нового пароля:
passwd: пароль успешно обновлён

$: sudo passwd -S root
root P 2025-03-28 -1 -1 -1 -1
ALiEN175
()
Последнее исправление: ALiEN175 (всего исправлений: 1)

Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария