Я ищу фреймворк / библиотеку / среду, чтобы обычный пользователь мог настраивать собственные серверные процессы. Эти процессы должны запускаться под его uid, как и любой другой пользовательский процесс.
Однако определение того, какие процессы должны быть запущены, с аргументами, которые они получают и т. Д., Должно быть указано обычным пользователем без дополнительных привилегий. Для меня важно, чтобы это происходило без необходимости для пользователя фактически входить в систему. В идеале он должен работать с SYSV init, но также подойдет и система на основе systemd.
Примеры / варианты использования:
У всех них есть общая черта: я мог бы захотеть запустить несколько экземпляров одного и того же двоичного файла (с разными параметрами), и что эти параметры могут нуждаться в регулярных изменениях. Однако пользователи должны иметь возможность настраивать все это, не требуя привилегий root.
Любые предложения / указатели, как это можно реализовать в Linux?
РЕДАКТИРОВАТЬ: минимальным требованием является просто запуск пользовательских процессов, но, очевидно, потребуются более продвинутые механизмы управления. Например, должен быть простой способ узнать, запущена ли служба, остановить экземпляр, перезапустить его, перезагрузить, ...
cron
предусматривает это с помощью @reboot
префикс (Vixie и, возможно, другие ароматы, проверьте man 5 crontab
). Пользователь будет использовать crontab
для создания / редактирования собственного файла crontab и указать
@reboot /some/path/command -flags --moreflags
Что будет запускать эту команду при запуске от имени этого пользователя.
Это будет примерно 10 строк сценария оболочки, зачем вам фреймворк / библиотека / среда?
В качестве быстрого примера, используя sysV init ....
#!/bin/bash
. /etc/rc.d/init.d/functions
. /etc/sysconfig/network
DAEMON_USERS=`cat /etc/daemon_users`
CMD="$1"
for DUSER in $DAEMON_USERS ; do
DSCRIPTS=`ls /home/${DUSER}/init/`
for DFILE in DSCRIPTS ; do
if [ -x "/home/${DUSER}/init/${DFILE}" -a ! -d "/home/${DUSER}/init/${DFILE}" ]
then
su -c $DUSER /home/${DUSER}/init/${DFILE} $CMD
fi
done
done
если ты действительно хотите разрешить им запускать файлы от имени root, затем удалите su -c $ DUSER и добавьте их в sudoers, чтобы они могли перезапускать / добавлять файлы без перезагрузки.
Так ... просто Начало приложение как пользователь, которого вы хотите запустить как и не пытайтесь получить доступ ко всему, что требует root (например, привилегированные порты, файлы, которые могут быть прочитаны только пользователем root и т. д.)?
Если вы хотите автоматически запускать эти демоны и управлять ими через процесс инициализации SysV, вам нужно будет создать сценарий инициализации для каждого, который задает параметры (или считывает их из файла, к которому непривилегированный пользователь имеет доступ на запись) и запускает демон, используя su -c
или подобное, но ОСТОРОЖНО: Это имеет СЕРЬЕЗНЫЙ последствия для безопасности (тщательно созданный файл «параметров» может позволить пользователю выполнить произвольный код от имени пользователя, выполняющего вашу последовательность инициализации, обычно это root).
DerfK упомянул cron @reboot
вариант, который может быть лучшим выбором (меньше риска для безопасности), но ваши администраторы должны знать, что эти программы будут запускаться cron ...