Под Catalina MacOS 10.15 PHP под Apache ограничил доступ к некоторым файлам через ссылки на файлы, возможно, из-за изменений конфиденциальности - PullRequest
1 голос
/ 10 октября 2019

ПРОБЛЕМА

После обновления до 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

На вышеуказанных страницах index.php происходит сбой ссылки, когда происходит сбой при копировании связанного файла sitesIndex.php.

ОБЩАЯ ИНФОРМАЦИЯ

Хотя я не верю, что это связано (поскольку невозможность followSymLinks имеет другое сообщение об ошибке), фоллинг - это настройка FollowSymLinks.

<Directory "/Users/*/Sites/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

$ cat $HOME/Sites/.htaccess
Options +FollowSymLinks

Веб-сервер работает от имени пользователя «www».

Apache запускается от имени пользователя root, хотя рабочие потоки работают как _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 / Sites находятся под iCloud, и в заметках о выпуске нам сообщают, что в 10.15 для iCl введены новые дополнительные ограничения конфиденциальностиКаталоги oud, но мне неясно, что это за ограничения или задокументированы ли эти ограничения.

ОШИБКИ

На странице ответа сервера 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

И в файле error.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 для других устанавливаются для всех каталогов, ведущих к файлам.

ПОПЫТКИ ПРИ РЕШЕНИИ

Ошибка «операция не разрешена» - это строка ошибки, связанная с системойIntegrety Protection "под MacOS, а не после Apache SymLink, хотя фазовая" операция не разрешена ", вполне может быть не уникальной. Ошибка исходит от PHP, а не от Apache.

Я разрешил полный доступ к диску в: Системные настройки / Безопасность и конфиденциальность / Конфиденциальность / Полный доступ к диску.

Я не пытался полностью отключить SIP (защиту целостности системы) на уровне операционной системы, поскольку это далеко от идеального решения.

1 Ответ

3 голосов
/ 19 октября 2019

Каталина имеет более ограничительные разрешения. Исправить несложно: включить полный доступ к диску для http. Для этого:

Системные настройки => Безопасность и конфиденциальность => Полный доступ к диску

Перейдите в корневую папку диска и нажмите Cmd + Shift +. (для просмотра всех папок в корневом каталоге) и затем перейдите в

/ usr / sbin /

, выберите «httpd» и перезапустите его (apachectl -k restart).

Это должно сработать.

...