【问题标题】:Editing System Files With Elevated Permissions and PHP使用提升的权限和 PHP 编辑系统文件
【发布时间】:2023-03-09 02:55:02
【问题描述】:

我正在尝试创建一个非常简单的 Web 界面来更改网络设备上的某些系统设置。我对 PHP 还很陌生,并且痛苦地意识到以 hacky 方式做事是多么容易,所以我试图在编写所有内容时都考虑到最佳实践。

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

我希望这不是太含糊,如果您需要更多详细信息,请告诉我,我很乐意分享。

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

【问题讨论】:

  • 将后面的网络服务器/路由器限制为 1 个 mac 地址,你的。一旦代码变得健壮并由具有安全意识的程序员分析,您就可以考虑让代码更易于访问。

标签: php linux operating-system


【解决方案1】:

不要

这是最佳做法。

原因?您是 PHP 新手。这首先会让你写的任何东西都陷入各种陷阱。

你的问题有点含糊。详细说明您要更改的内容、需要更改的原因、管理人员、应用程序的范围等,并且可以提供更好的建议。

需要牢记的一些事情是系统的现成备份。始终在编辑文件之前制作文件副本。不要直接写入文件。将现有文件复制到备份文件和临时文件。编辑临时文件,然后将其移回(重命名)为原始文件名。这样可以很容易地恢复(如果必须的话),并防止您在写入失败时搞砸文件。

【讨论】:

    【解决方案2】:

    一些事情。先做个备份。接下来写入临时文件。然后验证该文件(重新阅读它以确保它在语法上是有效的,并且意味着你认为它的作用)。只有这样,将文件移动(mvrename())到原始文件的顶部。这样,您就永远不会陷入另一个进程在您仍在写入时尝试读取的位置,或者写入失败导致语法错误等...

    编辑:

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

    一种方法是编写一个脚本(shell)来验证文件并进行移动。然后,您可以设置该文件。然后,您使用 PHP 编写临时文件,在 PHP 中对其进行验证(毕竟,您永远无法验证太多)。然后调用脚本将临时文件移动到位(使用升级的权限)。

    另一种方法是添加一个仅有权写入这些文件的帐户(通过 sudo 或通常)。然后,使用 PHP 到su newuser -c "mv tmpfile finalfile"。您必须取消身份验证,但这比运行 PHP 作为 escilated...

    另一种选择是使用 SSH 扩展程序通过 ssh 回到盒子(使用私钥),上传文件并将其复制到最终目的地。

    但是不管你怎么做,如果 PHP 被黑了,他们可以访问这些文件,因为 PHP 有办法...

    【讨论】:

    • 谢谢,我更具体地试图找出在您描述的操作和 PHP 之间进行接口的最佳方式。显然,我不想以提升的权限运行 PHP,但这有点麻烦 22
    • 哦,对不起。我以为您正在寻找一般的最佳实践。我将编辑我的答案...
    【解决方案3】:

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

    Josh K 和 ircmaxell 也做了一个非常好的点重新归档备份等。

    【讨论】:

      猜你喜欢
      • 2019-02-23
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 2023-03-16
      相关资源
      最近更新 更多