我有一个php脚本,需要连接到一个数据库。数据库的凭证存储在另一个php脚本中。
如果我将凭证文件的权限设置为661,使Public具有执行权限,但没有读取权限,这是否允许主脚本访问凭证并连接到数据库,同时防止服务器上具有用户帐户的用户查看凭证文件的内容?
我想我对读取和执行之间的区别感到困惑。php脚本(以www或类似的方式运行)需要读权限才能包含另一个php脚本并使用其中的任何内容吗?或者它只需要执行?读权限是否隐式授予execute权限?
子问题:如果我将我的所有脚本都设置为只有执行权限而不是读取权限,是否会有任何我应该预料到的陷阱?这是假设我将需要显式读取权限的所有文件(数据文件)设置为读取。
发布于 2010-01-06 10:49:21
就文件而言,执行权限与您无关-您的web服务器运行时所使用的用户帐户需要具有访问和读取相关文件的权限。为了遍历到某个目录,用户还需要对该目录拥有execute权限。
如果你想让你的脚本对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
如果你想阻止世界读取"secrets“目录中的任何文件,只需禁用execute位:
# 750: myuser has rwx, www has r-x, world has ---
chmod 750 secrets
如果您将所有脚本都设置为具有执行权限,但没有读取权限,则没有人可以对它们执行任何有用的操作(包括set服务器) ;-)
发布于 2010-01-06 10:36:47
脚本是读取的,而不是执行的。脚本的Execute权限告诉加载程序或内核读取shebang行,并将脚本传递给指定的解释器。
https://stackoverflow.com/questions/2010623
复制相似问题