2014-04-28 59 views
1

我还没有找到关于首选(最佳实践)和/或安全方法的可靠信息,以允许php访问Linux服务器上的配置文件或其他类型的文件在公共网站目录或由apache用户拥有,所以我希望能在这里找到答案。安全地允许PHP读写系统文件

我是一个相当能干的PHP程序员,但我越来越多地负责编写Web应用程序(其中大部分不能通过网络公开访问),需要更新,更改或添加到配置文件或由某些服务或应用程序生成的文件在服务器上。

例如,我需要创建一个Web界面,用于查看,添加或删除root所拥有的/etc/mail/spamassassin/white-list.cf文件中的条目。

另一种情况是,我需要php来解析用户vmail拥有的/ var/vmail中的mime消息。

这些仅仅是一些示例,其他进程/用户拥有的位置中还会有其他文件。我如何编写PHP应用程序来安全地访问和操作这些文件而不会造成安全风险?

+1

我不会推荐对root拥有的文件进行任何未经身份验证的写访问权限。话虽如此,如果您对验证用户输入非常严格,并且非常小心如何共享单个文件的所有权........我仍然不会这样做。使用'cpanel','webmin'或者其他基于网络的管理工具,这些管理工具已经具有这些功能和内置的安全功能。 –

+1

谢谢,我很欣赏这个输入。不过,我并没有要求通过网络管理服务器的实用程序或应用程序。我正在寻找PHP代码的最佳实践来访问网络目录之外的文件并由其他用户拥有。换句话说,我想采取与cpanel,webmin等相同的方法。 – Avedis777

+0

我的总体策略是将由www-data更改的内容卸载到临时文件或数据库中,然后创建一个由root拥有并执行的单独PHP脚本(作为cronjob)解析所述输入实际上执行配置覆盖。 –

回答

-1

如果我需要实现这样的事情,我可能会考虑使用类似sudo的东西来微调权限。我不是一个Linux CLI专家,所以我确信在输入这些信息时我没有考虑到这些问题。

我可能会确定需要完成哪些任务,并且会为每个需要完成的任务编写一个单独的脚本。使用sudo,我只会为该脚本分配必要的权限级别。

显然,随着任务数量的增加,复杂性和涉及的工作量也会增加。我不确定目前这将如何影响你。

+0

谢谢,我相信这是朝着正确的方向前进。目前,我通过php web界面填充数据库中的信息来解决这些问题,然后使用cronjob来检查新的数据库条目并相应地更新所需的文件,充当“中间人”。尽管我相信这是完成这些任务的安全方式,但我觉得它可能有点过于复杂。 – Avedis777

+0

为了澄清,您建议永久性地为相关脚本和文件分配权限,或者使用shell_exec()临时分配必要的权限并在脚本结尾处还原回去? – Avedis777

+0

我会使用'sudo'配置文件来永久分配权限。因此,给脚本'/ usr/bin/updatesomefile',使用'sudo'来允许PHP用户使用'shell_exec'(或类似的)执行'sudo/usr/bin/updatesomefile'。在'/ usr/bin/updatesomefile'中你有你所有的更新逻辑。 – garbetjie