这是我的问题。我正在使用 PHP/MySQL 开发一个 Web 应用程序,但在设置我需要使用的帐户时遇到一些问题。
开发工作站:WinXP SP3、Eclipse PDT
开发服务器:Debian 6.0、Apache2、MySQL 5、XDebug
通过 LAN 连接。
在开发时,我将需要测试的代码上传到服务器。我使用 GIT 和 ssh:root@myserver。
正如预期的那样,这些文件最终归服务器中的 root 所有。
我的网络应用程序需要更新一些文件。为了允许我在服务器中运行 chmod 将文件的所有权更改为 www-data。这很好用。
问题是,每次我更改文件并再次上传时,它都会恢复为 root 所有权,并且我必须手动将其更改回 www-data。
我认为这在生产环境中不会成为问题,因为我可以确保文件在上线时拥有正确的所有权。然而开发过程却是痛苦的。
我在想什么:
1 - 我可能不应该使用 root 帐户上传。我尝试使用用户 www-data 通过 ssh 连接到服务器。然而,它要求输入密码,经过一番阅读后,我发现扰乱 www-data 用户可能不是一个好主意。
2 - 我可能可以创建另一个帐户用于开发目的并使用该帐户上传文件。问题是我不知道如何配置我的 Web 应用程序以在连接到服务器和数据库时使用该帐户。
3 - 我可以将我的应用程序和数据库配置为在开发环境中以 root 身份运行。这将解决问题。然而,正如上面 2 中所述,我不知道该怎么做,而且我知道这不是一个好主意。
所以我正在寻求有关如何解决我的问题的建议。我可以选择上述三种选择中的任何一种(甚至是我没有考虑过的第四种选择)。谢谢。
更新 - 2011-09-13
下面的响应中的一种解决方案(谢谢 cdp1337)是在我将文件上传到开发服务器时运行脚本来更新文件权限。就我而言,我可以跑
chown -R www-data:www-data *
在我网站的根目录中。注意:这不是在生产环境中,并且开发 Web 服务器无法在我们公司外部访问。这不是部署到生产环境的解决方案。
还有其他想法吗?谢谢。
答案1
1/2 - 是的,作为非特权用户上传数据会很好,但我发现自己在懒惰时也会做同样的事情。
3 - IMO 从来都不是一个好主意,如果您没有明确需要,您永远不想以 root 身份运行应用程序。
否则,为了回答您的问题,我建议创建一个可以运行的构建脚本,它将执行配置应用程序所需的过程。许多人使用 ant 来执行此操作,但是一个带有一些“chown”指令的简单 bash 脚本应该足以满足您的需求。这样,当您上传数据时,您只需运行一个脚本,您就知道它已正确构建。
作为替代方案,您可以让更新脚本自动从 git 提取应用程序的最新版本并运行权限。这会将两个步骤浓缩为一个。
答案2
您不仅不应该以 root 身份上传文件,也不应该可能的以 root 身份上传文件。您负责该系统的管理员吗?
我尝试使用用户 www-data 通过 ssh 连接到服务器。但是它要求输入密码
我希望你不对管理员负责。去与负责服务器的人交谈并尝试制定一个合理的安全模型。关于所有这些东西是如何工作的,你有很多东西需要了解——远远超出了这里可以提供的答案。
但是您可能想要创建一个包含普通用户帐户(您将用于上传文件)和 http 服务器用户的组 - 请注意,这不应该是任一用户的默认组。然后,对于 apache uid 应具有写入访问权限的任何目录(它应该是一个非常短的列表,位于文档根目录之外),将组更改为公共组,使内容可由公共组读取,并在这些目录中。
对于您上传且应可由网络服务器 uid 读取的文件/目录,请通过“其他”权限启用读取访问权限(以及目录的执行访问权限)。
如果您确实负责此框的管理,那么您需要花一些时间来开始了解您的职责是什么。有很多好书——鲁特是一个好的开始。