我有一个试图使用以下命令运行服务重启的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并且没有指定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篇谷歌页面的每篇文章,我可以想到谷歌它的每一种方式。
答案 0 :(得分:1)
从命令提示符运行
sudo visudo
然后转到文件的最后一行并添加以下行:
%www-data ALL=NOPASSWD: <Your-Command-Here>
希望这行得通!
答案 1 :(得分:0)
虽然我的设置有点不同(我没有密码尝试实现它),但我在sudoers文件中使用它:
apache ALL=(ALL) ALL
Defaults:apache !requiretty
然后我将事情视为:
echo '{password}' | sudo -S {command}