sudo in php exec()

2022-08-30 11:22:05

我不知道这里的交易是什么...

所以我想运行一个苹果脚本: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()

这些似乎都不起作用,因此驱使我CrAzY!

那么基本上,有没有一种明确的方法来让PHP执行一个简单的终端命令呢?

编辑:澄清一下,是一个简单的appleScript,它改变了屏幕上的UI(对于更大的项目)。从理论上讲,简单地应该就足够了,但是由于某种原因,有必要从系统中调用一些响应。如果可以以某种方式消除,我认为我不会遇到这种权限问题。myscript.scptosascript myscript.scptsudosudo


答案 1

听起来您需要设置无密码的sudo。尝试:

%admin ALL=(ALL) NOPASSWD: osascript myscript.scpt

如果存在,还要注释掉以下行(在 /etc/sudoers via visudo 中):

Defaults    requiretty

答案 2

我认为你可以通过这样的东西为用户和命令带来特定的访问权限:visudo

nobody ALL = NOPASSWD: /path/to/osascript myscript.scpt

和与 php:

@exec("sudo /path/to/osascript myscript.scpt ");

假设用户正在运行 apache。nobody


推荐