我已经构建了一个表单(使用 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!这是构建 ISO 映像的 perl 程序。当通过表单触发时,它作为用户 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
!这些权限是我的表单不起作用的原因吗?我在正确的轨道上吗?