Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

  1. Создать файл /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.
  2. Разрешить службе 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
  3. Перечитать настройки системного менеджера systemd, чтобы служба polkitd "подхватила" удаление опции --no-debug:
    Command

    sudo systemctl daemon-reload

  4. Перезапустить службу polkitd, чтобы она начала выводить отладочные сообщения в системный журнал:
    Command

    sudo systemctl restart polkit

  5. Запустить команду:
    Command

    pkexec -u administrator echo "test"

  6. В системном журнале появятся записи о действии "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" с запросом вводом пароля администратора;
  • запрещает запускать все остальные команды:

...