这是我的命令:
sudo /usr/local/bin/jpegoptim --max=50 /home/someuser/public_html/reports/images/r121662.jpg
此命令用于压缩图像。我尝试使用反引号运算符和shell_exec运行此命令,两者都不起作用。该文件不会压缩。
但是当我直接在以someuser
登录的shell中运行它时,此命令会运行。我已修改sudoers
以接受命令而无需密码。当我在shell中运行文件时压缩文件。
Apache配置为使用suPHP运行,PHP文件也属于someuser
。我通过编写一个测试PHP脚本,只是说system(id);
并在浏览器中运行它来进一步确保这一点。这告诉我该脚本确实由someuser
运行。
此外,safe_mode已关闭。
编辑:好的,我得到它输出错误
sudo: sorry, you must have a tty to run sudo
现在,这是什么意思?!
答案 0 :(得分:1)
感谢Catalin,我得到了输出。它说sudo: sorry, you must have a tty to run sudo
要求someuser
禁用requiretty。这是我得到的最佳解决方案,如果有一种方法可以为单个用户调用单个命令禁用requiretty,请告诉我。
答案 1 :(得分:0)
sudo
通常需要终端输入(即must have a tty
),因为它会在允许您执行命令之前尝试询问用户密码。你真的需要使用sudo
来运行命令吗?请尝试删除sudo
。
答案 2 :(得分:0)
尝试sudo -S
查看是否将其设置为从stdin读取密码(即使它不需要密码)将绕过tty的测试。