Mac OS XのビルトインApacheで403を修正するには?


25

私は私の新しいMacBook Airの13"のローカル環境を設定しようとしています:内蔵の自分とのApache DocumentRoot、PHP、およびMySQLの私は普通に更新します。/etc/hostsただ、かなりのパーマリンクで私の地元のウェブサイトを実行するために:local/example。参照の場合、私は通常、チェック:

この時間は、私は単純に取得しています403禁止エラーに私がヒットするたびに127.0.0.1localhostまたはlocal。最初に、ターミナルを通して、ApacheとPHPの両方が実行されていることを確認しました(PHPページを表示できませんが)。次に、Apacheの許可に従ってすべての許可を更新しました。今私はただ必死です。関連するApache構成は次のとおりです。

Apacheはどういうわけか私へのアクセスを拒否してDocumentRootいるようです(ちなみに~/Sites)。~/Sites実際はシンボリックリンクであるためDocumentRoot、次のパス(すべて同じディレクトリを指す)で更新しようとしました。

  • ~/Sites
  • /Users/joao/Sites
  • /Users/joao/Dropbox/Workflow/Sites元のディレクトリ)

まだ403を投げています。これを修正/デバッグする方法はありますか?

クイックアップデート —私の/var/log/apache2/joao.pt-error_log外観は次のとおりです。

[Sun Jul 07 12:50:45 2013] [error] [client 127.0.0.1] (13)Permission denied: access to / denied
[Sun Jul 07 12:50:45 2013] [error] [client 127.0.0.1] (13)Permission denied: access to /favicon.ico denied
[Sun Jul 07 12:50:45 2013] [error] [client 127.0.0.1] (13)Permission denied: access to /favicon.ico denied
[Sun Jul 07 12:50:45 2013] [error] [client 127.0.0.1] (13)Permission denied: access to /favicon.ico denied
[Sun Jul 07 12:50:47 2013] [error] [client ::1] (13)Permission denied: access to / denied
[Sun Jul 07 12:50:47 2013] [error] [client ::1] (13)Permission denied: access to / denied
[Sun Jul 07 12:50:48 2013] [error] [client ::1] (13)Permission denied: access to /favicon.ico denied
[Sun Jul 07 12:50:48 2013] [error] [client ::1] (13)Permission denied: access to /favicon.ico denied

回答:


19

OSXサーバーでユーザーディレクトリを指すエイリアスが指定されています。私は長い間、_wwwユーザーをいじり、いじり、実行可能アクセス許可を再帰的に追加し、macportとこれを機能させるためのあらゆる種類のものをアンインストールしました。なぜ機能しなかったのか分かりません。

最終的には、そのフォルダーのFinderで「共有フォルダー」チェックボックスをオンにしただけで、指定したドメインで、PHPがアクティブで、希望どおりに機能しました。:/ ...それで簡単でした。


私にはうまくいきませんでした。/Sites(ルート/フォルダーに)フォルダーを作成し、そこにファイルを配置し、それに応じてエイリアスとディレクトリのオプションを構成しました。うまくいきました。
jpenna

11

macOSS Sierraバージョン10.12にアップデートします

私は同じ問題に直面しています。適切に修正するために2つのことをしました。以下は私のアプローチです。

1) " /private/etc/apache2/extra/httpd-userdir.conf "ファイルを確認してください。変化する

#Include /private/etc/apache2/users/*.conf

