...
- Создать файл
/etc/polkit-1/rules.d/10-default.rulesс правилом:
гдеБлок кода polkit.addRule(function(action, subject) { if (action.id == "org.freedesktop.policykit.exec") { polkit.log("action=" + action); polkit.log("subject=" + subject); } });org.freedesktop.policykit.exec– название действия, соответствующего команде pkexec.Примечание В ОС Astra Linux, использующей мандатный контроль целостности, после создания какого-либо нового файла с правилом в каталогах
/etc/polkit-1/rules.d/и/usr/share/polkit-1/rules.d: polkitd перестаёт работать, а в системном журнале появляется запись:
polkitd[5403]: Insufficient integrity level of file '/etc/polkit-1/rules.d/10-default.rules'Необходимо настроить мандатный контроль целостности для файла 10-default.rules либо, как временный вариант, разместить правило в уже существующем
rules-файле. - Разрешить службе
polkitdвыводить в системный журнал отладочные сообщения.
Для этого в файле systemd-юнита/usr/lib/systemd/system/polkit.serviceубрать из значения параметраExecStartопцию--no-debug:Блок кода [Unit] Description=Authorization Manager Documentation=man:polkit(8) [Service] Type=dbus BusName=org.freedesktop.PolicyKit1 ExecStart=/usr/lib/polkit-1/polkitd --min-ilev-auth-admin=max
- Перечитать настройки системного менеджера
systemdи перезапустить службуpolkitd:Command sudo systemctl daemon-reload
sudo systemctl restart polkit
- Запустить команду:
Command pkexec -u administrator echo "test"
- В системном журнале появятся записи о действии "action=..." и о пользователе "subject=...":
Блок кода сен 22 12:51:44 astra-28739 polkitd[7867]: action=[Action id='org.freedesktop.policykit.exec' program='/usr/bin/echo' user.display='administrator' command_line='/usr/bin/echo test' user='administrator' polkit.message='Authentication is needed to run `$(program)' as user $(user.display)' polkit.gettext_domain='polkit-1' user.gecos=''] сен 22 12:51:44 astra-28739 polkitd[7867]: subject=[Subject pid=4297 user='administrator' groups=administrator,tty,dialout,cdrom,floppy,audio,dip,video,plugdev,users,netdev,lpadmin,scanner,astra-admin,astra-console seat=null session='7' local=false active=true]
Выполнение без ввода пароля команды: systemctl restart apt-daily (пример правила 50-local-allow.rules из состава polkitd)
При установке пакета polkitd устанавливается файл /usr/share/doc/polkitd/50-local-allow.rules:
| Блок кода |
|---|
polkit.addRule(function(action, subject) {
if (
subject.isInGroup("astra-admin")
&& action.id === "org.freedesktop.systemd1.manage-units"
&& action.lookup("unit") === "apt-daily.service"
&& action.lookup("verb") === "restart"
) {
return polkit.Result.YES;
}
return polkit.Result.NOT_HANDLED;
}); |
Правило адаптировано для Astra Linux SE:
- в методе subject.isInGroup указан параметр "astra-admin" вместо "sudo";
- переменной action.lookup("unit") присвоено значение "apt-daily.service" вместо "apt-cacher-ng.service".
Правилом задаётся:
- пользователю, входящему в группу astra-admin;
- разрешается без ввода пароля ("return polkit.Result.YES");
- запускать команду systemctl (название действия "org.freedesktop.systemd1.manage-units");
- для перезапуска (action.lookup("verb") === "restart");
- службы apt-daily (action.lookup("unit") === "apt-daily.service").
Скопировать файл в каталог /etc/polkit-1/rules.d/ - polkit автоматически обработает файл.
В результате пользователь, входящий в группу astra-admin сможет запускать команду "systemctl restart apt-daily" без использования команды sudo и без запроса пароля от polkitd.
Каталоги
| Каталог | Описание |
|---|---|
| /usr/share/polkit-1/actions/ | Каталог policy-файлов с описаниями действий программ |
/etc/polkit-1/rules.d/ | Каталоги rules-файлов с правилами авторизации, созданными поставщиком операционной системы или системным администратором |
| /etc/polkit-1/localauthority/ /var/lib/polkit-1/localauthority/ | Каталоги с правилами авторизации в устаревшем pkla-формате. Эти правила будут работать, если установлен пакет polkitd-pkla (при установке ОС устанавливается по умолчанию). В будущих версиях ОС возможен отказ от поддержки pkla-формата, из-за чего потребуется переписать правила в JavaScript-формате |
| /usr/share/doc/polkitd/examples/ | Каталог содержит примеры правил авторизации |
...