从php执行作为特定用户的bat文件

时间:2016-10-21 11:50:46

标签: php batch-file

我已经设置了一个Web服务器并基于HTTP请求,需要以不同的用户身份执行脚本。

关于这一点,我可以像我需要的用户那样运行HTTP吗?

或者我可以非交互式提供密码,并包含以下内容作为bat文件的第一行。

runas /user:dmn1\user1 cmd

3 个答案:

答案 0 :(得分:0)

首先,从命令执行bat,sh或任何其他文件不是一个好主意,可以通过任何方式进行欺骗。 您可以使用php的exec()来执行系统命令。

答案 1 :(得分:0)

如果您尝试以Web服务器本身中的其他用户身份执行命令,那么我不知道该怎么做,但是如果您尝试通过浏览器执行cmd,则可以通过.hta脚本来实现可能不适用于除IE以外的现代浏览器。

答案 2 :(得分:0)

Windows 缺少类似 sudo 的内置功能。<​​/p>

您的选择是:

  1. 使用第三方工具,例如 psexec(需要以明文形式指定密码;有时可能有点花哨)或 sudo for windows(允许网络服务器用户不受限制的管理访问 - 不安全)。

  2. 在不同的端口上使用所需的用户凭据运行另一个网络服务器实例,并使用 .htaccess 重定向请求(这可能非常不安全!)

您只能允许本地访问并使用来自第一个网络服务器的 CURL 向第二个网络服务器发出请求

  1. 打开“任务计划程序”(taskschd.msc) 并创建一个任务,选择用户作为所有者并输入他们的密码。

要运行任务,请使用: schtasks /run /s SERVERNAME /tn "SCHEDULEDTASKNAME"

您不能直接将参数传递给任务 - 您可以使用文件,但如果两个人同时访问 HTTP,请注意重叠

  1. 运行一个 BATCH 文件(或 python/powershell/autoit 脚本)来监控文件目录。当文件出现时,从那里读取参数,运行任务,然后删除文件。

您可以通过任务调度程序运行“服务器”脚本。

然后 HTTP 服务器应该在该文件夹中创建具有长随机名称的文件。

如果不希望创建文件,您可以使用命名管道或本地 TCP 连接 (netcat) 或类似方法

  1. 自己编写一个系统服务(您可能需要一个诸如 NSSM 之类的工具才能使其真正作为服务运行)