...
- Создать файл
/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. - Разрешить службе
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 "подхватила" удаление опции--no-debug:Command sudo systemctl daemon-reload
- Перезапустить службу
polkitd, чтобы она начала выводить отладочные сообщения в системный журнал:Command 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]
Запуск команды без запроса пароля (файл 50-local-allow.rules из состава polkitd)
...
Разрешение любому пользователю запускать определённую команду
Правило:
- относится только к любому пользователю;
- разрешает запускать команду "
hostnamectl hostname <имя_узла>" без ввода пароля:
| Блок кода |
|---|
polkit.addRule(function(action, subject) {
if (
action.id subject.isInGroup("astra-admin")== "org.freedesktop.hostname1.set-hostname") {
&&return action.id === "org.freedesktop.systemd1.manage-units"polkit.Result.YES;
}
return && 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".
Правилом задаётся:
...
polkit.Result.NOT_HANDLED;
}); |
Действие для команды "hostnamectl hostname <имя_узла>" описано в файле /usr/share/polkit-1/actions/org.freedesktop.hostname1.policy.
Разрешение группе пользователей запускать определённую команду системного менеджера systemd без ввода пароля (файл с примером 50-local-allow.rules из состава polkitd)
При установке пакета polkitd устанавливается файл /usr/share/doc/polkitd/50-local-allow.rules с примером правила.
Правило:
- относится только к пользователям, состоящим в группе
sudo; - разрешает запускать команду "
systemctl restart apt-daily" без ввода пароля;
Примечание. В файле50-local-allow.rulesзадано правило для службыapt-cacher-ng, которая отсутствует в Astra Linux; - доступ к остальным командам определяется другими существующими правилами, а также правами доступа в
policy-файлах:
| Блок кода |
|---|
polkit.addRule(function(action, subject) {
if (
subject.isInGroup("sudo")
&& action.id === |
...
"org.freedesktop.systemd1.manage-units" |
...
&& action.lookup( |
...
" |
...
unit |
...
В результате пользователь, входящий в группу astra-admin сможет запускать команду "systemctl restart apt-daily" без использования команды sudo и без запроса пароля от polkitd.
Разрешение любому пользователю изменять имя узла
Правило:
- относится только к любому пользователю;
- разрешает запускать команду "
hostnamectl hostname <имя_узла>" без запроса пароля администратора:
| Блок кода |
|---|
polkit.addRule(function(action, subject) { if (action.id == "org.freedesktop.hostname1.set-hostname"") === "apt-daily.service" && action.lookup("verb") === "restart" ) { return polkit.Result.YES; } returnreturn polkit.Result.NOT_HANDLED; }); |
Действие команды "hostnamectl hostname <имя_узла>" описано в файле /usr/share/polkit-1/actions/org.freedesktop.hostname1.policy.
Запрещение пользователю запускать ряд команд (файл с примером примером 50-local-deny.rules из состава polkitd)
...
- относится только к пользователям, состоящим в группе
group1; - разрешает запускать команду по изменению имени узла "
hostnamectl hostname <имя_узла>" без запроса ввода пароля; - разрешает запускать программу GParted "
/usr/sbin/gparted" с запросом вводом пароля администратора; - запрещает запускать все остальные команды:
...