2015-02-11 108 views
0

我目前正在开发一个perl脚本作为我的网站中的cgi-bin。如何让perl cgi-bin脚本运行系统命令?

我成功配置它运行没有任何问题。这里是我为它所做的配置。

ScriptAlias /cgi-bin/ /my web directory/cgi-bin/ 
    <Directory /my web directory/cgi-bin/> 
     Options ExecCGI 
     AddHandler cgi-script cgi pl 
    </Directory> 

但我不能在脚本中使用system()函数来运行一些系统命令。 它给不能执行,没有这样的文件或目录 或权限被拒绝。

什么应该添加你的Apache配置允许cgi-bin运行这些命令?

谢谢!

+7

你怎么使用'system()'?你是否包括路径,例如:'system('/ bin/ls')'或者只是'system('ls')'?如果是后者,那么环境根本就没有路径的可能性非常大。 – PaulProgrammer 2015-02-11 06:31:06

+0

如果它运行在'chroot'监狱里,那么监狱里可能不存在这个二进制文件 – tripleee 2015-02-11 06:39:32

+0

Hi @PaulProgrammer,那么我只是试过系统('ls')和系统('/ bin/ls')命令而且两者都没有问题。我目前所做的就是试图运行系统(“/ var/lib/asterisk/bin/module_admin”,“reload”)或系统(“amportal a r”)。这些是freepbx星号服务的reload命令。我的脚本由星号:asterisk和/ var/lib/asterisk/bin/module_admin也是一样的。 – 2015-02-11 06:39:58

回答

0

好的,发现问题并修复。

我的步骤如下:

apt-get install apache2-suexec-custom 
a2enmod suexec 
/etc/init.d/apache2 reload 

然后去网站Apache的配置,并在这里添加SuexecUserGroup asterisk asterisk 星号是我没有运行命令的权限使用。

然后转到/etc/apache2/suexec/www-data,您将看到2条未注释行。我们需要为cgi-bin的cgi-bin和别名路径提供正确的绝对路径。默认情况下它有/var/wwwpublic_html/cgi-bin

就是这样。这解决了我的问题。

+0

https://httpd.apache.org/docs/2.4/howto/cgi.html建议不要使用suexec,除非你“知道你在做什么“(我从来没有这样做)。 – barrycarter 2017-05-31 12:28:38

相关问题