webroot在:
/var/www/vhosts/my-domain-name/httpdocs
还有一个路径叫做:
/var/www/vhosts/my-domain-name/private/
从我理解的任何文件放置在webroot,有被送达公众的危险,如果它的web-path / filename请求.我隐约知道使用.htaccess文件来告诉Apache不提供某些文件/目录.
但是(或应该)我将敏感文件放在webroot之外的某个地方,还允许PHP脚本读取?
谢谢!
Warning: file() [function.file]: open_basedir restriction in effect. File(../../private/test.txt) is not within the allowed path(s): (/var/www/vhosts/blah.com/httpdocs:/tmp) in /var/www/vhosts/blah.com/httpdocs/misc/testscript.PHP on line 8 Warning: file(../../private/test-dt.txt) [function.file]: Failed to open stream: Operation not permitted in /var/www/vhosts/blah.com/httpdocs/misc/testscript.PHP on line 8
更新:解决
Picto在reddit / r / PHPHelp给了我所需要的,它是特定于Plesk系统的.
我必须写一个名为vhost.conf的文件放在与httpdocs位于同一级别的conf文件夹中.在vhost.conf中,我使用:
<Directory /var/www/vhosts/my-domain-name/httpdocs> PHP_admin_value open_basedir /var/www/vhosts/my-domain-name/httpdocs:/tmp:/var/www/vhosts/my-domain-name/myfolder </Directory>
所以我现在把我的敏感文件放在“myfolder”里面,这个文件位于webroot(httpdocs)之外.
之后,要使这些设置生效,(重新启动Apache不起作用)有一些Plesk具体的命令给出,见:http://www.gadberry.com/aaron/2006/02/09/plesk_vhost/
寻找
PHP_value open_basedir
open_basedir的更多信息
注意:open_basedir存在一些安全问题,解释如下
http://www.hardened-php.net/advisory_012004.42.html
编辑:
我为每个域使用这个树结构:
domain/ www-data permisions ├── etc r-x ├── log rwx ├── PHPCache rwx ├── PHPFiler rwx ├── PHPInclude r-x ├── PHPLogs rwx ├── PHPSession rwx ├── PHPTmp rwx ├── PHPTrash rwx ├── privat --- ├── www443 r-x └── www80 r-x
etc:用于应用程序配置文件.
PHPFiler:对于应用程序的文件,如果用户具有权限,则PHP脚本将提供它.
PHPInclude:PHP_value include_path
PHPLogs:用于应用程序日志
PHPSessions:用于存储这个虚拟主机数据会话.
私有化:对我的私人倾诉
www443:用于https文件根
www80:用于http文档根
在open_basedir clausule我把所有的文件夹,除了log和privat.