2015-05-31 4 views
1

В Интернете есть несколько руководств, в которых показано, как получить 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, чтобы предотвратить это, если это возможное?

+1

Это слишком много вопросов для актуального вопроса о переполнении стека, если вы хотите прослушать меня в этом чате в JavaScript, и я отвечу на них http://chat.stackoverflow.com/rooms/17/javascript –

+0

О стартовом скрипте 'pm2 startup -u myUser' [см. здесь] (https://github.com/Unitech/PM2/blob/master/ADVANCED_README.md#startup-script) – soyuka

ответ

0
  1. Как я принять, чтобы иметь все файлы будут node:node-developer. И начните свое приложение под пользователем node. где node-developer - это группа для разработчиков. и установить все права доступа к файлам для 770

  2. Написать простой скрипт, который записывает в node пользователя и начать PM2, как INIT scirpts

  3. , решаемые с помощью соответствующих параметров разрешений. Nginx работает под nginx. Если файлы являются общедоступными, сделайте это nginx:nginx. Даже пользователь мог сделать public/../../something. Nginx не будет иметь права доступа к нему.

Смежные вопросы