Управление сценариями инициализации rc.d для каждого пользователя
Я хочу делегировать сценарии инициализации SysV каждому пользователю.
Как и инициализация SysV, каждый элемент в ${HOME}/rc.d
начиная с S
будет запущен при запуске сервера с start
аргумент. То же самое для выключения сервера с тем, который начинается с K
и с stop
аргумент.
Я думал о сценарии сам, но, возможно, уже есть какая-то реализация1. В итоге это будет скрипт в /etc/init.d/
который перебирает всех пользователей и запускает runparts
как пользователь на соответствующих сценариях.
Платформа здесь - Linux (разновидность Debian), но я думаю, что решение было бы довольно переносимым среди различных Unix-подобных платформ.
Обновить:
Суть в том, чтобы пользователи могли создавать свои собственные сценарии инициализации, которые должны запускаться от их имени при загрузке системы. Как отметил Дэн Карли, сервисы не смогут получить доступ к каким-либо системным активам (привилегированные порты, системные журналы,...).
1. Таким образом, мне не нужно слишком много думать о всех тонких последствиях для безопасности, таких как тайм-ауты сценариев, например...
5 ответов
Ваш вопрос в основном включает в себя ответ.... Сценарий, который будет перебирать подкаталог каждого домашнего пользователя в поисках исполняемых скриптов. Затем запускается sudo -u user /export/home/user/scripts/scriptname.sh. Вы не будете контролировать действия сценариев, поэтому вам нужно будет доверять своим пользователям.
Настаивайте на том, чтобы они написали свои сценарии для принятия перезапуска при останове как параметр $1 и что им не следует использовать переменные окружения, которые были установлены в их файлах.profile,.cshrc или.bashrc. Сценарий должен быть автономным.
#!/usr/bin/bash
run_cmd {
cd /export/home
for HOMEDIR in *; do
for SCRIPT in /export/home/$HOMEDIR/scripts/*; do
if [ -x $SCRIPT ]; then
echo "$ACTION user $HOMEDIR's script $SCRIPT"
sudo -u $HOMEDIR $SCRIPT $ACTION &
fi
done
done
}
case $1 in
start) ACTION=start;
run_cmd;;
stop) ACTION=stop;
run_cmd;;
restart) ACTION=stop;
run_cmd;
sleep 60;
ACTION=start;
run_cmd;;
*) echo "$1 not recognized as valid cmd";;
esac
exit 0
Вам нужно будет настроить это для вашей среды, местоположения bash/homedirs и т. Д.
Суть в том, чтобы пользователи могли создавать свои собственные сценарии инициализации, которые должны запускаться от их имени при загрузке системы.
Это уже возможно в большинстве систем, используя cron
полезность. Просто попросите своих пользователей сделать следующее:
- запустить команду
crontab -e
- добавьте строку, подобную следующей:
@reboot /home/user/script argument
- спасти
Более подробная информация: http://www.cyberciti.biz/faq/linux-execute-cron-job-after-system-reboot/
Ваша конструкция звучит как кошмарный сон:)
Просто дайте своим пользователям sudo
доступ к существующим сценариям инициализации по мере необходимости.
Я не совсем уверен, чего вы хотите достичь, но для меня это звучит немного похоже на.profile и.bash_logout, которые выполняются, когда пользователь запускает оболочку или выходит из оболочки.
Разница с вашим решением заключается в том, что сценарии запускаются при входе пользователя в систему или при запуске новой оболочки, а не при запуске компьютера. Но я должен признать, что не чувствовал бы себя комфортно, чтобы позволить любому пользователю запускать сценарии при запуске...
Я был бы склонен запретить сценарии и применять очень строгий короткий список стандартных сценариев и команд, на которые пользователь может ссылаться в простом файле списка, который можно легко проверить во время загрузки. Консервированные сценарии будут храниться в обычном месте без прав записи пользователя. Файл списка будет содержать имя сценария или команды и любые требуемые аргументы. Один из этих распространенных сценариев предоставит пользователю обработку остановки / запуска / перезапуска, если она необходима после входа в систему.
Причина всей этой паранойи отчасти связана с безопасностью, а больше с контролем того, что происходит во время запуска. Я имею в виду, можете ли вы представить, какой это будет кошмар, если ваши пользователи увлекутся запуском всех видов вещей одновременно, "только потому, что могут"? Не говоря уже о плохо написанных сценариях.
В противном случае, если вы можете найти готовое решение, которое решает эти проблемы (это один из критериев, которые вы упоминаете в своем вопросе), это будет путь.