在Catalina MacOS 10.15下,Apache下的PHP通过文件链接限制了对某些文件的访问,可能是由于隐私更



>PROBLEM

升级到MacOS 10.15后,Catalina PHP在读取某些链接时遇到问题,而不是其他链接,运行PHP(作为Apache的用户"www"(。问题似乎是对操作系统隐私/安全配置的更改,我们知道这些配置已更改,而不是目录执行权限/FollowSymLink 权限。

$ ls -alt /Users/[MYUSER]/Sites/*info.php
lrwxr-xr-x  1 [MYUSER]  staff   8 Oct 10 11:16 /Users/[MYUSER]/Sites/linfo.php -> info.php
-rwxr-xr-x  1 [MYUSER]  staff  25 Oct 30  2014 /Users/[MYUSER]/Sites/info.php

在上面的两个页面中,info.php 和 linfo.php 功能正确,我认为这表明 FollowSymLinks 正在工作。

$ ls -alt /Users/[MYUSER]/Sites/*index.php
lrwxr-xr-x  1 [MYUSER]  staff  78 Dec 30  2014 /Users/[MYUSER]/Sites/index.php -> /Users/[MYUSER]/Documents/[ADIR]/Development/GitHub/cms/sitesIndex.php
$ ls -alt /Users/[MYUSER]/Sites/sitesIndex.php
-rwxr-xr-x  1 [MYUSER]  staff  20847 Oct  8 13:11 sitesIndex.php

在上述页面索引.php中,链接失败,而链接文件sitesIndex的副本.php成功。

背景

虽然我不认为它是相关的(因为无法遵循符号链接有不同的错误消息(,但问题是关注符号链接设置。

<Directory "/Users/*/Sites/">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Require all granted
</Directory>
$ cat $HOME/Sites/.htaccess
Options +FollowSymLinks

Web 服务器以用户"www"身份运行。

Apache 以根用户身份启动,尽管工作线程按预期_www运行。

_www             65500   0.0  0.0  4317396   1288   ??  S     9:56AM   0:00.02 /usr/sbin/httpd -D FOREGROUND
_www             28574   0.0  0.0  4317440   2256   ??  S    12:16PM   0:00.03 /usr/sbin/httpd -D FOREGROUND
_www             28546   0.0  0.0  4317520   2612   ??  S    12:15PM   0:00.06 /usr/sbin/httpd -D FOREGROUND
root             28529   0.0  0.0  4317548   1284   ??  Ss   12:15PM   0:04.56 /usr/sbin/httpd -D FOREGROUND

$HOME/站点中的所有这些文件都在iCloud下,我们在发行说明中被告知,10.15中针对iCloud目录引入了新的其他隐私限制,但我不清楚这些限制是什么,或者是否记录了这些限制。

错误

在服务器响应页面中,PHP 产生以下错误:

Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0
Fatal error: Unknown: Failed opening required '/Users/owenbrunette/Sites/index.php' (include_path='.:') in Unknown on line 0

在错误中.log:

[Tue Oct 08 21:49:11.855033 2019] [php7:warn] [pid 83605] [client ::1:64968] PHP Warning:  Unknown: failed to open stream: Operation not permitted in Unknown on line 0, referer: http://localhost/
[Tue Oct 08 21:49:11.855078 2019] [php7:error] [pid 83605] [client ::1:64968] PHP Fatal error:  Unknown: Failed opening required '/Users/[MYUSER]/Sites/index.php' (include_path='.:') in Unknown on line 0, referer: http://localhost/

我做了很多文件检查。为通向文件的所有目录设置了其他的 UNIX 读取和执行标志。

尝试解决方案

"不允许操作"的错误是MacOS下与系统集成保护相关的错误字符串,而不是Apache SymLink后面的错误字符串,尽管pharese"不允许操作"可能不是唯一的。错误来自PHP而不是Apache。

我已允许在以下位置进行完全磁盘访问: 系统偏好设置/安全和隐私/隐私/完全磁盘访问。

我还没有尝试在操作系统级别完全禁用SIP(系统完整性保护(,因为这远非理想的解决方案。

Catalina具有更严格的权限。解决方法很简单:为 http 启用完全磁盘访问。为此:

系统偏好设置 => 安全和隐私 => 完全磁盘访问

导航到磁盘的根文件夹,然后按 Cmd+Shift+。(查看根目录下的所有文件夹(,然后转到

/usr/sbin/

选择"httpd"并重新启动它(Apacectl -k restart(。

这应该可以解决问题。

最新更新