gpt4 book ai didi

用于创建根符号链接(symbolic link)的 PHP exec 权限

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:26:47 29 4
gpt4 key购买 nike

我目前正在为一家工程公司开发基于 Linux 的单板计算机,我负责更新板内托管的本地配置网站。这个配置服务器的目的是让用户可以通过他们的网络浏览器连接到开发板并修改开发板内的设置。

我尝试创建的当前设置涉及设置电路板硬件时钟的时区。不幸的是,开发板处理时区的方式是在/usr/share/zoneinfo/中的文件与/etc/localtime 之间设置系统链接。

我的问题是我需要从网站运行以下命令:

ln -s /usr/share/zoneinfo/Etc/GMT$1 /etc/localtime

其中 $1 是 + 或 - 后跟一个数字。这些是由网站上的下拉菜单生成的。

当我尝试从网站的 PHP 运行此命令时,出现了我的主要问题。通过捕获 exec 命令的响应,我发现我没有获得足够的权限来创建/修改符号链接(symbolic link)。我尝试过创建 bash 脚本并从 PHP 运行该脚本的方法。我还尝试从 PHP 运行基于 C 的可执行文件。

注意事项:用户密码是随机生成的,sudo 不包含在嵌入式 Linux 软件包中。

出于安全考虑,我的目标是避免以 root 身份运行 Apache 服务器。有什么方法可以为单个脚本(可能是临时的)授予运行命令的权限,或者对此有任何其他类型的解决方法吗?

最佳答案

分离权限是有充分理由的,尤其是当您处理无状态协议(protocol)时。 darryn.ten 的回答是浪费时间——您授予网络服务器 uid 执行所有操作的权限——通过以 root 身份运行网络服务器,您的代码可以以更少的努力(并且同样不安全)获得相同的结果。

我建议将逻辑封装在以 root 身份运行的程序中,该程序仅:

  • 验证参数
  • 链接时区

在这个例子中,我使用的是 bash,它需要 sudo 以 root 身份执行 - 但如果你用 C 编写它,那么你可以启用 setuid 位,它将以文件所有者的权限运行程序(这赢了' 使用 shell 脚本)。不确定 setuid 与 lua 的行为方式 - 这显然是嵌入式系统的候选者。

#!/bin/bash

# NB must be validated under executing user privilege

REQUEST=`echo $1 | grep -P '/^([\+\-0-9]+)$/'`";
ln -s /usr/share/zoneinfo/Etc/GMT$(REQUEST} /etc/localtime

关于用于创建根符号链接(symbolic link)的 PHP exec 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10980577/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com