1

我正在尝试使用 open office 运行命令行文件转换。

openoffice pdf filename.doc 2>&1

当我以root身份在命令行中执行时,它工作正常并且文件被转换。但是,当我以 apache 用户的身份在 PHP 文件中传递上述命令时,它不会执行。

我尝试了所有三个 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_output1。我很困惑,无法知道 linux (centos) 对上述命令的响应是什么。非常沮丧,因为当我尝试执行命令时无法知道系统响应。

我还包括/etc/suders允许 apache 运行 open office 命令。

apache ALL: (ALL) NOPASSWD: /path/to/openoffice

该命令仍然没有以 apache 用户身份在 PHP 中执行。

作为 apache 用户,我缺少什么让 PHP 不执行这个命令?

4

3 回答 3

2

要像 apache 用户一样运行命令,只需在 shell 中尝试:

# switch to superuser
sudo su -
# then switch to the apache user
su - www-data

您会发现自己处于一个非常受限的 shell 中,通常无法从该 shell 启动 openoffice。确实,它需要很多环境,无论如何完全设置 apache 都是不安全的。

AFAIK,最好创建一个允许运行您的命令的专用用户(例如,常规的“www-runner”用户),然后从 PHP 中“su”到它。其他安全措施包括对指定用户进行 chroot,或使用 apparmor 来限制允许运行的内容和位置。在任何情况下,永远不要通过将 www-data 添加到 sudoers 来让 www-data 以 root 身份运行:这太危险了!

您还可以查看 libapache2-mod-suphp(一个 suid apache 模块,以所有者权限运行 php 脚本)。它比专用的 suEXEC apache 野兽更容易使用(http://httpd.apache.org/docs /2.0/suexec.html)。后者真的不是为了快速修复;)

于 2012-02-24T20:47:06.400 回答
2

可能是 openoffice 不在PATH. 尝试使用完整路径执行它。

于 2011-11-21T22:55:08.053 回答
1

您的 php 在 apache 中可能以安全模式运行,或者它被称为什么,其中system()功能等被禁用。

实际上,这个答案假定您所谓的“以 apache 用户身份运行”实际上是在 apache 环境中运行,无论它是什么。

于 2011-11-21T22:20:02.153 回答