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


11

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

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

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

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

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

私のVirtualHostsをシステムの残りの部分から分離する提案を探しています。

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

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

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

回答:


4

これは、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ディレクトリへのファイル権限と、親ディレクトリからルートまでのrx権限が必要です。

明らかに、たとえば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

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

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

これがパブリックな本番サーバーになる場合は、OS、OpenSSH、Apache、PHP、vsftpdにいくつかの強化を適用し、厳密なiptablesとTCPラッパーを適用することを強くお勧めします。SELinuxもそのままにしておくことをお勧めします。


3
mod_userdirが別々のドメインの仮想ホスティングを提供する方法がわかりません。さらに、Apache内のユーザーディレクトリ間のセキュリティについては何も見つからないため、分離の観点からセキュリティについて懸念があります。その機能を提供していないようです。
gertvdijk 2012年

6

suphpまたはPHP-FPMをご覧になることをお勧めします。

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

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

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


4

1
これらのリンクを調べましたが、仮想ホストごとにchrootできないようです。多分私はのようにchrootするグローバルwwwディレクトリを定義し、/var/wwwすべてのホストをそこのサブディレクトリに置く必要があります、これらの各サブディレクトリはグローバル実行/読み取り権限を削除していますか?
JesperB

私の主なポイントはでchroot、仮想サーバーごとにそれを行うことができます。ここに例があります。この場合、彼らはを使用していますmod_chroot
tacotuesday
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.