Include /private/etc/apache2/users/*.conf

2)**そして、「/ etc/apache2/httpd.conf」を編集します

変化する

Options FollowSymLinks Multiviews

Options FollowSymLinks Multiviews Indexes

最終的に、ドキュメントルートは次のようになります。

DocumentRoot "/Library/WebServer/Documents"
<Directory "/Library/WebServer/Documents">
Options FollowSymLinks Multiviews Indexes
MultiviewsMatch Any
AllowOverride All
Require all granted

3) Apacheを再起動します

sudo apachectl restart

それでも問題が発生する場合は、macOS Sierra 10.12でApacheをセットアップする方法をご確認ください。


9

通常、ローカル環境およびApacheを使用する唯一のユーザーが私であるマシンで、Apacheユーザーを自分に設定することでこれを修正します。で/private/etc/apache2/httpd.confUserからのユーザー名に設定します_www。例:

User _www

->

User joao

次に、Apacheを再起動します。

$ sudo apachectl restart

追加の手順:

  1. アクティブなセッションがある場合、まだ所有されているため、アクセス許可エラーが発生し_wwwます。それらを所有する:

    $ sudo chown joao: /var/tmp/sess_*
    

含意:

この後、Apache(およびPHPなど)はあなたとして実行され、読み取り/書き込み権限を持つすべてのファイルに対する読み取り/書き込み権限を取得します。しかし、これは単なるローカルの開発環境であるため、あなたのファイアウォールではApacheをブロックするはルールがない場合を除き、それは問題にはならない、ファイルエクスプローラ、シェル、Apacheの下で実行する脆弱性が含まれていてもよい、スクリプトなどの疑わしいファイルを聞かせします。その場合、カフェの公衆無線LANの隣人を含む誰でも、http://<your IP>これらのスクリプトで許可されていることなら何でも入力および実行できます。

実際、実行するスクリプトに関係なく、またはApacheユーザーを自分自身に設定しない場合でも、これを防ぐ必要があります。これは、おそらくランダムな部外者にのコンテンツを表示させたくないからですlocalhost

防止:

  1. Apacheがlocalhostのみをリッスンするようにします。ここでも、中httpd.conf

    Listen 80
    

    ->

    Listen 127.0.0.1:80
    

    そして、再びApacheを再起動します。

    $ sudo apachectl restart
    
  2. アプリケーションファイアウォールでApacheを無効にします(DenyApacheを初めて実行するときに尋ねられた場合、またはそれをクリックした場合、既に無効にしている可能性があります)。

    1. 開くSystem Preferences» Security & Privacy» Firewall
    2. 左下の鍵のアイコンをクリックして、必要に応じてパスワードを入力します。
    3. ファイアウォールが無効になっている場合はオンにします。
    4. をクリックしFirewall Optionsます。
    5. ボタンをクリックし+ます。
    6. ヒットcmd ⌘+ ⇧ shift+ Gと入力/usr/sbin/httpdしてクリックするAdd(場合httpdが表示されない、あなたは、ターミナルでそれを探すことができますwhich httpd
    7. リストでをクリックhttpdして選択しますBlock incoming connections
    8. ヒットOK
    9. ファイアウォールをリロードします。

      $ launchctl unload /System/Library/LaunchAgents/com.apple.alf.useragent.plist
      $ sudo launchctl unload /System/Library/LaunchDaemons/com.apple.alf.agent.plist
      $ launchctl load /System/Library/LaunchAgents/com.apple.alf.useragent.plist
      $ sudo launchctl load /System/Library/LaunchDaemons/com.apple.alf.agent.plist
      
  3. PHPをドキュメントルートに制限します。でphp.ini

    open_basedir = /Users/joao/Sites/:/var/tmp/
    

    /var/tmp/セッション用)

いずれかのソリューションが何らかの理由で無効になった場合に備えて、3つのソリューションすべてを使用して安全を確保してください。

-マシンのアクティブな言語は英語ではないため、言葉遣いは少し異なる場合があります(メニューオプションと言葉遣いは、さまざまなOS Xバージョンの言語に関係なく異なる場合があります)。

-で始まる行$は、コマンドライン(TerminalまたはiTermなど)に入力する必要があり、$削除されます。


5

DocumentRootディレクトリだけでなく、そのすべての親ディレクトリにもアクセス許可を設定することで、問題を解決しました。これがやった方法です。

(13)許可の拒否

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

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

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

2.4を実行している場合、AHエラーコードで詳細を確認できます。

  • AH00132:サーバーのアクセスを拒否するファイル許可
  • AH00035:パスのコンポーネントに検索許可がないため、アクセスが拒否されました。例

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 ..
# repeat up to the root

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

namei -m /usr/local/apache2/htdocs/foo/bar.htmlシステムにnameiがない場合は、parsepathを使用できます。ここから入手できます。

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

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

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

CGIスクリプト

CGIスクリプトの権限は正しく見えるかもしれませんが、shebangで指定された実際のバイナリには、実行するための適切な権限がない場合があります。(またはそのパス上のディレクトリ、上記で説明したようにnameiで確認してください。)

(13)許可が拒否されました:プロキシ:HTTP:127.0.0.1:8080(localhost)への接続に失敗しました

このエラーは、実際にはファイルの許可などに関するものではありません。それが実際に意味するのは、httpdがそのIPアドレスとポートに接続する許可を拒否されたことです。

これの最も一般的な原因は、SELinuxがhttpdにネットワーク接続を許可しないことです。

これを解決するには、SELinuxのブール値を変更する必要があります(再起動しても自動的に保持されます)。また、httpdを再起動してプロキシワーカーをリセットすることもできますが、これは厳密には必要ありません。

# setsebool -P httpd_can_network_connect 1


1
答えの基本的なポイントを要約していただけますか?ありがとう!
マット14

2
すべての親ディレクトリへのアクセスを許可すると、セキュリティが大幅に侵害されます。
ジュリアンF.ワイナート14

1
この答えは役に立ちません。回避策は、Linuxマシン/構成で機能します。OSXのディレクトリ構造は異なります。特にapache(/ Library / WebServerにあります)の場合、指定されたソリューションはapple.stackexchangeのようにOSx用ではありません。
フアン

3

Apache 2.4を実行するHigh Sierraで次の手順が機能しました

(次の優れたチュートリアルに基づいています:http : //www.cgi101.com/book/connect/mac.html、バージョンの違いのための追加の手順で更新されました)

  1. ファイルを次の場所に移動します。

    /Library/WebServer/CGI-Executables
    
  2. ファイルに実行許可があることを確認します。

    ls -l  /Library/WebServer/CGI-Executables
    

    使用しない場合:

    chmod -x  /Library/WebServer/CGI-Executables/myfile.cgi
    
  3. /etc/apache2/httpd.confの次の行のコメントを解除します

    AddHandler cgi-script .cgi .pl
    
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
    
    LoadModule cgi_module libexec/apache2/mod_cgi.so
    
  4. また、ディレクトリ「/ Library / WebServer / CGI-Executables」スタンザを次のように変更します。

    <Directory "/Library/WebServer/CGI-Executables">
     AllowOverride None
     Options ExecCGI
     Require all granted
    </Directory>
    
  5. 次に、Apacheを再起動します。

    sudo apachectl -k restart
    

ほとんどすべての新しいmacOSバージョンでは、変更が失われ、作業をやり直す必要があり、修正するために別の手順を実行する必要さえあります。あなたの親友は/ var / log / apache2 /(/ var / log / apache2 / error_log)にあるApacheログです


1
答えではなく、観察。上記の#1命令:ファイルを次の場所に移動します:どのファイルですか?
パム

0

Mac OS XでApacheのファイルとディレクトリのアクセス許可を設定する方法」の手順に従って、ACLを使用してアクセス許可を設定していましたが、まだ取得されていました。

[Wed Feb 12 15:43:51 2014] [error] [client ::1] (13)Permission denied: access to /trace/trace.php denied (filesystem path '/Library/WebServer/Documents/trace/trace.php') because search permissions are missing on a component of the path

次に、「(13)Permission Denied」(JoãoRamosの回答にリンクされています)を読み、ACLに「execute」を追加しようとしました。うまくいきました。


0

コンピュータを再起動してください!これは私のために働いた。

しかし、まず、ローカル/テスト環境であるため、Apacheのユーザーを(_wwwから)自分に変更しました。したがって、最終的には許可に関係しています。

次に、Windowsと同様にマシンを再起動します;)。


0

OPは、Apache、PHP、MySQLを使用し、カスタムDocumentRootを使用してMacでローカルWebサーバー環境をセットアップしようとしたときに発生する問題を説明し、VirtualHost(vhost)の使用についても言及します。OPは、localhostにアクセスする際に403 Forbiddenエラーを受け取ると報告します。

theplanetのcoolestguideの記事では、Apacheで仮想ホストを設定すると「ローカルホストが失われる」ことが説明されています。言い換えれば、OPの問題の根本的な原因は、vhostの有効化が不完全である可能性があることです。

「(仮想ホストが)一度設定されると、以前は/ Library / WebServer / Documentsで以前のドキュメントルートを失うか、http:// localhostのブラウザでアクセスします。403Forbidden Errorが発生します。」

この記事では、vhost環境でlocalhostを修正する方法について説明します。

Add these lines to file /etc/apache2/extra/httpd-vhosts.conf:

   <VirtualHost *:80> 
   ServerName localhost 
   DocumentRoot /Library/WebServer/Documents/ 
   </VirtualHost>

また、「vhostsにUsers / username / Sitesフォルダーを使用する」ことに関連する「更新や認証などに関する許可の問題」を修正する方法についても説明します。

Instead of using the default UID _www, use your own User and Group.

In the terminal, enter command 

    id

Find your UID and GID. 
Update file httpd.conf
In section <IfModule unixd_module>
Change User and Group to your local UID and GID.

https://coolestguidesontheplanet.com/set-virtual-hosts-apache-mac-osx-10-10-yosemite/


ご回答ありがとうございます。:)残念ながら、このような短い回答では、多くのユーザーを支援するのに十分な詳細やコンテキストが実際には提供されません。代わりに、リンク先のコンテンツの概要を含めるように回答を編集してください。これにより、回答がより自己完結型になり、将来的に他のユーザーのために回答が保存されます。
モノミース

ありがとう、Monomeeth。フィードバックに感謝します。答えを更新しました。
BobK77
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.