2

サーバー上で nodejs を実行する方法を示すオンラインのガイドがいくつかありますが、セキュリティに関するいくつかの詳細をスキップする傾向があります。これは少し難しい質問で、どこから始めればよいかわかりません。誰かが次の詳細を明確にできるかどうか疑問に思っていました。

まず、私のセットアップ:

  • 管理者でノードを実行するのは悪い考えであるため、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) APPLICATION - メインapp/は中に住まなければなり/home/appuserませんか?

  • アプリ ファイルを非 sudo ユーザー ホーム内に置くことには危険がありますか? もしそうなら、私のアプリファイルはどこに置くべきですか?

  • public/アプリケーションファイルと同じフォルダーに置くのではなく、別の場所に置くべきかどうか疑問に思っています。config.js特に、データベース認証の詳細や電子メール認証の詳細などの機密情報を保持しているアプリケーションのソース ファイルが漏洩することは望ましくありません。

    移動する必要がある場合、どこに/public住んでいapp/ますか?

  • 現在の権限app/chown -R appuser:appuser app/であるため、ユーザーはすべてのファイルを所有しています。アプリケーション フォルダーに設定する必要がある他のアクセス許可はありますか?

(2) PM2 - nodejs とそのモジュールをローカルにインストールしたのでpm2、サーバーの再起動後に nodejs アプリを安全に再起動するにはどうすればよいですか?

  • 私の理解では、それpm2-init.shは に存在し、sudo を使用してグローバルに/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に設定できる追加のセキュリティ対策はありますか?

4

1 に答える 1

0
  1. 私が採用する方法は、すべてのファイルをnode:node-developer. そして、ユーザーの下でアプリを起動しますnode。node-developer は開発者のグループです。すべてのファイル権限をに設定します770

  2. nodeユーザーにログインして pm2 を init scirpts として起動する簡単なシェル スクリプトを作成します。

  3. 適切な権限設定を使用することで解決しました。Nginx はnginxユーザーの下で実行されます。ファイルが公開されている場合は、それを作成しnginx:nginxます。ユーザーでもできますpublic/../../something。Nginx にはアクセス権がありません。

于 2015-05-31T20:41:34.823 に答える