我正在尝试创建一个非常简单的Web界面,用于更改网络设备上的某些系统设置。我对PHP很陌生,并且痛苦地意识到以黑客方式做事是多么容易,所以我试着用最好的实践来写一切。
那就是说,编辑root /其他管理员帐户所拥有的文件的最佳做法是什么?是否要创建受保护的shell / perl /由PHP执行的任何脚本?使用setuid
是另一种选择,但似乎没有任何限制用户的方法。
我希望这不是太模糊,如果您需要更多细节,请告诉我,我很乐意与您分享。
进一步的细节:只是为了澄清 - 通过编辑系统文件,我的意思是ifcfg和一些专有许可信息。因此,为简单起见,我们只需说一个简单的Web界面来更改基于Linux的网络设备上的ip / subnet / gateway / dns设置。
答案 0 :(得分:3)
这是最好的做法。
原因?你是PHP的新手。首先,你写的任何东西都会让人怀疑各种陷阱。
你的问题有点模糊。详细说明您正在尝试更改的内容,需要更改的内容,管理此内容的人员,应用程序的范围等等,并提供更好的建议。
要记住的一些事项是随时可用的系统备份。始终在编辑文件之前复制文件。不要直接写入文件。将现有文件复制到备份文件和临时文件。编辑临时文件,然后将其移回(重命名)为原始文件名。这样可以很容易地进行恢复(如果必须),并且在写入失败时阻止您在写入期间搞砸文件。
答案 1 :(得分:2)
一些事情。先备份一下。接下来写入临时文件。然后验证该文件(重新读取它以确保它在语法上有效,并表示您认为它的作用)。只有这样,MOVE(mv
或rename()
)文件位于原始文件的顶部。这样,你永远不会陷入另一个进程在你还在写的时候试图读取的位置,或者写入失败导致语法错误等等......
修改强>
您可以为升级的权限执行一些操作。
一种方法是编写一个脚本(shell)来验证文件并进行移动。然后,您可以setuid该文件。那么,你使用PHP编写临时文件,用PHP验证它(毕竟,你永远不能验证太多)。然后调用脚本将临时文件移动到位(使用升级的权限)。
另一种方法是添加一个只能写入这些文件的帐户(通过sudo或通常)。然后,使用PHP su newuser -c "mv tmpfile finalfile"
。你不得不敲打身份验证,但它比运行PHP更好...
另一种选择是使用SSH扩展ssh回到框中(使用私钥),上传文件并将其复制到最终目的地。
但无论你采用哪种方式,如果PHP被黑客入侵,他们都可以访问这些文件,因为PHP有办法......
答案 2 :(得分:0)
我会像你说的那样使用shell脚本进行编辑,只需使用PHP作为它的Web界面。这样,如果需要,您也可以从命令行自己使用脚本(也许是一个cron作业或其他东西)。 shell脚本可以很容易地用PHP CLI编写为perl,python或bash,因此如果你愿意,解决方案可以完全是PHP。
Josh K和ircmaxell也非常重视备份等。