Я пытаюсь настроить задание Upstart для запуска при запуске системы, и это также может быть запущено / остановлено членами группы, кроме sudo
. В предыдущей версии я использовал update-rc.d
и скрипты, хранящиеся в нем, /etc/init.d/
чтобы заставить это работать, добавляя %Group ALL = NOPASSWD: /etc/init.d/scriptname
в мой файл sudoers, но я не могу получить эквивалентную работу для Upstart.
Я попытался добавить %Group ALL = NOPASSWD: /sbin/initctl start jobname
в файл sudoers, но попытка запустить команду start jobname
приводит к этой ошибке:
start: Rejected send message, 1 matched rules; type="method_call", sender=":1.21" (uid=1000 pid=5148 comm="start jobname " interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")
Насколько я могу судить, это жалоба на то, что моей учетной записи не предоставлена возможность отправлять сообщения «Пуск» в конфигурационном файле D-Bus для Upstart. Я не смог найти никакой информации о том, как отредактировать этот файл, чтобы дать группе разрешение на доступ к определенному сервису - существует ли такая опция? Есть ли способ отредактировать файл Sudoers, чтобы я мог выполнить задание без редактирования файла конфигурации? Мне лучше просто придерживаться предыдущей версии?
Я лично использую следующую строку в файле /etc/sudoers.d/jobname_myuser:
как описано здесь: /server//a/390723/68608
источник
Такой опции не существует в sudo.
Разница между сценариями Sysv и файлами конфигурации Upstart заключается в том, что сценарии Sysv - это сценарии, исполняемые файлы сами по себе, и вы можете указать sudo, чтобы какая-то группа могла их выполнять. С другой стороны, файлы конфигурации Upstart - это просто файлы конфигурации, а не исполняемые файлы, поэтому выполнение
start
(символическая ссылка наinitctl
) - это то, что позволяет sudo. Ваша проблема здесь в том, что, позволяя людям бегать,initctl
вы позволяете имinitctl
все.Решение, хотя и простое, если вы заботитесь только об одной работе. Сделайте сценарий, скажем,
/usr/bin/jobname.sh
сзатем,
chmod 755 /usr/bin/jobname.sh
наконец, добавьте этот исполняемый файл в файл sudoers:Таким образом, каждый может позвонить
jobname.sh start
илиjobname.sh stop
контролировать эту конкретную работу. Вы можете добавить некоторые проверки, чтобы разрешить толькоstart
иstop
параметры и т. Д.источник
initctl
, а в том, что Upstart отклоняет любые сигналы, отправленные пользователями / группами, явно не предоставившими запись политики Allow в Upstart.conf? И нет никакого способа обеспечить более высокую степень детализации, чем параметр «все задания или нет» в файле конфигурации?com.ubuntu.Upstart0_6.<JOB>
Часть) в Upstart.conf. В зависимости от ваших потребностей может быть проще создать такой сценарий для него, вместо того, чтобы писать политики dbus, перезапускать dbus и т. Д. Политика Dbus, очевидно, является «правильной» вещью, но в зависимости от случая простой сценарий может пойти долгий путь с меньшими проблемами.com.ubuntu.Upstart0_6.jobname
качестве выданногоsend_interface
того же сообщения об ошибке, что и раньше. Если я прав в предположении, что вывод ошибки содержит информацию о сигнале, то выглядит, что интерфейс или назначение не отражают службу Upstart, к которой относится сигнал. Я думаю, что служебная информация - это просто аргументы в сообщении вызова метода D-Bus, и я не уверен, что могу отредактировать политику D-Bus для Upstart, чтобы принимать решения на основе значений аргументов.sudo jobname.sh start
, так что Upstart видит запрос как поступающий от пользователя.root
Я прилагаю усилия, чтобы попытаться сделать это «правильный» путь (таким образом, в первую очередь, отход от сценариев Sys-V), поэтому я бы хотел, чтобы это работало через политику D-Bus или какой-либо другой вариант конфигурации Upstart, но если я не могу заставить это работать, я приму этот ответ."$1"
.[ "$1" = "start" -o "$1" = "stop" ]
Я полагаю, что с вашим тестом это безопасно, но$1
расширение без кавычек в скрипте, запускаемом с правами root, является просто нездоровой привычкой (если разделение слов не является преднамеренным желанием) ...Как указывалось выше, у демона dbus есть файл конфигурации, который специализирует его для конкретного приложения.
Файл конфигурации также устанавливает ограничения ресурсов, параметры безопасности и так далее.
Подробнее см. Dbus-daemon-1 (1) - справочная страница Linux
Чтобы разрешить группе запускать / останавливать задания Upstart, добавьте следующую политику в /etc/dbus-1/system.d/Upstart.conf
Вы должны рассмотреть последствия такой политики для безопасности перед изменением политики по умолчанию. Члены YourGroupName смогут запускать / останавливать все задания Upstart.
источник
start: You do not have permission to modify job: jobname
когда попытался запустить службу.