使用提升的权限和PHP编辑系统文件

使用提升的权限和PHP编辑系统文件,php,linux,operating-system,Php,Linux,Operating System,我正在尝试创建一个非常简单的web界面,用于更改网络设备上的一些系统设置。我对PHP相当陌生,并且开始痛苦地意识到用黑客的方式做事情是多么容易,所以我试着用最佳实践来写每一件事 也就是说,编辑root/其他管理员帐户拥有的文件的最佳实践是什么?是否要创建一个受保护的shell/perl/由PHP执行的任何脚本?使用setuid是出现的另一个选项,但似乎没有任何方式限制用户 我希望这不是太模糊,让我知道如果你需要任何更多的细节,我很高兴与大家分享 进一步的细节:只是澄清一下——我所说的编辑系统文件

我正在尝试创建一个非常简单的web界面,用于更改网络设备上的一些系统设置。我对PHP相当陌生,并且开始痛苦地意识到用黑客的方式做事情是多么容易,所以我试着用最佳实践来写每一件事

也就是说,编辑root/其他管理员帐户拥有的文件的最佳实践是什么?是否要创建一个受保护的shell/perl/由PHP执行的任何脚本?使用
setuid
是出现的另一个选项,但似乎没有任何方式限制用户

我希望这不是太模糊,让我知道如果你需要任何更多的细节,我很高兴与大家分享

进一步的细节:只是澄清一下——我所说的编辑系统文件是指ifcfg和一些专有的许可信息。因此,为了简单起见,让我们只说一个简单的web界面来更改基于linux的网络设备上的ip/子网/网关/dns设置。

不要 这是最佳做法

原因?您是PHP新手。最重要的是,你写的任何东西都会有各种各样的陷阱

你的问题有点含糊。详细说明您试图更改的内容、为什么需要更改、由谁管理、应用程序的范围等,并提供更好的建议


要记住的一些事情是系统的现成备份。在编辑文件之前,请始终复制文件。不要直接写入文件。将现有文件复制到备份文件和临时文件。编辑临时文件,然后将其移回(重命名)原始文件名。这使恢复变得很容易(如果必须的话),并防止在写入失败时将文件弄糟。

有几件事。先备份一下。下一步写入临时文件。然后验证该文件(重新读取它以确保它在语法上有效,并且表示您认为它的作用)。只有这样,才能将(
mv
rename()
)文件移到原始文件的顶部。这样,您就永远不会陷入另一个进程在您仍在编写时尝试读取的状态,或者写入失败导致语法错误等等

编辑:

对于升级的权限,您可以做一些事情

一种方法是编写一个脚本(shell)来验证文件并执行移动。然后可以设置该文件的UID。然后,使用PHP编写临时文件,用PHP验证它(毕竟,验证的内容永远不会太多)。然后调用脚本将临时文件移动到位(使用升级权限)

另一种方法是添加一个只允许写入这些文件的帐户(通过sudo或正常方式)。然后,使用PHP来
su newuser-c“mv tmpfile finalfile”
。您必须进行身份验证,但这比按escilated运行PHP要好

另一个选项是使用SSH扩展名将SSH返回到框中(使用私钥),上载文件并将其复制到最终目的地


但不管怎样,如果PHP被黑客攻击,他们都可以访问这些文件,因为PHP有一种方法…

我会像你说的那样使用shell脚本进行编辑,并将PHP用作它的web界面。这样,如果需要,您也可以自己从命令行使用脚本(可能是cron作业或其他)。shell脚本可以像perl、python或bash一样轻松地编写,因此如果您愿意,解决方案可以完全是PHP


Josh K和ircmaxell还非常重视文件备份等。

将Web服务器/路由器限制为1个mac地址,即您的mac地址。一旦代码变得健壮,并由一个安全意识强的程序员进行分析,您就可以考虑让代码变得更容易访问。谢谢,我更具体地试图找出在您描述的操作和PHP之间进行接口的最佳方式。显然,我不想用提升的权限运行PHP,但这有点麻烦。哦,对不起。我以为你在寻找一般的最佳实践。我将编辑我的答案。。。