Подтвердить что ты не робот

PHP: разрешение отклонено, несмотря на соответствующие разрешения

Я пытаюсь прочитать файл на PHP, и я получаю отказ от разрешенного разрешения, хотя у всех есть доступ на чтение к файлу.

Код PHP:

$config=file_get_contents('/opt/jenkins/home/config.xml');

Ошибка:

Warning: file_get_contents(/opt/jenkins/home/config.xml): failed to open stream: Permission denied in [...]

Разрешение файловой системы:

Существует символическая ссылка, указывающая /opt/jenkins/home/ на /var/lib/jenkins, и у всех есть разрешение на чтение в символической ссылке, фактической папке и файле.

$ ls -lh /opt/jenkins/
lrwxrwxrwx 1 sysadmin sysadmin   16 2011-08-04 08:12 home -> /var/lib/jenkins

$ ls -lh /var/lib/ | grep jenkins
drwxr-xr-- 6 jenkins adm     4.0K 2011-08-04 10:04 jenkins

$ ls -lh /var/lib/jenkins/config.xml
-rwxr-xr-- 1 jenkins adm 3.9K 2011-08-04 10:05 /var/lib/jenkins/config.xml

Конфигурация Apache

Настроить символические ссылки folllow (Options All). Добавление директивы Directory для /var/lib/jenkins/ не имеет значения.

<Directory /opt/jenkins/home/>
        Options All
        AllowOverride All
        Order Allow,Deny
        Allow from All
</Directory>

Дополнительная информация

Я использую путь через символическую ссылку ("/opt/jenkins/home/config.xml") или реальный путь ("/var/lib/jenkins/config.xml"). У меня такая же проблема.

apache2 version=2.2.14-5ubuntu8.4
php version=5.3.2-1ubuntu4.9

Любая идея о том, почему я получаю ошибку?

4b9b3361

Ответ 1

Для этого в вашем каталоге требуется разрешение execute. Кажется, что мир не выполняется, и поскольку jenkins, вероятно, не является пользователем apache, а пользователь apache не находится в группе adm, он не работает:

$ ls -lh /var/lib/ | grep jenkins
drwxr-xr-- 6 jenkins adm     4.0K 2011-08-04 10:04 jenkins

В качестве примера:

[email protected]:~$ mkdir foo
[email protected]:~$ echo hello > foo/bar
[email protected]:~$ chmod 777 foo/bar
[email protected]:~$ ls -lsah foo/bar 
4.0K -rwxrwxrwx 1 netcoder netcoder 6 2011-08-04 08:22 foo/bar
[email protected]:~$ chmod 444 foo/
[email protected]:~$ ls -lsah | grep foo
4.0K dr--r--r--  2 netcoder netcoder 4.0K 2011-08-04 08:22 foo
[email protected]:~$ cat foo/bar 
cat: foo/bar: Permission denied

Даже если foo/bar имеет разрешение 0777, если каталог не имеет разрешения на выполнение, его содержимое не указано.

Вам потребуется разрешение для установки как для целевого каталога, так и для символической ссылки.

Ответ 2

Вам нужен бит выполнения, установленный для всех каталогов в иерархии до этого файла.

chmod o+x /var/lib/jenkins

должен сделать трюк.

(Примечание: ls -lhd /var/lib/jenkins немного лучше, чем ls -lh ...|grep jenkins)

Ответ 3

Скорее всего, ваш пользователь Apache не может читать или получать доступ к веб файлам

  • Проверьте, что пользователь работает с apache:

    $ ps aux | grep [a]pache
    root     40283  0.0  0.2 472548 21116 ?        Ss   14:38   0:00 /usr/sbin/apache2 -k start
    www-data 40287  0.0  0.1 472760  8800 ?        S    14:38   0:00 /usr/sbin/apache2 -k start
    www-data 40288  0.0  0.1 472760  8540 ?        S    14:38   0:00 /usr/sbin/apache2 -k start
    www-data 40289  0.0  0.1 472776  8540 ?        S    14:38   0:00 /usr/sbin/apache2 -k start
    
  • Проверьте права собственности на свои веб файлы:

    $ namei -mol /home/john/app2/
    f: /home/john/app2/
    drwxr-xr-x root root  /
    drwxr-xr-x root root  home
    drwx------ john john  john         # <== Ahaa, no access for apache user!
    drwxr-xr-x john john  john app2
    
  • Отрегулируйте разрешения соответственно:

Хорошо, на этом этапе я оставлю это для вас, вы можете либо (a) сделать apache user 'john' в этом примере. Или вы можете (b) переместить веб-папку в место вне дома. Если доступ к выполнению может быть предоставлен группе или даже другим, не нарушая безопасных методов безопасности.

а. Сделайте apache user john (ТОЛЬКО ДЛЯ САЙТОВ DEV или если вы знаете, что делаете)

sudo vi /etc/apache2/envars 
# replace 
export APACHE_RUN_USER=www-data 
export APACHE_RUN_GROUP=www-data
# with
export APACHE_RUN_USER=john 
export APACHE_RUN_GROUP=john

б. Переместите эту папку из дома... что она там делает?

sudo mv /home/john/app2 /var/www/

Не забудьте изменить сайт для соответствия этому каталогу и перезапустить сервер Apache.

Вот несколько ссылок:

https://wiki.apache.org/httpd/13PermissionDenied

http://wiki.apache.org/httpd/FileSystemPermissions