Я пытаюсь понять некоторые концепции, связанные с переменными безопасности и среды для веб-приложения, работающего под Apache на сервере Ubuntu 10.04.
У меня есть несколько приложений, которые я хотел бы запустить как пользователь без оболочки или пароля (я понимаю, что это хорошая идея, но я не эксперт). Одно из приложений - это веб-приложение, которое запускается с помощью системного сценария инициализации, другие - это служебные программы, запускаемые на специальной основе из командной строки через sudo
с -u
переключатель.
Каждому приложению требуется доступ к одному и тому же набору переменных среды. Я могу изменить сценарий, запускающий каждое приложение, и установить там переменные среды, но я бы предпочел, чтобы переменные среды каким-то образом были установлены для пользователя, под которым запускается приложение.
Мои вопросы:
Возможно ли установить переменные среды «на пользователя» для пользователя, у которого нет оболочки? Я прочел "Установка переменных среды для службы без оболочки входа в Debian", но данное решение по сути то же самое, что и изменение каждого из моих сценариев приложения.
Если я не могу установить переменные среды для каждого пользователя, каковы риски безопасности, связанные с предоставлением пользователю оболочки?
Какие есть альтернативы или рекомендации для этой предположительно распространенной ситуации, если таковые имеются?
Использование файла конфигурации и добавление переменных через сценарий запуска приложения - действительно правильный способ справиться с этим. Если вам нужно предоставить определенные переменные среды для сценариев или двоичных файлов, не являющихся оболочкой (например, perl, python или java), вы можете вызвать их с помощью оболочки оболочки, предоставить необходимые переменные, а затем exec
настоящий сценарий.
Если ваши приложения запускаются каким-либо сценарием, он должен быть запущен путем вызова оболочки (shebang в верхней части файла), даже если у пользователя нет оболочки входа в систему. Для этого вы можете изменить переменные среды через rc-файлы оболочки так же, как и для обычных пользователей. Я считаю, что вам все равно потребуется вставить переменную BASH_ENV, чтобы запускать rc-файлы, поскольку вы вызываете скрипт не интерактивно.
Я настоятельно рекомендую вам использовать первый метод и создать какую-то конфигурацию для приложений. В долгосрочной перспективе справиться с этим будет намного проще.
Переменные среды - это аспект оболочки. Поэтому я совершенно уверен, что нет оболочки == нет переменных среды.
Как правило, я не предоставляю права входа в учетную запись службы. Короткий ответ: это просто повод для беспокойства. Это просто еще одна точка потенциального вторжения.
Лично я бы использовал файл конфигурации (/etc/myapp.conf). У вас может быть просто сценарий инициализации, который запускает веб-приложение, является источником файла, а другие приложения просматривают местоположение по умолчанию или принимают аргументы в командной строке.