Unix权限,读取与执行(PHP上下文)

时间:2010-01-06 02:34:46

标签: php unix permissions include

我有一个需要连接数据库的php脚本。数据库的凭据存储在另一个PHP脚本中。

如果我将凭证文件的权限设置为661,以便Public具有执行权限但不具有读取权限,这是否允许主脚本访问凭据并连接到数据库,同时阻止在服务器上拥有用户帐户的用户从查看凭证文件的内容?

我想我对阅读和执行之间的区别感到困惑。 php脚本(以www或类似的方式运行)是否需要读取权限才能包含另一个php脚本并使用其中的任何内容?还是只需要执行?读权限是否隐式赋予执行权限?

子问题:如果我将所有脚本设置为仅具有执行权限而不读取,那么我应该期待任何陷阱吗?这假设我将保留任何我需要显式读取权限(数据文件)设置为读取的文件。

2 个答案:

答案 0 :(得分:13)

脚本被读取,而不是执行。脚本的执行权限告诉加载器或内核读取shebang行并将脚本传递给指定的解释器。

答案 1 :(得分:10)

就文件而言,执行权限与您无关 - 您的Web服务器运行的用户帐户需要访问和读取相关文件的权限。为了遍历目录,用户还需要该目录的执行权限。

如果你试图让你的脚本可以被网络服务器读取(假设你是以“www”这个属于“www”组的帐号运行),而不是系统上的其他用户,这就是我的意思会做(假设你的帐户是“myuser”):

# Change owner to "myuser" and group to "www" for file(s) in question
chown myuser:www config.php

# 640: myuser has rw-, www has r--, world has ---
chmod 640 config.php

如果你想阻止世界读取“秘密”目录中的任何文件,只需禁用执行位:

# 750: myuser has rwx, www has r-x, world has ---
chmod 750 secrets

如果您将所有脚本设置为具有执行权限但没有读取权限,则没有人可以对它们执行任何有用的操作(包括Web服务器); - )