2017-01-11 2 views
0

Я запускаю Apache 2.4 и PHP 7 на CentOS 7. Я запускаю веб-сервер файлов. Структура каталогов выглядит так:Как получить доступ ко второму диску от PHP?

/var/www/example.com/public_html # Document Root 
/var/www/file-transfer-center/ # Location of files for file server 

Все работает отлично, но раздел, в котором находятся эти файлы, заполняется. Существует еще один раздел на машине:

lsblk 
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT 
sda    8:0 0 953.8G 0 disk 
├─sda1   8:1 0 500M 0 part /boot 
└─sda2   8:2 0 953.3G 0 part 
    ├─centos-root 253:0 0 50G 0 lvm/
    ├─centos-swap 253:1 0  4G 0 lvm [SWAP] 
    └─centos-home 253:2 0 899.2G 0 lvm /home 
sdb    8:16 0 500G 0 disk 
└─sdb1   8:17 0 500G 0 part 
sdc    8:32 0 1000G 0 disk 
└─sdc1   8:33 0 1000G 0 part 
sr0    11:0 1 1024M 0 rom 

И если я бегу df -aTh | grep centos:

/dev/mapper/centos-root xfs   50G 17G 34G 34%/
/dev/mapper/centos-home xfs   899G 34G 866G 4% /home 

Так это выглядит для меня, как я могу просто переместить мой file-transfer-center каталог в /home и я буду весь набор ,

Я скопировал файлы и изменил конфигурацию пути моего программного обеспечения передачи файлов на /home/file-transfer-center, но когда я пытаюсь получить доступ к файлам, php-fpm дает мне ошибку:

PHP Fatal error: Uncaught LogicException: The root path /home/file-transfer-center is not readable.

Я проверил разрешение и file-transfer-center и все, если содержимое принадлежит apache и в группе wheel с правами 775 и 664 на каталоги и файлы, соответственно.

Я написал простой тест:

var_dump(fopen('/home/file-transfer-center/fa498800-4102-46be-a7a6-3384f242a949', 'r')); 

И это приводит к false. Если я заменю путь в этом тесте на исходный путь file-transfer-center, это приведет к resource(5) of type (stream).

Я проверил open_basedir, он не установлен. То же самое с user_dir. Я не могу найти ничего, что могло бы указывать на то, что каталог будет не соответствовать PHP.

Что мне здесь не хватает? Правильно ли в моем анализе, что /home работает на отдельном логическом разделе того же физического диска? Это связано с этим?

Как я могу прямо сказать PHP, что для доступа к /home/file-transfer-center?

EDIT: Мой веб-сервер работает как пользователь apache и каталог /home/file-transfer-center принадлежит apache:

drwxrwxr-x. 2 apache wheel 60K Jan 11 17:12 file-transfer-center 
+0

Можете ли вы 'su' пользователь apache и' cat' файл, который вы пытались открыть в php? Можете ли вы разместить точные разрешения '/ home/file-transfer-center' (самого каталога)? – ccKep

+0

Apache запускается пользователем, а не вашим логином. Это либо «www», либо «www-data» или что-то похожее. Просто дайте этому пользователю или группе доступ к этому каталогу, и все готово. – Xorifelse

+0

Работа PHP не связана с тем, где и как хранятся данные, управление разделами и дисками - это работа файловой системы. Пока диск монтируется там, где он должен и доступен с правильными разрешениями, PHP должен иметь возможность использовать его без проблем. – Havenard

ответ

1

Я считаю, что ваш * Никс файловая система не волнует, сколько реальных жестких дисков вы иметь. Все файлы объединены в единую файловую систему.

Вы не можете просто перемещать файлы или каталог каталога файлов в каталог/home. Этот каталог, по крайней мере, в моей системе, принадлежит корню:

$ ls -dal /home 
drwxr-xr-x 4 root root 4096 Apr 28 2016 /home 

Вы должны были бы привилегии SUDO для того, чтобы переместить любой файл или каталог в домашний каталог /.

Если вы только что переместили каталог file-transfer-center из/var/www/file-transfer-center в/home/file-transfer-center, я бы предположил, что этот каталог все еще имеет те же права. Однако, если вы создали новый каталог с именем/home/file-transfer-center и скопировали содержимое и подкаталоги в него, тогда он может принадлежать root: root. Я предлагаю вам проверить права доступа на/дома/передачи файлов центра с помощью этой команды:

ls -dal /home/file-transfer-center 

И посмотреть, если апач имеет к нему доступ.

Вы также должны убедиться, что вы назначаете правильные разрешения для своего веб-сервера. Чтобы узнать, какой сервер веб-сервер, доступ к этой PHP скрипт через ваш веб-сервер:

<? 
passthru("whoami"); 

он должен выводить имя пользователя вашего веб-сервера. Этот пользователь должен иметь доступ на чтение и/или запись в каталог/home/file-transfer-center.

EDIT: Более подробно рассмотрев OP, я вижу, что в конце разрешения файла есть небольшой период (.), Что, по-видимому, означает ограничение SELinux. SELinux может restrict apache access to home directories. Рассмотрим перемещение каталога центра передачи файлов обратно в/var/www/file-transfer-center - вместо этого вы можете установить второй диск там?

+0

Даже если разрешения 777 PHP не могут читать из '/ home' –

+0

, вы попробовали PHP-скрипт, чтобы выплевывать свое имя пользователя apache? –

+0

Только что заметил "." в ваших разрешениях файлов - это, по-видимому, означает расширенную информацию о правах доступа к файлам, такую ​​как ACL. Немного искал. Некоторые предложения вроде этого: https://www.centos.org/forums/viewtopic.php?t=1315 –