Intereting Posts
Вентиляторы поднимаются после приостановки «Exec: gnome-session: not found» при входе в систему с использованием lightdm Отрегулируйте уровень подсветки в соответствии с окружающей средой Как установить Viber в Ubuntu? Менеджер обновлений показывает решение для виртуализации x86 – модули ядра для DKMS Почему «gedit» постоянно возвращается к размерам вкладок по умолчанию? Как я могу изменить значок приложения в Unity launcher? Как объединить несколько изображений в один файл GIMP с помощью командной строки? Как полностью восстановить сетевые настройки ubuntu? Можно ли полностью удалить пусковую установку единства? Ремонт сломанной установки с Live USB без потери данных Как перемещать самый большой файл в каждом подкаталоге в текущий каталог? Как уменьшить количество TTY? Как запустить tmux с несколькими панелями одновременно? Как настроить сеть с поддержкой VirtualBox на хосте Windows 7?

Разрешить группе non-sudo контролировать работу Upstart

Я пытаюсь настроить работу 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, чтобы я мог запускать задание без редактирования файла конфигурации? Мне лучше просто придерживаться предыдущей версии?

Вы можете начать с выяснения, где хранится конфигурация D-Bus для Upstart. См. Фрагмент destination="com.ubuntu.Upstart" из сообщения об ошибке? Теперь попробуйте grep в папке с конфигурационными файлами D-Bus:

 vhost07:~ $ grep -r "com.ubuntu.Upstart" /etc/dbus-1 /etc/dbus-1/system.d/Upstart.conf: <allow own="com.ubuntu.Upstart" /> [...skipped...] 

В файле Upstart.conf есть несколько примеров политик. Думаю, вы могли бы попытаться определить формат политики у них. Затем попробуйте разрешить вашему конкретному пользователю только те действия, которые ему нужны. Например, как в:

 <policy user="pope_benedict"> <allow send_destination="com.ubuntu.Upstart" send_interface="com.ubuntu.Upstart0_6.Job" send_member="Start"/> </policy> 

Это должно позволить пользователю pope_benedict начать эту работу.

Обратите внимание, что значения атрибутов политики «allow» указаны в исходном сообщении об ошибке.

Я лично использую следующую строку в файле /etc/sudoers.d/jobname_myuser:

 myuser ALL = (root) NOPASSWD: /sbin/start jobname, /sbin/stop jobname, /sbin/restart jobname, /sbin/status jobname 

как описано здесь: https://serverfault.com/a/390723/68608

Такой вариант не существует в sudo.

Разница между сценариями Sysv и конфигурационными файлами Upstart заключается в следующем: скрипты Sysv представляют собой скрипты, исполняемые файлы в отдельности, и вы можете сказать sudo, чтобы разрешить некоторым группам их выполнять. С другой стороны, файлы конфигурации Upstart – это всего лишь файлы конфигурации, а не исполняемые файлы, поэтому выполнение start (символическая ссылка на initctl ) – это то, что позволяет sudo. Ваша проблема заключается в том, что разрешая людям запускать initctl вы разрешаете им initctl все.

Решение хотя и прост, если вы заботитесь только о одной работе. Создайте скрипт, скажем /usr/bin/jobname.sh с

 #!/bin/sh initctl $1 jobname 

затем chmod 755 /usr/bin/jobname.sh и, наконец, добавьте этот исполняемый файл в файл sudoers:

 %Group ALL = NOPASSWD: /usr/bin/jobname.sh 

Таким образом, каждый может вызвать jobname.sh start или jobname.sh stop для управления этим конкретным заданием. Возможно, вы захотите добавить некоторую проверку, чтобы разрешить только параметры start и stop и т. Д.

Как указано выше, dbus daemon имеет файл конфигурации, который специализируется на конкретном приложении.

 ls /etc/dbus-1/system.d/ avahi-dbus.conf bluetooth.conf ... Upstart.conf wpa_supplicant.con 

Файл конфигурации также устанавливает пределы ресурсов, параметры безопасности и т. Д.

Подробнее см. Dbus-daemon-1 (1) – справочная страница Linux

Чтобы позволить группе запускать / останавливать задания Upstart, добавьте следующую политику в /etc/dbus-1/system.d/Upstart.conf.

  <policy group="YourGroupName"> <allow send_destination="com.ubuntu.Upstart" send_interface="com.ubuntu.Upstart0_6.Job" send_type="method_call" send_member="Start" /> <allow send_destination="com.ubuntu.Upstart" send_interface="com.ubuntu.Upstart0_6.Job" send_type="method_call" send_member="Stop" /> </policy> 

Перед изменением политики по умолчанию следует учитывать последствия такой политики для безопасности. Члены YourGroupName смогут запускать / останавливать все задания Upstart.