Назад | Перейти на главную страницу

Управление сценариями инициализации rc.d для каждого пользователя

Я хочу делегировать сценарии инициализации SysV каждому пользователю.

Как и в SysV init, каждый элемент в ${HOME}/rc.d начиная с S будет запускаться при запуске сервера с start аргумент. То же самое и с выключением сервера, начиная с K и с stop аргумент.

Я сам думал о написании сценария, но, может быть, там уже есть какая-то реализация1. Таким образом, это будет сценарий в /etc/init.d/ который проходит через всех пользователей и запускает runparts как пользователь на соответствующих скриптах.

Платформа здесь представляет собой Linux (разновидность Debian), но я думаю, что решение будет достаточно переносимым между различными Unix-подобными платформами.

Обновить:

Дело здесь в том, чтобы пользователи могли создавать свои собственные сценарии инициализации, которые должны запускаться от их имени при загрузке системы. Как указал Дэн Карли, службы не смогут получить доступ к каким-либо системным ресурсам (привилегированным портам, системным журналам и т. Д.).

1. Таким образом, мне не нужно так много думать обо всех тонких последствиях для безопасности, таких как, например, тайм-ауты скриптов ...

Ваш вопрос в основном включает ответ ... Сценарий, который будет перебирать подкаталог каждого домашнего пользователя в поисках исполняемых сценариев. Затем sudo -u user /export/home/user/scripts/scriptname.sh start. У вас не будет контроля над тем, что делают скрипты, поэтому вам нужно будет доверять своим пользователям.

Настаивайте на том, чтобы они написали свои сценарии, принимающие stop start restart как параметр $ 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, которые выполняются, когда пользователь запускает оболочку или выходит из оболочки.

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

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

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

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