Apacheは権限を持っていてもファイルにアクセスできません。

Apacheは権限を持っていてもファイルにアクセスできません。

他のユーザーに読み取りアクセスを許可したくないので、私のユーザーとユーザーをというグループに追加し、そのグループをapacheWebapachmeページのルートを含むアクセスするすべてのファイルとフォルダに設定しました。apacheその後、グループと所有者にすべての権限を付与します。その後も、Apacheは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のデフォルトユーザーと呼びます。

仮想ホストでディレクティブを定義しない場合は、従来の方法で動作します。それ以外の場合は動作が変わります。

アイデアは、仮想ホストで実行されるプロセスと、その仮想ホストにアクセスする権限を持つユーザーを持つことです。その結果、ファイルはその所有権を持ち、必要に応じて他のユーザーはそのファイルを読み取ることができなくなります。通常、仮想ホストごとに1人のユーザーを定義します。

仮想ホストまたは仮想ホストのディレクトリディレクティブで、ディレクトリに有効なユーザーとグループを定義できます。 user:usergroupはApacheが仮想ホスト/ディレクトリにアクセスするために使用する有効な権限であるため、このグループに属するすべてのユーザーはディレクトリを書き込みまたは表示できます。

    <Directory "/vhostdir/">
            RMode config
            RUidGid user usergroup

    ....

したがって、ディレクトリに書き込むときにファイルがユーザーグループによって管理されている場合、ファイルはuser:usergroupの所有権を使用して660として作成できるようになりました。同様に、これらのファイルはグローバル読み取り権限を持つ他のユーザーが作成できますが、書き込みの場合はApacheのデフォルトユーザーではなく他のユーザーになります。

mod_ruid2の利点は次のとおりです。

  • 仮想ホスティング環境では、ユーザーは他のユーザーのファイルを読み取ることができません。
  • 単一のユーザー内で別のユーザーとしてファイルを作成できます。Apacheのデフォルトユーザーまたはruid2ユーザーはそのファイルを上書きできません。
  • さらに重要なのは、ファイルの書き込みは、Apacheのデフォルトユーザーがグローバルに実行するのではなく、ruid2ユーザーが実行することです。

Githubページから:

mod_ruid2情報は、mod_ruidとmod_suid2に基づくApache 2.0、2.2、および2.4用のsuexecモジュールです。

-Linuxカーネルだけが必要なプロセス機能を実装するため、Linuxでのみ実行されます。 - リクエスト後にhttpd子を終了する必要がないため、mod_suid2よりもパフォーマンスが優れています。カーネル機能を活用し、新しい要求を受け取ったら、再度suidを使用します。 - いくつかのセキュリティ問題があります。たとえば、攻撃者が httpd プロセスを正常に悪用した場合、有効な機能と setuid を root に設定できます。カーネル(grsec)などのセキュリティパッチを使用することをお勧めします。

- 2つの主な動作モードがあります:statとconfig 1.configがデフォルトであり、uidとgidを定義する必要があります。 [ug]idが定義されていない場合は、デフォルトのユーザーとグループが使用されます。

  1. stat httpd setuidとsetgidを、要求されたファイル名(スクリプト)/ディレクトリのuidとgidに設定します。仮想ホスティングに 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 user|#uid group|#gid - uid/gid < min uid/gid より小さい場合、デフォルトの uid/gid に設定 RDefaultUidGid user|#uid group|#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>

関連情報