web-dev-qa-db-ja.com

ApacheはDocumentRootは存在するが存在しないと言っている

Webminを使用して次の仮想ホストを作成しました。

<VirtualHost *:80>
        DocumentRoot "/var/www/whatever"
        ServerName whatever.ourdomain
        <Directory "/var/www/whatever">
                allow from all
                Options +Indexes
        </Directory>
</VirtualHost>

そして、Apacheを再起動すると、

Starting httpd: Warning: DocumentRoot [/var/www/whatever] does not exist

実は、ディレクトリは絶対に存在します。私はそれを見つめています。 pwdは、現在のディレクトリなどを表示します。正確に綴るのはそれほど難しくありません。 httpdログで他のエラーや警告を見つけることができません。 Apache:apacheはディレクトリとすべてのサブディレクトリ/ファイルを所有します。ここには、シンボリックリンクなどは含まれていません。これが何であるか、またはこれがなぜであるかを判断するために他に何を見なければならないのですか?

OSはCentOS 6.0

12
Jake Wilson

私の頭に浮かんだ最初のことは、Apacheがそのディレクトリにアクセスする権限を持っていることですか?

また、これ: https://stackoverflow.com/questions/3948038/Apache-says-my-documentroot-directory-doesnt-exist

8
yrosen

これは、SELinuxケースのチュートリアルアプローチです。

SELinuxがアクティブかどうかを確認します。

 $ sestatus
 SELinux status:                 enabled
 SELinuxfs mount:                /selinux
 Current mode:                   enforcing
 Mode from config file:          enforcing
 Policy version:                 24
 Policy from config file:        targeted

その場合、いくつかの比較チェックが役立ちます。たとえば、サーバーのデフォルトのDocumentRootは/var/www/htmlにありますが、/path/to/document/rootのような別の場所に配置する必要があります。

SELinuxがリソースをアクティブにいじっていない場合、ディレクトリのls -dZは次のように表示されます。

$ ls -dZ /path/to/document/root
? /path/to/document/root/

一方、SELinuxコンテキストが適用される場合、ls -dZは次のようになります。

$ ls -dZ /path/to/document/root
drwxrws--x+ cfgadm cfgadmin system_u:object_r:file_t:s0 /path/to/document/root

機能しているDocumentRootと比較すると、次のようになります。

$ ls -dZ /var/www/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html

_rおよび_tは、chconへの-r--roleおよび-t--type)引数に関連しています。削減されたmanページ:

NAME
   chcon - change file security context

SYNOPSIS
   chcon [OPTION]... CONTEXT FILE...
   chcon [OPTION]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE...
   chcon [OPTION]... --reference=RFILE FILE...

DESCRIPTION
   Change the security context of each FILE to CONTEXT.  With --reference,
   change the security context of each FILE to that of RFILE.

   --reference=RFILE
          use RFILE's security context rather than  specifying a CONTEXT value

   -R, --recursive
          operate on files and directories recursively

最初は、次のように動作すると思われるかもしれませんが、動作しないかもしれません。

$ Sudo chcon -R -t httpd_sys_content_t /path/to/document/root

それでもWebサーバーがDocumentRootを表示できない場合は、コンテキストがルートに戻るまでずっと重要であることに注意してください。

$ Sudo chcon -R -t httpd_sys_content_t /path/to/document
$ Sudo chcon -R -t httpd_sys_content_t /path/to
$ Sudo chcon -R -t httpd_sys_content_t /path

この時点で、Webサーバーはディレクトリを参照できます。

はい、私は今夜、難しい方法を学びました。

注:chconの使用には、概念的にRedHatのドキュメント( 5.6.1。一時的な変更:chcon )による欠点があります。

The chcon command changes the SELinux context for files. However, changes
made with the chcon command do not survive a file system relabel, or the
execution of the restorecon command.

semanageおよびrestoreconを使用して、より永続的な変更を行います。簡単な例:

 $ Sudo semanage fcontext --add -t httpd_sys_content_t -s system_u \
     "/path/to/document/root(/.*)?"
 $ Sudo restorecon -FR /path/to/document/root

restoreconに関しては、-Fがコンテキスト全体(つまり、ユーザーとタイプ)に影響を与える必要があることに注意してください。また、-Rは再帰的に変更を加えることを意味します。引数-vまたは-pは、進行状況を詳細または簡潔に表示できます。 -FRnvを使用して、実際に変更を加えずに何が起こるかを確認します。

この方法でsemanageを使用すると、次のようなコマンドでローカルセキュリティの変更を表示できます。

$ Sudo semanage export

semanage exportの出力を保存し、semanage importで使用して、一連の変更をさまざまなシステムに簡単に適用できます。 。

注:この回答は、サイトの最も基本的なタイプのコンテキストを提供します。セキュリティはさらに細かくすることができます。たとえば、次のようなコマンドでWebサーバーページに適用できるタイプのリストを参照してください。

$ seinfo -t | grep http

注:semanageseinfoなどのユーティリティは、デフォルトではインストールされない場合があります。少なくとも一部のディストリビューションでは、必要なパッケージに次のような名前を付けることができます。

policycoreutils-python
setools-console
16
kbulgrien

SELinuxのように聞こえます。/var/log/auditディレクトリを調べて確認します。

最悪の場合、前述のように、selinuxはいつでもオフにできますが、代わりに使用することをお勧めします。たとえば、Apacheで使用するディレクトリを作成した場合、ここで説明したように、適切なコンテキストがありません。

[root@amp23140 www]# ls -Z
drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 error
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 icons
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 whatever

したがって、それが発生した場合は、別のディレクトリ(この場合はhtml)のコンテキストを適用するだけです。

[root@amp23140 www]# chcon whatever --reference=html
[root@amp23140 www]# ls -lZ
drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 error
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 icons
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 whatever
6
Rilindo

ルートでこのコマンドを使用して、Apacheの実行を許可する「httpd_sys_content_t」のセキュリティコンテキストを変更します。

chcon -R -h -t httpd_sys_content_t /var/www/whatever

使用する ls -dZ /var/www/whatever詳細なセキュリティロールを表示するには

0
user236790