2011-06-23 17 views
0

私はいくつかの人にnginx経由でアカウントをホスティングしているとしましょう。ホームディレクトリにある追加の設定ファイルを含む仮想ホスト設定ファイルに行を追加すると、これがセキュリティ違反につながる可能性がありますか?ここで ユーザーが自分のnginx仮想ホストファイルに追加できるようにするためのセキュリティ上のリスクはありますか?

は、ユーザーの仮想ホストのファイルです:

server { 
    listen 80; 
    server_name user.example.com; 
    access_log /var/log/nginx/user.access.log; 
    location/{ 
     root /home/user/htdocs; 
     index index.html index.htm index.php; 
    } 
    location ~ \.php$ { 
     fastcgi_pass unix:/var/run/php-fastcgi/php-fastcgi.socket; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME /home/user/htdocs$fastcgi_script_name; 
     include /etc/nginx/fastcgi_params; 
    } 

    # The important bit 
    include /home/user/extra_config; 

} 

理論的には、これは各extra_configのタイムスタンプをチェックするcronジョブと組み合わせることでしょう、そして必要に応じてリロードがnginxの。理想的には、ユーザーはこれを利用してプライベートファイル/ディレクトリへのアクセスを拒否したり、書き換えを作成したりすることができます。基本的に.htaccessの代わりになります。しかし、このアプローチにはどんな落とし穴がありますか?それを達成するためのより良い方法はありますか?

答えて

1

ホワイトリストに記載されている設定ディレクティブのみを許可することをお勧めします。悪意のあるユーザー(Eve)が別のユーザーのトラフィックをハイジャックすることは望ましくありません。例えば、私は、ユーザーが次のような設定を構築することができ信じる:

} 
server { 
    listen 80; 
    server_name alice.example.com; 
    root /home/eve/htdocs; 
} 
server { 
    listen 80; 
    server_name bob.example.com; 
    root /home/eve/htdocs; 
} 
server { 
    listen 80; 
    server_name passwd.example.com; 
    root /etc/passwd; 

代わりに、理想的な世界であなたは専用UIのいくつかの並べ替えを介して入力を取るだろうし、そのユーザから自分をconfigの適切なnginxのを構築します入力。たとえば、ユーザーは同様の方法でIP禁止を指定できます。IPのリストのみを受け入れるUIがあります。私は、正規表現を介してIPの形式を確認し、nginx拒否ディレクティブを書き出します。

+0

"include"ステートメントは実質的にファイルを構成、不要な中括弧などに挿入しますか?それが私がカスタムパーサーを使用するのに十分な理由です。助けてくれてありがとう。 – Fraxtil

+0

セキュリティ上の問題がないと仮定しても、あなたが見張りをしなければならないもう一つのことは、構文が間違っていると思います。インクルードされた設定ファイルに致命的なsytaxエラーがある場合、nginxは起動しません。 –

+0

私は悪い構文もチェックするパーサーを書いています。最悪の場合、reloadコマンドは失敗し、単にサーバーをそのまま残します。 – Fraxtil

関連する問題