Моя компания установила какое-то программное обеспечение, которое разрабатывает для запуска в качестве службы с использованием init.d в более старой версии SLES. Недавно мы начали настройку новой среды на экземпляре SLES 12 в Amazon EC2 и обнаружили, что SLES 12 теперь использует systemd, а не init.d. Однако, похоже, что службы, определенные в скриптах init.d (то есть в /etc/init.d), все еще могут запускаться как обычно, потому что systemd выполняет некоторую магию в фоновом режиме для обработки уже существующих скриптов init.d, что замечательно.
Однако мы не хотим запускать наш сервис от имени пользователя root - вместо этого мы создаем нового пользователя для запуска нашего сервиса. Проблема заключается в том, что когда мы пытаемся запустить наш сервис от имени пользователя без полномочий root, то все, что делает systemd, чтобы подготовиться к запуску старой службы init.d, запрашивает аутентификацию root, что, по нашему мнению, не требуется. В более старой среде SLES (с использованием фактического init.d) мы можем без проблем запустить службу от имени пользователя без полномочий root. Насколько я могу судить, наши права доступа без полномочий root и права владения файлами одинаковы в обеих средах.
Причина, по которой я думаю, что это скрытая обработка старой вещи init.d системой systemd, заключается в том, что скрипт для запуска нашего сервиса отображает строку текста непосредственно перед фактической командой для запуска / остановки сервиса, но эта строка не выводится, т. е. у нас запрашивают root-аутентификацию перед оператором echo. Аутентификация требуется для определенного пакета / модуля, похороненного в systemd, но я не могу вспомнить его имя в данный момент.
Обратите внимание, что мы хотели бы избежать создания специфичного для сервиса файла .service для нашего сервиса, если это возможно - мы хотим придерживаться имеющегося у нас скрипта init.d и просто запустить его как пользователь без полномочий root. Кроме того, мы хотели бы запустить сервис без использования sudo (нам не нужен sudo в старой среде).
Извиняюсь за отсутствие деталей в этом вопросе - я обновлю его более конкретными деталями, как только вернусь в офис и смогу взять конкретные детали и т.д. Кажется, что это может быть распространенной проблемой, хотя, я надеюсь, кто-то может пролить свет на это.
В частности: мы хотим запустить службу, определенную старым сценарием init.d, как пользователь без полномочий root, используя systemd в SLES 12.
(обновление 1) Точный результат попытки запустить наш скрипт /etc/init.d/my_service stop:
/etc/init.d/my_service stop
перенаправление на systemctl stop electrum-gateway-main.service
==== АУТЕНТИФИКАЦИЯ ДЛЯ org.freedesktop.systemd1.manage-units === Аутентификация необходима, чтобы остановить my_service.service.
Аутентификация как: root
Пароль:
Служба не работала, когда мы пытались ее остановить, но это не относится к проблеме аутентификации.
Я немного покопался в нашем сценарии, и сценарий достигает следующей строки, прежде чем запрашивать auth:
. /etc/rc.status
Так вот в чем проблема. Нужны ли права суперпользователя для вызова /etc/rc.status?