我正在尝试使用开放式办公室运行命令行文件转换。
openoffice pdf filename.doc 2>&1
当我以root身份在命令行中执行时,它工作正常并且文件被转换。但是,当我在PHP文件中将上述命令作为apache用户传递时,它不会执行。
我尝试了所有三个PHP命令行执行:
$command_output=system($command_line,$rtnval);
$command_output=exec($command_line,$rtnval);
$command_output=passthru($command_line,$rtnval);
另外,
echo print_r($rtnval);
echo print_r($command_output);
$rtnval
返回1和$command_output
1.我很困惑,无法知道对上面命令传递的linux(centos)响应是什么。这非常令人沮丧,因为当我尝试执行命令时无法知道系统响应。
我还包含/etc/suders
apache权限来运行open office命令。
apache ALL :(全部)NOPASSWD:/ path / to / openoffice
仍然没有在apache用户的PHP中执行该命令。
由于apache用户不执行此命令,我缺少什么?
答案 0 :(得分:2)
可能是openoffice不在PATH
中。尝试使用完整路径执行它。
答案 1 :(得分:2)
要像运行apache用户一样运行命令,只需在shell中尝试:
# switch to superuser
sudo su -
# then switch to the apache user
su - www-data
你会发现自己处于一个非常有限的shell中,通常无法启动openoffice。实际上,它需要很多环境,无论如何完全设置apache都是不安全的。
AFAIK,更好地创建一个允许运行命令的专用用户(例如常规的“www-runner”用户),然后从PHP“su”到它。其他安全措施包括chroot对dedidacted用户,或使用apparmor限制允许运行的内容和位置。无论如何,永远不要让www-data通过向sudoers添加www-data来以root身份运行:这太危险了!
你也可以看看libapache2-mod-suphp(suid apache模块运行带有所有者权限的php脚本)。它比专用的suEXEC apache beast更容易使用(http://httpd.apache。组织/文档/ 2.0 / suexec.html)。后者真的不是为了快速修复;)
答案 2 :(得分:1)
apache中的php可能会以安全模式运行,或者它调用的是什么,system()
函数等都被禁用。
实际上,这个答案假设您所谓的“以apache用户身份运行”实际上是在apache环境中运行,无论它是什么。