Это сайт Drupal, где файл / module.inc запускает цикл над файлами в реестре и пытается require_once()
, Для ряда файлов это не удается, даже если права доступа к файлу верны и файл должен быть читабельным
Я добавил отладочный код в цикл для вывода, чтобы проверить перманент и содержимое файла:
// Debug code
print "$file perms:" . substr(sprintf('%o', fileperms($file)), -4) . "<br>";
print "$file contents:<br>" . htmlspecialchars(file_get_contents($file)) . "<hr>";
// Original Code
require_once $file;
Он выводит права доступа к файлу, а также содержимое файла, прежде чем пытаться выполнить require_once. Разные страницы не работают в разных файлах, например, выводит домашняя страница:
./sites/default/modules/cck/includes/content.token.inc perms:0755
./sites/default/modules/cck/includes/content.token.inc contents:
[filecontent]
./sites/default/modules/filefield/filefield.token.inc perms:0644
./sites/default/modules/filefield/filefield.token.inc contents:
[filecontent]
./sites/default/modules/getid3/getid3.install perms:0644
./sites/default/modules/getid3/getid3.install contents:
[NO FILE CONTENT]
Так по какой-то причине ./sites/default/modules/getid3/getid3.install
якобы имеет разрешение на чтение, но это не так.
Различные пути показывают разные файлы как проблемные:
/
./sites/default/modules/getid3/getid3.install perms:0644
/admin
./sites/default/modules/webform/components/date.inc perms:0644
/user
./sites/default/modules/cck/includes/content.crud.inc perms:0755
РЕДАКТИРОВАТЬ:
Обратите внимание, что выше ./sites/default/modules/cck/includes/content.token.inc
читабельно, но ./sites/default/modules/cck/includes/content.crud.inc
дает ошибку, вот список каталогов для этих файлов (в том числе --context
проверить на SELinux)
# ll --context
total 168
drwxr-xr-x 4 root root ? 4096 Sep 28 05:50 ./
drwxr-xr-x 8 root root ? 4096 Nov 6 2013 ../
-rwxr-xr-x 1 root root ? 72264 Nov 6 2013 content.admin.inc*
-rwxr-xr-x 1 root root ? 26307 Sep 28 03:13 content.crud.inc*
-rwxr-xr-x 1 root root ? 7181 Nov 6 2013 content.devel.inc*
-rwxr-xr-x 1 root root ? 3868 Nov 6 2013 content.diff.inc*
-rwxr-xr-x 1 root root ? 15914 Nov 6 2013 content.node_form.inc*
-rwxr-xr-x 1 root root ? 12550 Nov 6 2013 content.rules.inc*
-rwxr-xr-x 1 root root ? 6246 Nov 6 2013 content.token.inc*
drwxr-xr-x 3 root root ? 4096 Nov 6 2013 panels/
drwxr-xr-x 3 root root ? 4096 Nov 6 2013 views/
Дата изменения crud
Я комментирую код для тестирования после возникновения ошибок, но он вернулся к тому, что было сейчас.
РЕДАКТИРОВАТЬ 2:
Кажется, что пытаясь получить доступ robots.txt
прямо также запрещено. Не уверен, что это та же проблема, но, опять же, файл выглядит так, что он должен быть идеально читаемым.
# ll robots.txt
-rw-r--r-- 1 6226 6226 1521 Aug 6 18:07 robots.txt
РЕДАКТИРОВАТЬ 3:
Похоже, проблема была в AppArmor, который, как я полагаю, похож на SELinux. Изменение от aa-enforce
в aa-complain
решил проблему.
Возможно, какой-нибудь selinux cmd может запустить это:
semanage fcontext -a -t httpd_httpd_sys_content_t '/var/lib/myapp(/.*)?'
restorecon -R -v /var/lib/myapp
Где / var / lib / myapp — это ваш каталог ./
Похоже, проблема была в AppArmor, который, как я полагаю, похож на SELinux. Изменение от aa-enforce
в aa-complain
решил проблему.