【发布时间】:2012-08-16 18:38:20
【问题描述】:
我已经构建了一个表单(使用 JavaScript、jQuery、PHP 和 HTML),它使非技术人员可以轻松编写和触发创建包含 CentOS Linux 和公司应用程序的 ISO 映像的命令它。这是带有示例变量的实际命令。
./test.pl --verbose --output tvmTEST.iso --virtual --isv 4.1.5.1.4147.8.0 --64bit --netproto static --hostname tvmTEST --address 192.168.5.235 --netmask 255.255.255.0 --gateway 192.168.5.252 --nameserver 192.168.5.21,192.168.5.2
当以 root 身份登录并成功创建 ISO 并从 shell 触发时,这个确切的命令可以正常工作。但是,它不能通过 GUI 工作。该表单正确地组合了命令并将其传递给我正在调用 perl 程序的 PHP 代码。我在shell中测试了由PHP程序组成的命令,它创建了ISO! Here is the perl program 构建 ISO 映像。当通过表单触发时,它作为用户 apache 运行。但是,它在第 665 行死亡,它说:
system("sudo mount -o loop $c{centosiso} $mp") and die;
我尝试打印上面传递给system() 的字符串并打印出来:
sudo mount -o loop /tmp/test.pl-cache/CentOS-5.4-x86_64-bin-1of7.iso /mnt/CentOS
所以,我尝试通过 shell 触发这个命令,它实际上安装了 ISO!但是,/mnt/CentOS 的权限更改为 755。我不清楚为什么?请注意,我在上面那一行中使用和不使用 sudo 对其进行了测试。
在此之前,/mnt/CentOS 的权限设置为777,所有者设置为apache!这些权限是我的表单不起作用的原因吗?我在正确的轨道上吗?
【问题讨论】:
-
sudo 可能不适用于 apache,
-
我在没有 sudo 的情况下尝试过,它没有任何区别。
-
您忽略了错误消息。将
use autodie qw(:all);添加到您的程序并删除and die,或将其更改为die "mount failed: $!";。 -
@daxim 看起来我需要安装
IPC::System::Simple,只是在代码开头添加use IPC::System::Simple;use autodie qw(:all);不起作用。我把它放错地方了吗?如何安装该模块(对不起,我是新手)?