php - sudo: 不存在 tty 且未指定 askpass 程序使用 shell_exec 时

标签 php linux apache sudo shell-exec

我有一个 php 页面正在尝试使用以下方法重新启动服务:

$list=shell_exec('sudo/sbin/service NetworkManager restart');

我需要编辑我的 sudoers 文件来实现这一点。因此:

#Defaults requiretty

apache ALL=(ALL) NOPASSWD:/sbin/service

当失败时,我运行了一个测试:

apache ALL=(ALL) NOPASSWD: ALL

我在没有 sudo 命令的情况下运行了 shell_exec:

$list=shell_exec('whoami');

echo $list;

这按预期返回了“apache”。所以我跑了:

$list=shell_exec('id');

echo $list;

这返回了“uid=48(apache) gid=48(apache) groups=48(apache),10(wheel)”

我根据正在执行相同操作的工作系统检查了文件的权限,并且它们匹配。在那之后,为了测试,我将所有文件权限更改为 777。仍然没有。在 apache 错误日志中,我得到一行“sudo:不存在 tty 且未指定 askpass 程序”。据我了解,它适用于 sudoers 文件中的 #Defaults requiretty 行,但如前所述,该行已被注释掉。我对它做了更多测试,我当前在 sudoers 文件中的条目是:

#Defaults requiretty

ALL ALL=(ALL) NOPASSWD: ALL

我知道不要以这种方式运行服务器,因为它存在巨大的安全风险,但在这一点上,我对锁定我的东西完全不知所措。 Selinux 已关闭,所有权限均为 777,并且文件的所有权与我拥有的工作系统相匹配。考虑到所有这些以及我能想到的所有可能的安全性,我仍然每次都在/var/log/httpd/error_log 中看到“sudo: no tty present and no askpass program specified”行。的输出:

$list=shell_exec('sudo echo "yes"2>&1 ');

echo $list;

是否也是“sudo:不存在 tty 且未指定 askpass 程序”? 在这方面我真的需要一些帮助。我已经阅读了 4 个谷歌页面的每篇文章,我想用谷歌搜索它。

最佳答案

从命令提示符运行

sudo visudo

然后转到文件的最后一行并添加以下行:

%www-data ALL=NOPASSWD: <Your-Command-Here>

希望这能奏效!

关于php - sudo: 不存在 tty 且未指定 askpass 程序使用 shell_exec 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31995553/

相关文章:

php - 与 Virtualhost Homestead 相比,本地主机 MySQL PHP 数据库迁移性能较慢

linux - 更改 Centos 6 中的默认目录

c - 如何使 linux 共享对象(库)独立运行?

php - 如何在没有 apache_get_modules() 的情况下检测 mod_rewrite?

php - 如何正确比较 NodeJS 和 PHP 与 MySQL 的查询性能

php - UTF-8贯穿始终

javascript - jQuery Ajax 请求不发送信息

php - 如何在单击表单元素时发出 PHP 调用?

php - 在PHP中计算带有半角假名的日语多字节字符串的长度

python - 使用 Python subprocess.call() 启动 ncurses 进程