...
Команде "hostnamectl hostname <имя_узла>" соответствует действие "org.freedesktop.hostname1.set-hostname".
Права по умолчанию на выполнение действия заданы в файле /usr/share/polkit-1/actions/org.freedesktop.hostname1.policy.
Разрешение группе пользователей выполнять определённые команды и запрет на выполнение всех остальных
Правило:
...
Запрет на запуск команды (файл 50-local-deny.rules из состава polkitd)
При установке пакета polkitd устанавливается файл /usr/share/doc/polkitd/50-local-deny.rules
...
:
| Блок кода |
|---|
polkit.addRule(function(action, subject) {
if (subject.user !== subject.isInGroup("group1guest")) {
// Continue to the next rules file for users other than guest
return polkit.Result.NOT_HANDLED;
}
if (action.id === "org.freedesktop.NetworkManager.settings.hostname1modify.set-hostnamesystem") {
return polkit.Result.YES;
}
// Don't allow reconfiguring NetworkManager
if (action.id == "org.gnome.gparted") {
return polkit.Result.AUTH_ADMINNO;
}
returnreturn polkit.Result.NONOT_HANDLED;
}); |
Действие команды "hostnamectl hostname <имя_узла>" описано в файле /usr/share/polkit-1/actions/org.freedesktop.hostname1.policy.
Действие программы GParted описано в файле /usr/share/polkit-1/actions/org.gnome.gparted.policy.
Запрет на запуск команды (файл 50-local-deny.rules из состава polkitd)
При установке пакета polkitd устанавливается файл /usr/share/doc/polkitd/50-local-deny.rules:
Не показано правило, запрещающее запуск программы PackageKit, которая не используется в Astra Linux.
Правилом задаётся:
- пользователю guest;
- запрещено ("return polkit.Result.NO");
- изменение сетевых настроек в программе NetworkManager (название действия "org.freedesktop.NetworkManager.settings.modify.system").
Скопировать файл в каталог /etc/polkit-1/rules.d/ и изменить 50 на 00, чтобы правило гарантированно срабатывало раньше других правил.
Запрещение определённому пользователю выполнять ряд команд
Пример правила, которое запрещает пользователю user1 изменять имя узла, а также запускать программу GParted:
| Блок кода |
|---|
polkit.addRule(function(action, subject) {
if (subject.user !== "user1") {
return polkit.Result.NOT_HANDLED;
}
|
| Блок кода |
polkit.addRule(function(action, subject) { if (subjectaction.userid !== "guestorg.freedesktop.hostname1.set-hostname") { return polkit.Result.NO; // Continue to} the next rules file for users other than guestif (action.id == "org.gnome.gparted") { return polkit.Result.NOT_HANDLEDNO; } if (action.id === "org.freedesktop.NetworkManager.settings.modify.system") { // Don't allow reconfiguring NetworkManager return polkit.Result.NO; } return polkit.Result.NOT_HANDLED; }); |
Не показано правило, запрещающее запуск программы PackageKit, которая не используется в Astra Linux.
Правилом задаётся:
- пользователю guest;
- запрещено ("return polkit.Result.NO");
- изменение сетевых настроек в программе NetworkManager (название действия "org.freedesktop.NetworkManager.settings.modify.system").
Скопировать файл в каталог /etc/polkit-1/rules.d/ и изменить 50 на 00, чтобы правило гарантированно срабатывало раньше других правил.
Запрещение определённому пользователю выполнять ряд команд
...
return polkit.Result.NOT_HANDLED;
}); |
Команде по изменению имени узла "hostnamectl hostname <имя_узла>" соответствует действие "org.freedesktop.hostname1.set-hostname".
Права по умолчанию на выполнение действия заданы в файле /usr/share/polkit-1/actions/org.freedesktop.hostname1.policy.
Команде GParted "/usr/sbin/gparted" соответствует действие "org.gnome.gparted".
Права по умолчанию на выполнение действия заданы в файле /usr/share/polkit-1/actions/org.gnome.gparted.policy.
У пользователя не будет запрашиваться пароль, а будет сразу выведено сообщение о запрете на выполнение команды.
Например, если пользователь user1 запустит запрещённую команду "hostnamectl hostname <имя_узла>", то в ответ он получит сообщение:
| Блок кода |
|---|
Could not set transient hostname: Access denied |
Запрещение группе пользователей выполнять все команды, кроме указанных
Правило:
- относится только к пользователям, состоящим в группе
group1; - разрешает запускать команду по изменению имени узла "
hostnamectl hostname <имя_узла>" без запроса пароля; - разрешает запускать программу GParted "
/usr/sbin/gparted" с запросом пароля администратора; - запрещает запускать все остальные команды, которые используют менеджер авторизации
polkitd:
| Блок кода |
|---|
polkit.addRule(function(action, subject) {
if (subject.user !== subject.isInGroup("user1group1")) {
return polkit.Result.NOT_HANDLED;
}
if (action.id == "org.freedesktop.hostname1.set-hostname") {
return polkit.Result.NOYES;
}
if (action.id == "org.gnome.gparted") {
return polkit.Result.NOAUTH_ADMIN;
}
return polkit.Result.NOT_HANDLEDNO;
}); |
Команде по изменению имени узла Действие команды "hostnamectl hostname <имя_узла>" соответствует действие "org.freedesktop.hostname1.set-hostname".
Права по умолчанию на выполнение действия заданы в файле описано в файле /usr/share/polkit-1/actions/org.freedesktop.hostname1.policy./org.freedesktop.hostname1.policy.
Действие программы GParted описано Команде GParted "/usr/sbin/gparted" соответствует действие "org.gnome.gparted".
Права по умолчанию на выполнение действия заданы в файле /usr/share/polkit-1/actions/org.gnome.gparted.policy.
У пользователя не будет запрашиваться пароль, а будет сразу выведено сообщение о запрете на выполнение команды.
Например, если пользователь user1 запустит запрещённую команду "hostnamectl hostname <имя_узла>", то в ответ он получит сообщение:
...
Каталоги
| Каталог | Описание |
|---|---|
| /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/ | Каталог содержит примеры правил авторизации: 50-local-allow.rules и 50-local-deny.rules, описание которых дано в статье |
...