如何在Mac OS X内置的Apache中修复403?


25

我正在尝试在新的MacBook Air 13”上设置本地环境:内置的Apache,带有我自己的DocumentRootPHP和MySQL。通常,我/etc/hosts只是为了以一个固定的链接运行本地网站而进行更新:local/example。作为参考,我通常校验:

这一次,我只是得到一个403禁止每次我打的时间错误127.0.0.1localhostlocal。首先,我在终端上看到Apache和PHP都在运行(即使我无法查看PHP页面)。然后我根据Apache权限更新了所有权限 ; 现在我只是绝望了。以下是相关的Apache配置:

  • /etc/hosts查看文件 -添加了一行)
  • /etc/apache2/httpd.conf查看文件 -更新了DocumentRoot
  • /etc/apache2/users/joao.conf查看文件 -创建此文件)
  • /etc/apache2/extra/httpd-vhosts.conf查看文件 -已更新VirtualHost

看来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

Answers:


19

我在OSX服务器中指定了一个指向用户目录的别名。我花了很长时间与_www用户混在一起,弄乱了它,递归地添加了可执行权限,卸载了macports和各种各样的东西,试图使它起作用。不知道为什么它不起作用。

最终,我只是在Finder中选中了该文件夹的“共享文件夹”复选框,它在指定的域上以我希望的方式在php有效的情况下工作。:/ ...所以很容易。


它对我不起作用。我创建了一个文件夹/Sites(在我的根/文件夹中),并将文件放在此处,并相应地配置Alias和Directory选项。很好
jpenna

11

我更新到macOSS Sierra版本10.12

我遇到了同样的问题,我做了两件事来正确修复它。以下是我的方法。

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 让可疑文件(例如文件浏览器,shell,可能包含漏洞的脚本)在Apache下运行,否则这不是问题。在这种情况下,包括您咖啡馆的公共wifi邻居在内的任何人都可以进入http://<your IP>并执行这些脚本允许他们执行的任何操作。

实际上,无论您运行的脚本是什么,即使您没有为自己设置Apache用户,也应避免这样做,因为您可能不希望随机的局外人能够看到您的内容localhost

预防:

  1. 使Apache仅侦听localhost。同样,在httpd.conf

    Listen 80
    

    ->

    Listen 127.0.0.1:80
    

    然后重新启动Apache:

    $ sudo apachectl restart
    
  2. 在应用程序防火墙中禁用Apache(请注意,如果您Deny在第一次运行Apache时单击了是否被询问,可能已经禁用了它):

    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/用于会议)

使用这三种解决方案可以保护自己,以防其中一种由于某种原因被禁用。

-请注意,由于我的机器上的母语不是英语,所以措辞可能会有所不同(菜单选项和措辞可能会有所不同,而与各种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
您能否总结一下答案中的基本要点?谢谢!
马特

2
授予访问其所有父目录的权限将构成巨大的安全侵害!
朱利安·F·韦纳特

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说明:将文件移动到:什么文件?
帕姆(Pam)

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描述了尝试在Mac上使用Apache,PHP和MySQL通过自定义DocumentRoot设置本地Web服务器环境时出现的问题,并提及使用VirtualHost(vhost)。OP报告访问本地主机时收到403 Forbidden错误。

飞机上最酷的向导上的一篇文章介绍了如何在Apache中设置虚拟主机导致“本地主机丢失”。换句话说,OP问题的根本原因可能是未完全启用虚拟主机。

“一旦设置了[虚拟主机],您先前在/ Library / WebServer / Documents上丢失了较旧的文档根目录,或者在浏览器中通过http:// localhost进行了访问 -您将收到403 Forbidden Error。

本文继续说明如何在虚拟主机环境中修复本地主机。

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

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

它还说明了如何解决与“将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

谢谢,Monomeeth。赞赏反馈。更新了答案。
BobK77
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.