2012-10-17 18 views
7

ウェブアプリケーションをどこから提供するのか、どのユーザをどこから実行するのか、さまざまなアドバイスがオンラインで表示されます。Webアプリケーションを実行するためのLinuxユーザー権限のベストプラクティスは?

たとえば、私は/ var/www/site 、/ srv/www/site、/ home/$ USER/site。

ユーザーはwww-data、$ USER(ユーザーアカウント)、またはその目的で特別に作成されたカスタムユーザー(ユーザーuwsgiなど)です。

セキュリティに関して、私が選ぶことができる最高のスキームは何ですか?

参考までに、Nginxとuwsgiを使ってDjangoサイトを展開しようとしています。

現在、uwsgiはuid/gidがwww-dataとして設定されているので、Emperorモードでrootとして実行されているため、vassalsはNginxワーカーと同じ権限で起動します。私は/ homeから奉仕していますが、動くことを考えています。

答えて

3

場所はあなたに最適なものを選択してください。ここで手助けするためにいくつかの考慮されています

  • 場所/varの下では、change in sizeファイルのためのもの、または一般的に「変数。」
  • /srvは、通常、マシン上で実行されているサービスに関連するファイルを示します。
  • /homeは、通常、対話型ユーザー用に予約されている必要があります。しかし、システムユーザのホームディレクトリを何かに設定することはできます。

セキュリティのため、可能な限り分割する必要があります。アプリケーションはWebサーバーと同じユーザーとして実行しないでください。そのため、サーバー自体に関連する機密ファイルを悪用することはできません(.htaccessなど)。アプリケーションのバイナリファイル(またはDjango、pythonソース)は、アプリケーションユーザへの書き込みアクセスなしで、rootが所有する必要があります。

はここだ、それを設定する方法についての私の2セント:

  • Djangoアプリケーション:/usr/lib/appname/またはインストールされている場合/usr/lib/python/site-packages/appname/。 rootによって所有されている、chmod 644.
  • アプリケーションのファイル(例:sqlite dbファイル、FastCGIのUnixソケット、アップロードされたファイルストレージなど):/var/lib/appname/。アプリユーザーが所有するchmod 600
  • アプリユーザーのシェルは/bin/nologin、家は/var/lib/appname/です。ユーザーにはパスワードが設定されていません。
+0

私はvirtualenvを持っていれば、/ var/lib/appname/venvの下に行きますか?また、明らかにするために、アプリユーザーは、例えば、 'uwsgi'だが、ssh経由でログインしているユーザーではない(そしてsudo権限を持っている)? – user1431368

+0

FWIW、私のPythonコードは[Djangoチュートリアル](https://docs.djangoproject.com/en/1.4/intro/tutorial01/)(セクション「このコードはどこに住んでいますか?」)のために/ homeにあります – user1431368

+0

はいあなたが複数のアプリケーションを実行している場合を除いて、 'uwsgi'はあなたのアプリケーションユーザーのための良い選択です。ユーザーはsudoまたはログインの権限を持ってはいけません。チュートリアルで指摘しているように、最も重要なことは、Webルートの下にコードを持たないことです。 – bonsaiviking

関連する問題