从 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 文件的主要内容,如果未能解决你的问题,请参考以下文章