Мені потрібно дозволити користувачам у dbaгрупі контролювати database@послуги. Відповідь на це пов’язане питання полягає в тому, щоб просто перерахувати всі systemctl"дієслова", які я хочу дозволити у sudoersфайлі, однак це не стосується мого випадку, оскільки я заздалегідь не знаю, які бази даних можуть існувати в системі. Наприклад, якщо я перелічу
%dba = /usr/bin/systemctl start database@awsesomeapp
%dba = /usr/bin/systemctl start database@anotherawsesomeapp
%dba = /usr/bin/systemctl start database@yetanotherawsesomeapp
%dba = /usr/bin/systemctl start database@wowyetanotherawsesomeapp
# ... other "verbs" omitted for brevity
який не охоплює випадки, які можуть існувати в майбутньому, і dba не зможе
$ sudo systemctl start database@omgwowyetanotherawsesomeapp
У всякому разі, я більше розмірковую щодо упаковки, ніж для того, щоб співпрацювати з певною системою.
Зауважте, що, як показано в цій дивовижній відповіді на інше пов'язане питання , використання судо глобусів для цього в кінцевому підсумку не є безпечним:
%dba ALL = /usr/bin/systemctl start database@[a-z]* # UNSAFE!
дійсно дозволяє
$ sudo systemctl start database@awsesomeapp unrelatedservice
Я підозрюю, що використання sudoне вирішить мою проблему (хоча я впевнений, що я помиляюся). Чи є інший спосіб дозволити користувачам, які не користуються коренем, контролювати systemdпослуги?
Для того, що це варто, мені потрібно це робити в системі CentOS 7 та в майбутньому в системах RHEL7. Мені також були б цікаві рішення, які працюють на Arch Linux.