他のユーザーに読み取りアクセスを許可したくないので、自分のユーザーとユーザーをapache
というグループに追加しapachme
、そのグループを、Web ページのルートを含む、アクセスしたいすべてのファイルとフォルダーに設定しましたapache
。次に、グループと所有者にすべての権限を付与しました。この後も、Apache は読み取り権限を allow all( ) に設定しないとファイルにアクセスできませんrwxrwxr--(0774)
。
インデックスファイルを含むフォルダは、apache
グループapachme
と権限によって所有されていますrwxrwxr-x(0775)
これだと500エラーが発生しますが、変更すると0774
正常に動作します
これらは、Apache がどのユーザーで実行されているか、そしてそれがグループに追加されたことを確認するためのものでした。
答え1
セキュリティの観点から、Apache と同じユーザーで Web ページを設定するのは、あまり良い考えではありません。Apache ユーザーは Web ページを読み取ることはできますが、書き込むことはできません。
そのため、標準構成では、Web 構造がすべてのユーザーに読み取り可能であり、書き込みが必要な場合は通常 Apache ユーザーのみが書き込み可能であるのが普通ですが、これはセキュリティ上の悪夢です。
これを回避する戦略の 1 つは、mod_ruid2 をインストール/使用することです。https://github.com/mind04/mod-ruid2
Debian の場合は、次の操作を行うだけで十分です。
apt-get install libapache2-mod-ruid2
Apache のデフォルト ユーザーはディストリビューションによって異なることに注意してください。Debian では www-data、RH/CentOS では apache、SuSE では wwwrun です。以降、これを Apache のデフォルト ユーザーと呼ぶことにします。
vhost でディレクティブを定義しない場合は、従来の方法で動作します。そうでない場合は、動作が変更されます。
その考え方は、vhost に対する権限を持つユーザーで vhost 内でプロセスを実行することです。そのため、ファイルはその所有権を持ち、希望どおりに他のユーザーはファイルを読み取ることができません。通常、vhost ごとにユーザーを定義します。
仮想ホストまたは仮想ホストのディレクトリ ディレクティブでは、そのディレクトリに対してアクティブになるユーザーとグループを定義します。user:usergroup は、Apache が仮想ホスト/ディレクトリにアクセスするときに使用する有効な権限であり、そのグループに属するすべてのユーザーがディレクトリへの書き込み/表示が可能になります。
<Directory "/vhostdir/">
RMode config
RUidGid user usergroup
....
そのため、ディレクトリへの書き込み時に、ファイルがユーザー グループによって管理されている場合、user:usergroup の所有権を持つ 660 としてファイルを作成できるようになりました。同様に、ファイルは、全世界に対して読み取り権限を持つ別のユーザーによって作成することもできます。ただし、書き込みの場合は、Apache のデフォルト ユーザーではなく、この別のユーザーになります。
mod_ruid2 の利点は次のとおりです。
- 仮想ホスティングハウジング環境では、ユーザーは他のユーザーのファイルを読み取ることができません。
- 単一のユーザーでも、他のユーザーとしてファイルを作成することができますが、Apacheのデフォルトユーザーもruid2ユーザーもそれらを上書きすることはできません。
- さらに重要なことは、ファイルの書き込みが ruid2 ユーザーで行われ、Apache のデフォルト ユーザーでグローバルに行われなくなることです。
github ページから:
mod_ruid2 は mod_ruid と mod_suid2 をベースにした apache 2.0、2.2、2.4 用の suexec モジュールです。
- Linux カーネルのみが必要なプロセス機能を実装しているため、Linux でのみ動作します。 - 1 つの要求後に httpd の子プロセスを終了する必要がないため、mod_suid2 よりもパフォーマンスが優れています。カーネル機能を利用し、新しい要求を受け取った後に再度 suid を実行します。 - セキュリティ上の問題がいくつかあります。たとえば、攻撃者が httpd プロセスを悪用すると、有効な機能を設定し、root に setuid することができます。カーネル (grsec) などのセキュリティ パッチを使用することをお勧めします。
- 主な操作モードは 2 つあります: stat と config 1. config はデフォルトで、uid と gid を定義する必要があります。[ug]id が定義されていない場合は、デフォルトのユーザーとグループが使用されます。
- 要求されたファイル名(スクリプト)/ディレクトリのuidとgidにstat httpd setuidとsetgidを実行します。これは、仮想ホスティングにmod_vhost_aliasを使用する場合に適しています。
インストール 1. ここから最新の libcap をダウンロードしてインストールします 2. /apachedir/bin/apxs -a -i -l cap -c mod_ruid2.c を実行します 3. httpd.conf を設定します 4. apache を再起動します
設定オプション: RMode config|stat (デフォルトはconfig) RUidGid user|#uid group|#gid - RModeがconfigの場合、このuidとgidに設定します
RMinUidGid ユーザー|#uid グループ|#gid - uid/gid が最小 uid/gid より小さい場合は、デフォルトの uid/gid に設定されます RDefaultUidGid ユーザー|#uid グループ|#gid
RGroups group1 group2 - setgroups 経由で設定された追加グループ @none - 以前に定義されたすべてのグループをクリアします。
RDocumentChrRoot - chrootディレクトリとその中にあるドキュメントルートを設定する
例:
<VirtualHost example.com> ServerAdmin [email protected] RDocumentChRoot /home /example.com/public_html ServerName example.com ServerAlias www.example.com RMode config # unnecessary since config is the default RUidGid user1 group1 RGroups apachetmp <Directory /home/example.com/public_html/dir> RMode stat </Directory> <Directory /home/example.com/public_html/dir/test> RMode config RUidGid user2 group2 RGroups groups1 </Directory> <Directory /home/example.com/public_html/dir/test/123> RUidGid user3 group3 </Directory> <Location /yustadir> RMode config RUidGid user4 user4 RGroups groups4 </Location>