sudo: 不存在 tty 且未指定 askpass 程序使用时 shell_exec
sudo: no tty present and no askpass program specified When useing 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: no tty present and no askpass program specified"。据我了解,它适用于 sudoers 文件中的 #Defaults requiretty 行,但如前所述,该行已被注释掉。我对它做了更多测试,我当前在 sudoers 文件中的条目是:
#Defaults requiretty
ALL ALL=(ALL) NOPASSWD: ALL
我知道不要以这种方式 运行 服务器,因为这是一个巨大的安全风险,但在这一点上,我完全不知所措。 Selinux 已关闭,所有权限均为 777,并且文件的所有权与我拥有的工作系统相匹配。有了所有这些以及我能想到的所有可能的安全性关闭,我仍然在我的 /var/log/httpd/error_log 中每次都有“sudo:不存在 tty 并且没有指定 askpass 程序”行。的输出:
$list=shell_exec('sudo echo "yes" 2>&1 ');
echo $list;
是否也是“sudo:不存在 tty 且未指定 askpass 程序”?
在这方面我真的需要一些帮助。我已经阅读了 4 google 页的每篇文章,以我能想到的任何方式 google 它。
虽然我的设置有点不同(我不是想在没有密码的情况下实现它),但我在 sudoers 文件中使用它:
apache ALL=(ALL) ALL
Defaults:apache !requiretty
然后我 运行 事情是:
echo '{password}' | sudo -S {command}
从命令提示符 运行
sudo visudo
然后转到文件的最后一行并添加以下行:
%www-data ALL=NOPASSWD: <Your-Command-Here>
希望这有效!
我有一个 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: no tty present and no askpass program specified"。据我了解,它适用于 sudoers 文件中的 #Defaults requiretty 行,但如前所述,该行已被注释掉。我对它做了更多测试,我当前在 sudoers 文件中的条目是:
#Defaults requiretty
ALL ALL=(ALL) NOPASSWD: ALL
我知道不要以这种方式 运行 服务器,因为这是一个巨大的安全风险,但在这一点上,我完全不知所措。 Selinux 已关闭,所有权限均为 777,并且文件的所有权与我拥有的工作系统相匹配。有了所有这些以及我能想到的所有可能的安全性关闭,我仍然在我的 /var/log/httpd/error_log 中每次都有“sudo:不存在 tty 并且没有指定 askpass 程序”行。的输出:
$list=shell_exec('sudo echo "yes" 2>&1 ');
echo $list;
是否也是“sudo:不存在 tty 且未指定 askpass 程序”? 在这方面我真的需要一些帮助。我已经阅读了 4 google 页的每篇文章,以我能想到的任何方式 google 它。
虽然我的设置有点不同(我不是想在没有密码的情况下实现它),但我在 sudoers 文件中使用它:
apache ALL=(ALL) ALL
Defaults:apache !requiretty
然后我 运行 事情是:
echo '{password}' | sudo -S {command}
从命令提示符 运行
sudo visudo
然后转到文件的最后一行并添加以下行:
%www-data ALL=NOPASSWD: <Your-Command-Here>
希望这有效!