サーバー上で 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に設定できる追加のセキュリティ対策はありますか?