разрешение пользователю запускать службы systemctl/systemd без пароля

С grepиsed:

Вы можете добавить ^в начало каждой строки и ,в конец каждой строки файла2 и использоватьgrep:

grep -f <(sed 's/^/^/;s/$/,/' file2) file1

Опция -fсчитывает шаблоны из файла (в нашем примере не из реального файла, а из подстановки процесса<(…)).

4
26.08.2020, 18:26
2 ответа

Есть три способа сделать это:

  1. Поместите appService.serviceв ~/.config/systemd/system/и удалите строку User=. Затем вы можете управлять им с помощью:
systemctl --user start appService.service
systemctl --user stop appService.service
  1. Добавьте правило polkit. Я думаю, что этот вопрос очень близок к тому, что вы ищете:systemd start as непривилегированный пользователь в группе . Если вы используете Debian/Ubuntu (polkit < 106 ), то это сработает:
/etc/polkit-1/localauthority/50-local.d/service-auth.pkla
---
[Allow yourname to start/stop/restart services]
Identity=unix-user:youname
Action=org.freedesktop.systemd1.manage-units
ResultActive=yes

Если вы используете Arch/Redhat (polkit >= 106 ), то это сработает:

/etc/polkit-1/rules.d/service-auth.rules
---
polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" &&
        subject.user == "yourname") {
        return polkit.Result.YES;
    } });
  1. sudo. Я не большой поклонник этого, потому что sudoне нужно полагаться на конфигурацию NOPASSWD:, и я не чувствую, что она предназначена для косвенного вызова. Вот для чего предназначен polkit.
/etc/sudoers.d/sysctl
---
youname ALL = NOPASSWD: /bin/systemctl

Если это касается программного обеспечения, которое вы планируете распространять, я бы определенно выбрал решение polkit и сделал это для каждой группы (согласно связанному ответу ). Это означает, что вам не нужно жестко -кодировать имя пользователя, вместо этого добавляйте любых пользователей, которых вы хотите, в эту группу, чтобы получить функциональность.

5
18.03.2021, 23:10

Может стоит создать блок из пользователя?

systemctl edit --user --force --full myNewUnit

В редакторе откроется новый файл ~/.config/systemd/user/myNewUnit.serviceВставьте контент, сохраните и работайте с ним без рут прав

systemctl enable --user myNewUnit
systemctl start --user myNewUnit
systemctl status --user myNewUnit

Или если вам нужно отредактировать, чем открыть без--force

systemctl edit --user --full myNewUnit

Надеюсь, ничего не напутал и будет полезно

2
18.03.2021, 23:10

Теги

Похожие вопросы