gpt4 book ai didi

PHP 用户以外的用户的 PHP exec() 命令函数

转载 作者:行者123 更新时间:2023-12-05 05:20:03 25 4
gpt4 key购买 nike

我提前道歉,因为这是一个非常小众的问题,但希望有人能帮助我。

长话短说:

在 IIS8 上,我有一条命令需要从需要管理权限的 PHP exec()system() 函数中执行。我需要一种方法来执行以下操作之一:

  • 以管理用户身份从 system()/exec() 运行命令,而不在脚本中存储计算机管理员密码
  • 允许一个特定的可执行文件在没有管理权限的情况下在我的系统上运行,而不修改可执行文件。

好吧,现在是血淋淋的细节。

背景:

我正在用 PHP 编写一个 Web 应用程序,允许用户跟踪图形(图标)的开发并在开发过程中引用现有图形。它通过将存储在 MySQL 数据库中的元数据与存储在 Team Foundation Server 中的实际文件资源本身相结合来实现这一点。公司网络上的 (TFS) 集合。

当用户通过我正在构建的 Web 应用程序更新文件时,需要发生以下过​​程:

  • TFS 集合的最新副本已同步到本地服务器工作区
  • 要编辑的文件已从 TFS 中 checkout
  • 新文件被移动到 TFS 工作区,根据需要更改/覆盖现有文件
  • 编辑后的文件被 checkin TFS

这些和其他 TFS 命令是通过 TFS Command Line Utility 完成的, tf.exe。从服务器同步最新文件的命令示例如下:

tf.exe get /noprompt /login:"DOMAIN\username,password"

我有两个用户帐户可以使用:

  1. 在服务器上具有管理权限的域服务帐户,在这里我将其称为“DOMAIN\SVC”
  2. 内置服务器本地 IIS 帐户,“LOCAL\IUSR”

我无法使用服务器管理员帐户(没有密码)或我的个人用户帐户,因为密码会定期过期,我不想在脚本中更新它。

问题:

当我从命令行(不是通过 PHP 脚本)以 DOMAIN\SVC 或 LOCAL\IUSR(使用 Windows 命令 Runas)运行 tf.exe 时,我遇到了一个可爱的 UAC 挑战请求管理员权限。如果我允许,它会按我的意愿执行,没有任何问题。但是,当我运行以下 PHP 脚本时,它打印出 array() 1,表示失败:

<?php

$var = null;
$array = [];

// Note the double backslash in the /login flag to escape the PHP escape character
exec('cd "Path/to/TFS/workspace" && tf.exe get /noprompt /login:"DOMAIN\\SVC,password"', $array, $var);

print_r($array);
echo $var;

?>

我提取了上面的命令并从命令行手动测试它,它工作正常,除了 UAC 提示。

我已经更改了由 IIS 管理的 PHP 应用程序,因此它以 DOMAIN\SVC 帐户运行,该帐户在服务器上具有管理员权限。然而,尽管它具有适当的凭据,它仍然会“弹出”该 UAC 窗口并因此失败;大概是由于权限问题。

因此,回顾一下,我需要一种方法让 tf.exe 无需管理员权限即可运行,或者让 PHP 自动运行提升的命令。

注意:我不能使用 Runas,因为 Runas 不允许通过管道将密码作为输入传递给它。这是设计使然,据我所知,无法克服


本系统运行于Windows Server 2012 R2、IIS 8.5、PHP 7.1.1 (x64)

最佳答案

我想通了。我分享是因为这个答案可能会出现在“非明显信息”下的字典中

显然,问题是 PHP(在 IIS 下运行)以 LOCAL\IUSR 身份执行这些命令,它没有管理员权限。我需要重新配置 IIS,以便它作为我的 DOMAIN\SVC 帐户运行站点的应用程序池,该帐户具有适当的权限。但是,这仍然没有用。

我不确定为什么,但缺少的部分是名为“加载用户配置文件”的应用程序池设置,需要将其设置为 true。设置后它工作正常,但我找不到任何解释原因的文档。

实现修复的所有步骤:

  • 在 IIS 管理器中,选择服务器项“应用程序池”,然后右键单击您网站使用的池,然后选择“高级设置”。在此列表中,更改以下设置:
    1. 编辑身份,选择“自定义帐户”并输入DOMAIN\SVC 凭据。这记录在案 herehere .
    2. 加载用户配置文件设置为True
  • 在 IIS 管理器中,打开您网站的身份验证功能。右键单击“匿名身​​份验证”并选择“编辑”,然后将其设置为“应用程序池标识”。
  • 在 Windows 资源管理器中,导航到 C:\Windows 并打开 Temp 子目录的属性对话框。在 Security 选项卡下,将 DOMAIN\SVC 帐户的 R/W 权限添加到 C:\Windows\Temp
    • 注意:这允许服务帐户访问 PHP 临时文件

顺便说一句,“加载用户配置文件”设置仅在 IIS 7.5+ 中实现,因此推测这不适用于 IIS 7.0 及更早版本。

关于PHP 用户以外的用户的 PHP exec() 命令函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45203390/

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