Apacheは権限があるにもかかわらずファイルにアクセスできない

Apacheは権限があるにもかかわらずファイルにアクセスできない

他のユーザーに読み取りアクセスを許可したくないので、自分のユーザーとユーザーをapacheというグループに追加しapachme、そのグループを、Web ページのルートを含む、アクセスしたいすべてのファイルとフォルダーに設定しましたapache。次に、グループと所有者にすべての権限を付与しました。この後も、Apache は読み取り権限を allow all( ) に設定しないとファイルにアクセスできませんrwxrwxr--(0774)

インデックスファイルを含むフォルダは、apacheグループapachmeと権限によって所有されていますrwxrwxr-x(0775)

0770 許可がファイルに保存されました

これだと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 が定義されていない場合は、デフォルトのユーザーとグループが使用されます。

  1. 要求されたファイル名(スクリプト)/ディレクトリの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>

関連情報