我正在努力帮助朋友将网站从一个网站迁移到另一个网站。 旧的地方已经关闭,我只有一个平坦的tar文件,里面有它。
该网站包含HTML文档,可以下载一个小型Java应用程序(将在手机上加载)以将数据发送到网站。
移动Java应用程序向URL=<HOST>/php/register.php
发送了一个字符串。这个php脚本包含另一个php脚本(../inc/db_login.php
),它使用$link=mysql_connect()
连接到SQL DB。另一个文件register.php
执行了SQL插入,用于将新发送的数据放入数据库中。
我的问题是基本的,我应该在新网站上放置这2个PHP文件以及目录和文件应该具有哪些权限?
旧的Web服务器显然有/php
和/inc
个目录。这些都不存在于新的Web服务器上。我应该创建它们吗?他们应该获得什么许可?我想在单独的PHP文件中使用密码的原因是安全性。 /php
和/inc
目录可能具有不同的权限。
新服务器有目录:
/httpdos
/httpsdos
/cgi-bin
/conf
(以及其他一些可能不相关的内容)我的问题
文件扩展名(.php
)是否对服务器有意义:因为PHP脚本被“包含”在HTML代码中(<?...?>
之间),服务器是否需要查看文件后缀还是无关紧要?(我知道服务器对<?...?>
做出反应,当然)
应该将公共文件(在我的情况下为register.php
)放在httpdocs/
目录中,还是服务器(我认为是apache)对某些事情做出反应并将其提取到另一个目录中?< / p>
PHP脚本是否应具有权限R-X
(读取和执行),--X
(执行)或R--
(读取)?从操作系统的角度来看,我猜apache只是读取这些文件,这意味着它们应该是R--
,但这意味着如果PHP服务被“停止”,客户端将在其浏览器中获取所有PHP代码(?) 。我希望它是--X
,但由于这既不是二进制也不是#!
,我想它必须是--R
?
如果公共PHP脚本可以放在另一个目录中(例如/php
而不是/httpdocs
)/php
(和脚本)应该获得哪些权限?我想服务器必须知道这个/php
目录(或者通常有默认值吗?)
包含的PHP脚本(../inc/db_login.php
,包含SQL密码)不应该在/httpdocs
以下。这意味着我的register.php
包含的文件不在/httpdocs
子树下。这有用吗?服务器需要知道吗?
据我所知,您可能需要了解服务器配置。只需假设答案中的默认值(如果有的话,你可以知道它的变化)。
答案 0 :(得分:51)
目录必须具有可执行的执行权限。通常这是0755
。通过mod_php
运行的PHP脚本不会被执行,而是被读取; 0644
就足够了。必须写入的目录需要由Web服务器运行的用户拥有。可能存在关于权限的其他问题,例如SELinux,但上面的内容将帮助您了解基础知识。
其他用户或外部客户端不得访问的文档应为0600
,由Web服务器用户拥有,位于DocumentRoot之外。请注意,在安全模式下运行mod_php将阻止脚本包含DocumentRoot之外的任何内容;一个可悲的缺陷。
答案 1 :(得分:12)
对于 最高安全性 ,您应该设置最低权限 是 640 。
绝不允许所有人阅读php脚本。
有用的命令:
chmod 640 file.php
chown user:group file.php
usermod -a -G group apache
这些命令正在做什么:
答案 2 :(得分:1)
1)以.php扩展名结尾的文件由Apache传递给PHP编译器。如果没有设置正确的配置,PHP文件将由服务器作为文本文件提供。 httpd.conf文件中的Apache配置行“AddHandler php5-script php
”是PHP5设置它的方法。
2)register.php需要在http://www.example.com/php/register.php访问,因为java应用正在寻找它,所以在Apache htdocs文件夹中,需要有一个带有register.php文件的“php”文件夹在它。
3)PHP文件需要运行Apache服务的用户具有读访问权限。使用PHP作为Apache模块没有'服务'可以说PHP的单独。相反,当Apache服务获得对PHP文件的请求时,它会对PHP二进制文件进行shell调用以解析文件,并将Apache服务的结果交给客户端。只有当您从命令行使用PHP(CLI设置)时,脚本才需要执行权限,并以#!/path/to/php-bin
行开头。
4)请求的文件(register.php)需要在htdocs中才能由Apache提供服务。如果PHP在禁用“安全模式”的情况下运行,则register.php可能包含一个位于htdocs文件夹之外的文件。
5)路径“../inc/db_login.php
”是相对于最初提取的PHP脚本(register.php),所以,因为register.php在htdocs/php/register.php
中,所以会放入db_login.php在htdocs/inc/db_login.php
。
答案 3 :(得分:0)
我编写了一个函数来解决PHP / SuPHP和类似的权限问题:
function realChmod($path, $chmod = null)
{
if (file_exists($path) === true)
{
if (is_null($chmod) === true)
{
$chmod = (is_file($path) === true) ? 644 : 755;
if (in_array(get_current_user(), array('apache', 'httpd', 'nobody', 'system', 'webdaemon', 'www', 'www-data')) === true)
{
$chmod += 22;
}
}
return chmod($path, octdec(intval($chmod)));
}
return false;
}
也许它对你有用。
答案 4 :(得分:0)
所有旨在通过URL直接寻址的PHP文件都可以很好地驻留在与静态内容相同的目录中(这是通常的做法)。
最好在Web服务器可见的目录之外至少有一个目录来保存包含文件,但PHP包含路径仍应包含'。'。
我建议不要在你的根文件系统中放置很多非标准目录 - 默认的webroot因发行版而异,但我通常会选择以下内容:
/ var / www / htdocs - 作为文档根目录 / usr / local / php - 包含文件
显然,如果你打算运行你的webserver chrrot,那么应该相应地映射它们。
所有文件必须由运行Web服务器的uid读取,但是如果您可以尽可能地限制此uid可写的内容,则关闭潜在的攻击媒介。
我通常设置我的目录为drwxrwSr-x由webdev组成员拥有,其中团队所有权为webdev团队,(httpd uid不在webdev组中),因此文件是-rw- rw-r--所以webdex组中的任何人都可以更改文件,而httpd uid只能读取文件。
1)文件扩展名(.php)对服务器意味着什么:
是 - 请阅读PHP安装指南。
下进行。
答案 5 :(得分:0)
假设您的SFTP / FTP用户为johndoe
,而Web服务器组为www-data
。 johndoe
仅读取,写入文件,但不执行文件(就我而言,永远不会)。通常来自www-data
组的Web服务器软件Apache / Nginx可以读取/写入/执行文件。其他用户?他们在这里做什么???
因此,我曾经设置0670
(rw-rwx---
)并始终为我工作:)