web-dev-qa-db-ja.com

システムの他の部分からのApache仮想ホストの分離

私は、Apache VirtualHostsとしてさまざまなWebサイトをホストするWebサーバーをセットアップしています。これらはそれぞれ、スクリプト(主にPHP、その他の可能性)を実行する可能性があります。

私の質問は、これらの各VirtualHostを相互に、およびシステムの残りの部分からどのように分離するかです。たとえば、私は欲しくないウェブサイトXは、ウェブサイトYまたはサーバーの「プライベート」ファイルの構成を読み取ります。

現時点では、FastCGI、PHPおよびSUExecを使用してVirtualHostsをセットアップしました( http://x10hosting.com/forums/vps-tutorials/148894-debian- Apache-2-2-fastcgi-php-5-suexec-easy-way.html )ですが、SUExecはユーザーが自分以外のファイルを編集/実行できないようにします-ユーザーは引き続きconfigなどの機密情報を読み取ることができますファイル。

サーバー上のすべてのファイルのUNIXグローバル読み取りアクセス許可を削除することを検討しました。これにより上記の問題が修正されますが、サーバーの機能を中断せずに安全にこれを実行できるかどうかはわかりません。

私はchrootの使用についても調査しましたが、これはサーバーごとにのみ実行でき、仮想ホストごとでは実行できないようです。

VirtualHostsをシステムの他の部分から分離するための提案を探しています。

PS私はUbuntu 12.04サーバーを実行しています

私の答え:現在の構成にほぼ従って終了しましたが、すべての仮想ホストに対してchroot jailを実行しました。 chroot刑務所に/var/wwwその後、すべてのユーザーのデータをサブフォルダーに入れ、それぞれにグループ/その他のr/w/x権限を無効にします。このオプションは、ソースコードを変更せずにすべて実行できるため、特に望ましいものでした。

@Chrisの回答を選択しました。完全に記述され、FTPとSELinuxも考慮されているためです。

11
JesperB

これは、Apacheでmod_usersモジュールを有効にすることで実行できます。

Apache構成でUserDirをセットアップする必要があります。別の設定ファイルでこれを行い、それを含めることをお勧めします。インクルードをラップする

<IfModule mod_users.c>
   Include conf/extra/userdir.conf
</IfModule>

チュートリアル全体をお伝えできますが、これでApacheの設定を始めることができます。 http://www.techytalk.info/enable-userdir-Apache-module-ubuntu-debian-based-linux-distributions/

ヒント:SELinuxを実行している場合(およびその必要がある場合)、Apacheにユーザーのホームへの読み取りアクセス権を付与する必要があります。これを行うには、次のように設定します。

Sudo setsebool -P httpd_enable_homedirs=On

また、ユーザーdirs public_htmlディレクトリへのファイル権限と、親ディレクトリからルートまでのr-x権限が必要です。

明らかに、たとえばvsftpdでユーザーのためにchrootをセットアップする必要があります。インストール:

apt-get vsftpd

Chrootを構成するには、viまたはnanoで/etc/vsftpd/vsftpd.confを開きます。検索してコメントを外すか追加します:chroot_local_user = yes

FTP経由で推奨するsftpの同じ動作を取得できます。/etc/ssh/sshd_configを開き、Matchブロックと次の行を追加します。

Subsystem   sftp    internal-sftp

Match Group web_users
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no
Match

これにより、任意のユーザーがchrootされますweb_usersグループ内。また、/ sbin/nologinに設定して、シェルへのアクセスを拒否する必要があります。

useradd -G "web_users" -s /sbin/nologin new_user

これがパブリックプロダクションサーバーである場合は、OS、OpenSSH、Apache、PHP、vsftpdにいくつかの強化を適用し、いくつかの厳密なiptablesとTCP=ラッパーを適用します。 SELinuxもそのままにしておきます。

4
Chris

suphpまたは PHP-FPM を確認することをお勧めします。

これは基本的に、PHPインタープリターがその仮想ホスト用に構成された特定のユーザーに「su」することを可能にします。これにより、一般的なファイルシステムのアクセス許可を利用して、すべての仮想ホストを分離できます。

パフォーマンスを考慮してFPMをお勧めします。ホームページから、これはあなたにとって最も興味深いものです:

また、特定のfpmプールを特定のuidおよびgidで実行できるようにする、プールごとのユーザーおよびグループオプションも重要です。さようならsuphp!

6
gertvdijk
4
tacotuesday