Управление сценариями инициализации 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 полезность. Просто попросите своих пользователей сделать следующее:

  1. запустить команду crontab -e
  2. добавьте строку, подобную следующей:

    @reboot /home/user/script argument

  3. спасти

Более подробная информация: http://www.cyberciti.biz/faq/linux-execute-cron-job-after-system-reboot/

Ваша конструкция звучит как кошмарный сон:)

Просто дайте своим пользователям sudo доступ к существующим сценариям инициализации по мере необходимости.

Я не совсем уверен, чего вы хотите достичь, но для меня это звучит немного похоже на.profile и.bash_logout, которые выполняются, когда пользователь запускает оболочку или выходит из оболочки.

Разница с вашим решением заключается в том, что сценарии запускаются при входе пользователя в систему или при запуске новой оболочки, а не при запуске компьютера. Но я должен признать, что не чувствовал бы себя комфортно, чтобы позволить любому пользователю запускать сценарии при запуске...

Я был бы склонен запретить сценарии и применять очень строгий короткий список стандартных сценариев и команд, на которые пользователь может ссылаться в простом файле списка, который можно легко проверить во время загрузки. Консервированные сценарии будут храниться в обычном месте без прав записи пользователя. Файл списка будет содержать имя сценария или команды и любые требуемые аргументы. Один из этих распространенных сценариев предоставит пользователю обработку остановки / запуска / перезапуска, если она необходима после входа в систему.

Причина всей этой паранойи отчасти связана с безопасностью, а больше с контролем того, что происходит во время запуска. Я имею в виду, можете ли вы представить, какой это будет кошмар, если ваши пользователи увлекутся запуском всех видов вещей одновременно, "только потому, что могут"? Не говоря уже о плохо написанных сценариях.

В противном случае, если вы можете найти готовое решение, которое решает эти проблемы (это один из критериев, которые вы упоминаете в своем вопросе), это будет путь.

Другие вопросы по тегам