请教一个CGI编程的问题

请教一个CGI编程的问题

我的CGI需要运行root权限的命令iptables,我从论坛前面的帖子看到可以用sudo. 但是我修改sudoers文件之后,sudo好像不起作用。

我是这么修改的:
apache  ALL=(ALL)     NOPASSWD: ALL
nobody  ALL=(ALL)     NOPASSWD: ALL

CGI 程序还是不能运行iptables命令。请叫一下高手这是什么原因?
在线等,哪为牛人帮手一下!谢谢!
sudo是ubuntu的命令吧?
这个命令不是只限于 ubuntu的


QUOTE:
原帖由 asdman 于 2007-5-6 10:03 发表
我的CGI需要运行root权限的命令iptables,我从论坛前面的帖子看到可以用sudo. 但是我修改sudoers文件之后,sudo好像不起作用。

我是这么修改的:
apache  ALL=(ALL)     NOPASSWD: ALL
nobody  ALL=(ALL)   ...

其实你这应该是一个shell版问题,检查两点:
1. apache是以什么用户执行的,用ps查看一下吧
2. 执行iptables时是否用了全路径
我的apache是用 apache用户运行的。我的CGI代码如下:

#!/usr/bin/perl -w

@lines =`/usr/bin/sudo /sbin/iptables -L`;
print "Content-type: text/html\n\n";
print "";

print <<END_OF_HTML
<html><head><title>Sudo</title></head>
<body>
<p>
@lines
</p>
<p>haha</p>
</body>
</html>
END_OF_HTML

我想输出现有的iptable配置,但是没有输出。
总算找到原因了!因为我用的是FC版本的linux,启动了SELinux机制,所以sudo被限制使用了!
解决方法是禁止SELinux机制:

edit /etc/selinux/config and change the SELINUX line to SELINUX=disabled
1、关闭/etc/selinux/config SELINUX=disabled
2、设置visudo  
   注释#Defaults    requiretty
   Rico  ALL=(ALL) NOPASSWD: /sbin/iptables
   Defaults:Rico !authenticate