私はFreeBSDサーバー(会社が選んだOS)を持っています。現在、各Webサーバーで複数のWebサイトを運営しています。 WebサイトはPHPで、Apacheモジュールモードで実行されます。Apacheではchrootされていないため、ApacheとPHPはファイルシステム全体にアクセスできます。
私のプライベートウェブサイトには、共有ホスティングサービスを使用しています。サービスプロバイダーがカスタマイズされたApacheバージョンを実行しているようです。興味深いことに、サーバー上の各Webサイト(私が推測するVirtualHost)はDocumentRootにchrootされています。 Apacheのセットアップでこれを行うにはどうすればよいですか?
ApacheのChrootDir を確認しましたが、これでほぼ十分ですが、VirtualHostsの処理に問題があるか、正しく設定できません。正常に動作しているように見えますが(VirtualHostsにアクセスできます)、Apacheを(再)起動するときに問題があるようです。 VirtualHostsDocumentRootの警告が表示されます。構成の抽出:
ChrootDir "/usr/local/www/Apache22/data"
DocumentRoot "/"
<VirtualHost *:80>
DocumentRoot "/test-1"
ServerName test-1.example.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/test-2"
ServerName test-1.example.com
</VirtualHost>
そして警告は次のとおりです。
Warning: DocumentRoot [/test-1] does not exist
Warning: DocumentRoot [/test-2] does not exist
また、SSLを有効にするとさらに多くの問題が発生します。しかし、まだそれらを解決することに取り掛かっていません。
だから、私の質問は次のとおりです。
#1)仮想ホストを個別にchrootすることはサポートされていません。 ChrootDirディレクティブの「コンテキスト」は「サーバー構成」であるため、...
「これは、ディレクティブがサーバー構成ファイル(httpd.confなど)で使用できるが、<VirtualHost>
または<Directory>
コンテナー内では使用できないことを意味します。htaccessファイルでは使用できません。 「」 [1]
それ以外の場合は、簡単に取り除くことができる迷惑な警告がありますが、それ以外の場合はすでに正常に機能しています。ただ...
cd /; ln -s/usr/local/www/Apache24/data。
...そして、偽の迷惑な警告が消えるだけでなく、ApacheのChrootDirディレクトリへの素晴らしく短くて便利なパスがあります。
私の[はい、FreeBSDも]の場合、それは...
cd /; ln -s/usr/local/www/Apache24/data/vhosts。
...これは少し良いと思いますが、それぞれに独自のものです。
#2)ここでare"chroot [ing] ApacheのグローバルDocumentRoot"。述べたように、サポートされているのはそれだけです。あなたの/ test-? ServerNameディレクティブやその他の必要なものを使用してディレクトリの構成を完了した場合、ディレクトリは仮想ホストとして問題なく機能します。 SSLと同じです。
*)プロバイダーに関しては、隔離を実現するためにあらゆる方法を実行している可能性があります。ここからはわかりません。ごめんなさい。
*)最後に、PHPを使用しているため、php.iniファイルに「open_basedir」を設定して、同様にロックダウンすることもできます。また、このcanは、各仮想ホストの定義に次のようなものを含めることで、仮想ホストごとに個別に設定できることに注意してください。
php_admin_value open_basedir "/ data/test-1"
[1] http://httpd.Apache.org/docs/2.4/mod/mod_unixd.html#chrootdir
いわばバグです。問題は、Apacheが実際に開始する前に構成ファイルをチェックしていることです。これは、いくつかの理由で完全に理にかなっています。ただし、これは、chroot syscallが発行される前にチェックが実行されるため、ディレクトリが見つからないことを意味します。メッセージを無視しても安全ですが、Apacheのコードを編集する以外にメッセージを取り除く方法はありません。