为了账号安全,请及时绑定邮箱和手机立即绑定

php exec()中的Sudo

php exec()中的Sudo

阿晨1998 2019-07-09 15:07:35
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可能会被删除,我不认为我会有这个权限问题。
查看完整描述

3 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

听起来你需要设置无密码的sudo。试着:

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

如果存在/etc/sudoers,也可以注释掉以下行(in/etc/sudoers通过visudo):

Defaults    requiretty


查看完整回答
反对 回复 2019-07-09
?
湖上湖

TA贡献2003条经验 获得超2个赞

如果还有人需要这个。您可以编写一个纯文本文件,例如~。,使用根目录密码。假设根密码是‘12345’。你创造~。只有'12345'作为其内容:

12345

然后你做了以下几件事:

exec('sudo -u root -S {{ your command }} < ~/.sudopass/sudopass.secret');

记住,这只在受控环境中使用。


查看完整回答
反对 回复 2019-07-09
?
森林海

TA贡献2011条经验 获得超2个赞

PHP:bash控制台是创建的,它执行第一个脚本,该脚本对第二个脚本调用sudo,如下所示:

$dev = $_GET['device'];$cmd = '/bin/bash /home/www/start.bash '.$dev;echo $cmd;shell_exec($cmd);
  1. /home/www/start.bash

    #!/bin/bash/usr/bin/sudo /home/www/myMount.bash $1
  2. MyMount.bash:

    #!/bin/bashfunction error_exit{
      echo "Wrong parameter" 1>&2
      exit 1}..........

OC,您希望在没有根权限的情况下从根级运行脚本,以创建和修改/etc/sudoers.d/挂载文件:

www-data ALL=(ALL:ALL) NOPASSWD:/home/www/myMount.bash

别忘了说:

sudo chmod 0440 /etc/sudoers.d/mount


查看完整回答
反对 回复 2019-07-09
  • 3 回答
  • 0 关注
  • 1009 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信