В Интернете есть несколько руководств, в которых показано, как получить nodejs, запущенный на сервере, но они, как правило, пропускают несколько деталей безопасности. Это немного загруженный вопрос, и я не уверен, с чего начать. Мне было интересно, может ли кто-нибудь разъяснить следующие подробности.Nodejs, PM2 и nginx для развертывания безопасности?
Во-первых, моя установка:
Я установил узел локально с не SUDO пользователя, так как работает узел с администратором является плохой идеей:
/home/appuser |--- nodejs/ # node install |--- bin/ |--- include/ |--- lib/ |--- share/ |--- app/ |--- node_modules/ |--- public/ # holds html templates, static files , uploaded files |--- core/ # holds main app js files |--- app.js # Main Nodejs program |--- config.js # Configuration that holds authentication details, other config stuff |--- package.json
Я могу запустить приложение с помощью
PM2
делаяpm2 start app.js
.Моя
nginx
конфигурация:server { listen 80; server_name mydomainname.com; location/{ proxy_pass http://localhost:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
Мои опасения являются:
(1) ПРИМЕНЕНИЕ - В случае, если основной app/
живут внутри /home/appuser
?
Любая опасность в том, что мои файлы приложений живут внутри моего дома, не являющегося пользователем sudo? Если да, где должны быть файлы моего приложения?
Мне интересно, должно ли
public/
находиться в другом месте и не находиться в той же папке, что и файлы приложения. Я бы не хотел, чтобы исходные файлы приложения просачивались, особенно мойconfig.js
, который содержит некоторую конфиденциальную информацию, такую как данные моей базы данных и подробности электронной почты.Если его нужно переместить, где
/public
живут относительноapp/
?Прямо сейчас на днях разрешений на
app/
естьchown -R appuser:appuser app/
, так что пользователям принадлежат все файлы. Существуют ли другие разрешения, которые я должен установить в своей папке приложения?
(2) PM2 - Так как я установил nodejs и его модули на месте, как бы я благополучно получить pm2
перезагрузить nodejs приложение после перезагрузки сервера?
Я понимаю, что
pm2-init.sh
будет жить в/etc/init.d/
, и это происходит автоматически, если я установилpm2
глобально с Судом.Как я могу получить
pm2
, чтобы безопасно перезагрузить приложение, используя моего пользователя, не являющегося пользователем sudo?
(3) NGINX
Как я могу безопасно служить
public/
черезnginx
, если они подаются как это:http://mydomainname.com/public
Мое приложение обрабатывает маршруты и должны бросить
404
если маршрут не найден. Но возможно ли кому-то обойти это и злонамеренно сделать мое приложение илиnginx
просматривать другие каталоги?т.е. вне каталога приложения
http://mydomainname.com/../../etc/path/to/secrets
или просто локально в мое приложение
http://mydomainname.com/public/../../config.js
Существуют ли дополнительные меры безопасности, которые могут быть установлены в
nginx
или nodejs, чтобы предотвратить это, если это возможное?
Это слишком много вопросов для актуального вопроса о переполнении стека, если вы хотите прослушать меня в этом чате в JavaScript, и я отвечу на них http://chat.stackoverflow.com/rooms/17/javascript –
О стартовом скрипте 'pm2 startup -u myUser' [см. здесь] (https://github.com/Unitech/PM2/blob/master/ADVANCED_README.md#startup-script) – soyuka