默认情况下,用PERL写的CGI,是不可以调用某些系统管理命令的,比如iptables,近日开发一网关,要求Perl调用iptables实现网络配置,本来打算用SuidPerl实现Perl调用iptables的,但发现那网关系统上没有SuidPerl,而且不带编译器,无法编辑同版本的Suidperl。
最后想一办法,用C写程序,把C程序设成suid程序,把ipables命令做为这个C程序的参数调用,成功的解决了这一问题。
C程序大概如下:
#include <string.h>
...(ipaddr,admin.net(at)163.com)
int main(int argv,char * argc[])
{
.....
return (system(argc[1]));
}
gcc syscommand.c
chmod a+x syscommand
chmod a+s syscommand
chown root.root syscommand
mv syscommand /sbin/
Perl里面这样调用iptables:
system("/sbin/syscommand 'iptables -L'");
以上思路经测试成功,一直漂原创,转载请注明。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
最后想一办法,用C写程序,把C程序设成suid程序,把ipables命令做为这个C程序的参数调用,成功的解决了这一问题。
C程序大概如下:
#include <string.h>
...(ipaddr,admin.net(at)163.com)
int main(int argv,char * argc[])
{
.....
return (system(argc[1]));
}
gcc syscommand.c
chmod a+x syscommand
chmod a+s syscommand
chown root.root syscommand
mv syscommand /sbin/
Perl里面这样调用iptables:
system("/sbin/syscommand 'iptables -L'");
以上思路经测试成功,一直漂原创,转载请注明。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>