2017-01-11 11 views
0

CentOS 7でApache 2.4とPHP 7を実行しています。私はWebベースのファイルサーバーを実行しています。ディレクトリ構造は次のようになります。PHPから2番目のディスクドライブにアクセスするにはどうすればよいですか?

/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 

私はちょうど/homeに私のfile-transfer-centerディレクトリを移動することができますし、私はすべてのセットになるだろうようなので、それは私には見えます。

私は、ファイルをコピーして/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が実行されているのを修正しましたか?それには関係がありますか?

どのように私は明示的にそれが/home/file-transfer-centerにアクセスするためにクールだとPHPを伝えることができますか?

EDIT:私のウェブサーバは、ユーザapacheとして実行されていると/home/file-transfer-centerディレクトリはapacheによって所有されて

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

あなたは 'Apacheのユーザーをsu'と'あなたがPHPで開くしようとしたファイルをcat'することはできますか? '/ home/file-transfer-center'(ディレクトリ自体)の正確なパーミッションを投稿できますか? – ccKep

+0

Apacheは、ログインユーザーではなくユーザーによって実行されます。それは 'www'か' www-data'かsimularなものです。そのユーザーまたはグループにそのディレクトリへのアクセスを許可するだけで完了です。 – Xorifelse

+0

データがどこにどのように格納されているかを気にするのはPHPの仕事ではなく、パーティションやディスクの管理はファイルシステムの仕事です。ディスクが適切なパーミッションでマウントされアクセス可能な場所にマウントされている限り、PHPは問題なく使用できるはずです。 – Havenard

答えて

1

は、私はあなたの* nixのファイルシステムがどのように多くの実際のハードドライブを気にしないと信じています持ってる。すべてのファイルは単一のファイルシステムとして統合されています。

ファイルまたはファイル転送センターのディレクトリを/ homeディレクトリに移動するだけでは不十分です。このディレクトリには、少なくとも私のシステムでは、ルートによって所有されています

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

あなたは/ homeディレクトリに任意のファイルやディレクトリを移動するためにsudo権限が必要になります。

ファイル転送センターを/ var/www/file-transfer-centerから/ home/file-transfer-centerに移動した場合、このディレクトリにはまだ同じアクセス許可があると思います。ただし、/ home/file-transfer-centerという名前の新しいディレクトリを作成し、内容とサブディレクトリをそのディレクトリにコピーした場合は、root:rootが所有している可能性があります。このコマンドで/ home/file-transfer centerのアクセス権をチェックすることをお勧めします:

ls -dal /home/file-transfer-center 

そして、Apacheがアクセス権を持っているかどうかを確認してください。

また、あなたは、Webサーバのための適切な権限を割り当てていることを確認してください。 Webサーバがあるサーバーを調べるには、あなたのウェブサーバを経由して、このPHPスクリプトにアクセスします。それは、出力Webサーバのユーザ名の名前をすべき

<? 
passthru("whoami"); 

。そのユーザーには、/ home/file-transfer-centerディレクトリへの読み取りアクセス権と書き込みアクセス権が必要です。

EDIT: OPで詳しく見ると、ファイルのパーミッションの最後に少しのピリオド(。)があります。これは明らかにSELinuxの制限を示しています。 SELinuxはrestrict apache access to home directoriesです。ファイル転送センターのディレクトリを/ var/www/file-transfer-centerに戻すことを検討してください。代わりに2番目のドライブをマウントできますか?

+0

権限が777であっても、PHPが '/ home'から読み取ることができない –

+0

Apacheのユーザ名を吐くPHPスクリプトを試しましたか? –

+0

ちょうど "。"あなたのファイルのアクセス許可 - これは明らかにACLのような拡張ファイル許可情報を示します。少し調べてみた。このようないくつかの提案は:https://www.centos.org/forums/viewtopic.php?t=1315 –

関連する問題