web-dev-qa-db-ja.com

ユーザーのホームディレクトリでApache 13の許可が拒否されました

友人のWebサイトは、ドキュメントルートを/var/www/xxxから/home/user/xxx

Apacheは、Webブラウザー経由でサイトにアクセスしようとすると、13のアクセス許可拒否エラーメッセージを表示します。

サイトは仮想ディレクトリとして構成されています。すべてのApache構成は変更されませんでした(ディレクトリの変更を除く)

chmod 777 /home/user/xxx、chown Apache/home/user/xxx。しかし、それらは機能しませんでした。

ユーザーのホームディレクトリに何らかのセキュリティ機能が設定されていますか?サーバーOSはCentOS(Godaddy VPS)です。

どんな助けも大歓迎です!

ありがとう!

38
Dave

判明... xxxに加えて、親ディレクトリ、ユーザーもchmod 755しなければなりませんでした。

87
Dave

centOS 5.5を使用していて、私にとってはSElinuxでした。ルートとして実行することで一時的に無効にすることができます

echo 0 > /selinux/enforce

それが誰かを助けることを願って

37
kek

selinuxがその問題の原因です。...

TException:エラー:TSocket:localhost:9160に接続できませんでした(許可が拒否されました[13])これを解決するには、SELinuxブール値を変更する必要があります(再起動後も自動的に保持されます)。また、httpdを再起動してプロキシワーカーをリセットすることもできますが、これは厳密には必要ありません。

setsebool -P httpd_can_network_connect 1

または

(13)許可の拒否

エラー13は、ファイルシステムのアクセス許可の問題を示しています。つまり、Apacheは不正な許可のためにファイルまたはディレクトリへのアクセスを拒否されました。一般に、Apache構成ファイルの問題を意味するものではありません。

ファイルを提供するには、Apacheがオペレーティングシステムによってそれらのファイルにアクセスするための適切な許可が必要です。特に、httpd.confで指定されたユーザーまたはグループは、提供されるすべてのファイルを読み取り、それらのファイルを含むディレクトリと、ファイルシステムのルートまでのすべての親ディレクトリを検索できる必要があります。

Httpd.confで指定されたユーザーまたはグループが所有していないリソースに対するUnixライクなシステムの典型的なパーミッションは、通常のファイルでは644 -rw-r--r--、ディレクトリまたはCGIスクリプトでは755 drwxr-x-r-xです。また、それらをサポートするオペレーティングシステムの拡張アクセス許可(SELinuxアクセス許可など)を確認する必要がある場合があります。

Unixライクなシステムでファイル/usr/local/Apache2/htdocs/foo/bar.htmlにアクセスすると、Permission Deniedエラーを受け取ったとしましょう。

最初に、ファイルの既存の権限を確認します。

cd/usr/local/Apache2/htdocs/foo ls -l bar.htm

必要に応じて修正します。

chmod 644 bar.html

次に、ディレクトリと各親ディレクトリ(/ usr/local/Apache2/htdocs/foo、/ usr/local/Apache2/htdocs、/ usr/local/Apache2、/ usr/local、/ usr)に対して同じことを行います。

ls -la chmod + x。 cd ..

ルートまで繰り返す

一部のシステムでは、ユーティリティnameiを使用して、パスの各コンポーネントに沿って権限をリストすることにより、権限の問題を見つけることができます。

namei -m /usr/local/Apache2/htdocs/foo/bar.html

すべての標準許可が正しく、それでも許可拒否エラーが表示される場合は、拡張許可を確認する必要があります。たとえば、コマンドsetenforce 0を使用してSELinuxをオフにし、問題が解決するかどうかを確認できます。その場合、ls -alZを使用してSELinuxパーミッションを表示し、chconでそれらを修正できます。

まれに、Apache2.confファイルの他の場所でのファイル許可の問題など、他の問題が原因である可能性があります。たとえば、WSGIScriptAliasディレクティブが実際のファイルにマッピングされていません。エラーメッセージは、どのファイルが読めなかったかについて正確ではない場合があります。

ファイルやディレクトリをモード777に設定しないでください。「テストするだけ」であっても、「単なるテストサーバー」であってもです。テストサーバーの目的は、安全な環境で物事を正しく行うことであり、間違ったやり方で逃げることではありません。問題が実際に存在するファイルにあるかどうかだけがわかります。

11
selvakumar

修正したかどうかはわかりませんが、httpd.confにあります

ユーザー/グループの設定を確認してください。通常は、に設定されます

ユーザーwwwグループwww

もしそうならあなたの名前/グループに変更してください

ユーザーGregグループスタッフ

7
Greg

Apacheのエラーログは、許可が拒否される理由を説明します。また、 serverfault.com は、このような質問に対するより良いフォーラムです。

エラーログに「permission denied」と表示されている場合は、Webサーバーが実行されているユーザーにsuを実行し、問題のファイルから読み取ろうとします。たとえば、次のとおりです。

Sudo -s
su - nobody
cd /
cd /home
cd user
cd xxx
cat index.html

それらのいずれかが「許可拒否」エラーを与えるかどうかを確認します。

3
Josh

Httpd.confでログレベルをデバッグに設定できませんか? (FreeBSDを使用しています)

ee usr/local/etc/Apache22/httpd.conf

ログレベルの変更:

'LogLevel:error_logに記録されるメッセージの数を制御します。可能な値には、debug、info、notice、warn、error、crit、alert、emergが含まれます。

デバッグに変更してから、エラーログを再確認してください。

3
vorbis

SELinuxである可能性があります。適切なログファイル(/ var/log/messages?-RedHat派生物を使用してからしばらく経っています)を確認して、アクセスがブロックされているかどうかを確認します。

2
Andrew Medico

エラー:

 [エラー] [クライアント127.0.0.1](13)許可が拒否されました:パスワードファイルを開けませんでした:/home/XXX/svn/svn_password

情報:

 ## SELinuxセキュリティコンテキストファイルラベル
#httpd_sys_content_t拡張子が.htmlおよび.htmの通常の静的Webページで使用されるタイプ。
#httpd_sys_script_ro_tディレクトリ。
#httpd_sys_script_ra_t httpd_sys_script_ro_tタイプと同じですが、CGIスクリプトによってファイルにデータを追加することもできます。
#httpd_sys_script_rw_tこのタイプのファイルは、削除を含むCGIスクリプトによって変更できます。 。
#httpd_sys_script_exec_t CGIスクリプトの実行に必要なタイプ

溶液:

 [root @ localhost]#perror 13 
 OSエラーコード13:許可が拒否されました
 [root @ localhost]#chown Apache.apache/home/XXX/svn/-R 
 [root @ localhost]#semanage fcontext -a -t httpd_sys_script_rw_t "/home/XXX/svn(/.*)?"
[root@localhost]# restorecon -R -v/home/XXX/svn/
 [root @ localhost]#restorecon reset/home/XXX/svn/context 
 [root @ localhost]#ls -dZ /home/XXX/svn/
 drwxr-xr-x。 Apache apache system_u:object_r:httpd_sys_rw_content_t:s0 /home/XXX/svn/
[root@localhost]# ls -dZ/home/XXX/svn/svn_password 
-rwxr-xr-x Apache apache system_u:object_r:httpd_sys_rw_content_t:s0 /home/XXX/svn/svn_password
[root@localhost]#