Мне нужно разрешить пользователям в 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
Во всяком случае, я думаю больше об упаковке, чем о том, чтобы играть с определенной системой.
Обратите внимание, что, как показано в этом удивительном ответе на другой связанный вопрос , использование глобусов sudo для этого в конечном счете небезопасно:
%dba ALL = /usr/bin/systemctl start database@[a-z]* # UNSAFE!
позволяет
$ sudo systemctl start database@awsesomeapp unrelatedservice
Я подозреваю, что использование sudo
не решит мою проблему (хотя я надеюсь, что ошибаюсь). Есть ли другой способ разрешить пользователям без полномочий root управлять systemd
службами?
Что бы это ни стоило, мне нужно сделать это в системе CentOS 7 и системах RHEL7 в будущем. Я также был бы заинтересован в решениях, которые работают на Arch Linux.
источник
Предлагаемое решение на основе
SUID
Вы можете создать указанный скрипт, который вызывает systemctl с помощью sudo. Сделайте скрипт принадлежащий root. Предоставьте
SUID
разрешения для пользователя root, права на чтение и выполнение для группы администраторов баз данных (dba).Только будьте осторожны, чтобы не предоставлять разрешение на запись группе или другим, потому что таким образом они могут изменить сценарий и заставить его выполнить все, что предшествует sudo! Также убедитесь, что сценарий является пуленепробиваемым для ввода.
Этот сценарий можно улучшить, проверив, действительно ли указан аргумент, и напечатав сообщение Usage:, если нет ..., также, поскольку это сценарий, с
SUID
которым было бы целесообразно проверить; чтобы избежать внедрения других команд после аргумента. Или, что еще лучше, убедитесь, что в качестве входных данных указана только одна из строк, связанных с приложением, которые вы упомянули!Затем вы должны убедиться, что разрешения для скрипта строго следующие:
Затем, чтобы проверить правильность разрешений:
Итак, подведем итоги:
1.
owner of the script is root
2. файл
can be read and executed by the dba group members
3.
no-one else will be able to even read
он.4.
SUID
позволит пользователю, выполняющему скрипт, стать пользователем root, пока скрипт выполняется.5. Таким образом, sudo не остановится для пароля.
В любом случае, в системе с несколькими пользователями, будьте очень осторожны с
SUID
потому , что он может оставить место для злоупотребления разрешения.источник
SUID
он не будет работать для скриптов по умолчанию.