从 php 以特定用户身份执行 bat 文件

Posted

技术标签:

【中文标题】从 php 以特定用户身份执行 bat 文件【英文标题】:Execute a bat file as a specific user from php 【发布时间】:2017-03-03 17:26:33 【问题描述】:

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

那么关于那个,我可以以我需要的用户身份运行 HTTP 吗?

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

runas /user:dmn1\user1 cmd

【问题讨论】:

【参考方案1】:

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

【讨论】:

你建议我如何以我需要的用户身份运行 exec 命令?【参考方案2】:

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

【讨论】:

【参考方案3】:

Windows 缺少内置的类似sudo 的功能。

您的选择是:

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

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

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

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

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

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

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

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

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

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

    自己编写系统服务(您可能需要NSSM 等工具才能真正使其作为服务运行)

【讨论】:

以上是关于从 php 以特定用户身份执行 bat 文件的主要内容,如果未能解决你的问题,请参考以下文章

windows系统,管理员身份运行bat文件,闪退。

如何让bat文件 开机自动以管理员身份运行。且不弹出黑框

从作为 LocalSystem 运行的 WCF 托管服务以特定用户身份启动进程

怎样自动以管理员身份运行bat文件

怎样自动以管理员身份运行bat文件

vista下如何以管理员身份开机运行bat文件