У меня на сервере работает несколько приложений; они встроены в meteor.js, поэтому являются процессом nodejs, и я запускаю их, используя модуль forever npm;
В настоящее время я запускаю навсегда для всех из них, используя одного и того же пользователя, чья группа владеет всеми каталогами веб-сайтов; теперь, когда это собирается стать производственным сервером, я хотел бы лучше понять проблемы безопасности, которые это может вызвать; Есть ли общие правила безопасности, которым нужно следовать для запуска процесса nodejs? Возможно ли, что мой нынешний подход опасен?
Предполагая, что вашему приложению не нужен доступ на запись к данным приложения (чего на самом деле не должно), мы делаем следующее:
Мы разбиваем пользователей на два класса - node-<app>-runtime
и node-<app>-data
. <app>
имя приложения. Они оба являются частью группы node-<app>
. Это не настоящие имена, которые мы используем для любопытных.
Мы делаем следующее:
1) Для создания приложения мы всегда строим на отдельной машине, а затем получаем npm dist
скрипт, который размещает только файлы необходимо запустить приложение в /dist
каталог и отправляет заархивированную копию этого каталога на наш сервер развертывания. У этого есть двоякое преимущество: мы точно знаем, что будет происходить при развертывании, и можем быть уверены, что любые dev-deps в node_modules
, .git
каталоги и другие данные не добавляются на производственные машины. Это также означает, что когда GitHub / Npm / etc. отключается, это не нарушает автомасштабирование и т. д. - наш сервер развертывания просто доставляет предварительно созданный архив.
2) Мы используем нашу систему управления конфигурацией для создания каталога журналов в стандартизированном месте, в который можно записать node-<app>-runtime
с разрешениями 640. Путь к приложению предоставляется стандартной переменной среды. Наш демон обработки журналов автоматически принимает их и отправляет на удаленный сервер.
3) Наша система развертывания помещает файлы приложения в определенное место и устанавливает, что они принадлежат node-<app>-data
с разрешениями 640. Путь к приложению предоставляется стандартной переменной среды.
Еще один совет, который у меня есть, - всегда проверять, настраиваете ли вы NODE_ENV=production
. Многие модули узлов используют это соглашение, чтобы отключить символы отладки или повысить производительность (express
приходит в голову).