php exec()中的Sudo

php exec()中的Sudo

我不知道这是怎么回事,…

所以我想运行一个AppleScript:sudo osascript myscript.scpt

这在终端中运行得很好,但当我通过PHP执行它时就不行了。exec()什么也没发生。控制台上写着

no tty present and no askpass program specified ; TTY=unknown ; …

我做了我的研究,似乎我错过了密码sudo命令。我尝试了几种不同的方法来解决这个问题,包括:

  • 写字

    %admin ALL=(ALL) ALL

    在……里面

    /etc/sudoers

  • proc_open()

    而不是

    exec()

所有这些似乎都不起作用,结果把我逼疯了!

因此,基本上,有一个明确的方式让PHP执行一个简单的终端命令吗?

编辑:为了澄清,myscript.scpt是一个简单的AppleScript,它可以更改屏幕上的UI(用于更大的项目)。理论上,很简单osascript myscript.scpt应该足够了,但是sudo由于某种原因需要调用一些系统的回应。如果sudo可能会被删除,我不认为我会有这个权限问题。


阿晨1998
浏览 1010回答 3
3回答

繁花不似锦

听起来你需要设置无密码的sudo。试着:%admin ALL=(ALL) NOPASSWD: osascript myscript.scpt如果存在/etc/sudoers,也可以注释掉以下行(in/etc/sudoers通过visudo):Defaults    requiretty

湖上湖

如果还有人需要这个。您可以编写一个纯文本文件,例如~。,使用根目录密码。假设根密码是‘12345’。你创造~。只有'12345'作为其内容:12345然后你做了以下几件事:exec('sudo&nbsp;-u&nbsp;root&nbsp;-S&nbsp;{{&nbsp;your&nbsp;command&nbsp;}}&nbsp;<&nbsp;~/.sudopass/sudopass.secret');记住,这只在受控环境中使用。

森林海

PHP:bash控制台是创建的,它执行第一个脚本,该脚本对第二个脚本调用sudo,如下所示:$dev&nbsp;=&nbsp;$_GET['device'];$cmd&nbsp;=&nbsp;'/bin/bash&nbsp;/home/www/start.bash&nbsp;'.$dev;echo&nbsp;$cmd;shell_exec($cmd);/home/www/start.bash#!/bin/bash/usr/bin/sudo&nbsp;/home/www/myMount.bash&nbsp;$1MyMount.bash:#!/bin/bashfunction&nbsp;error_exit{ &nbsp;&nbsp;echo&nbsp;"Wrong&nbsp;parameter"&nbsp;1>&2 &nbsp;&nbsp;exit&nbsp;1}..........OC,您希望在没有根权限的情况下从根级运行脚本,以创建和修改/etc/sudoers.d/挂载文件:www-data&nbsp;ALL=(ALL:ALL)&nbsp;NOPASSWD:/home/www/myMount.bash别忘了说:sudo&nbsp;chmod&nbsp;0440&nbsp;/etc/sudoers.d/mount
打开App,查看更多内容
随时随地看视频慕课网APP