用c写cgi程序,不能在cgi程序中执行shell命令
用c写cgi程序,不能在cgi程序中执行shell命令
我用c写的cgi程序,想再cgi程序中用system执行一个shell命令,在后台直接运行可以执行,但是从网页点击按钮来触发这个cgi程序,发现system不能执行shell命令,这是为什么
从网页上访问执行的人的权限属于nobody
如果nobody用户没有执行权限的话 当然是执行不了。
我在apache的httpd.conf里改成
User root
Group root
那所有访问该网站的人都具有了root权限?你试试就知道了 事实上不是那样!
按我知道的 这样指定用户 一般都是以该用户来启动或者调度该程序
和你从外界访问不是一回事
我估计这样是可以的 比如在系统里username用户可以执行your-cgi
#chown username.username your-cgi
#chmod a+x your-cgi
#chmod u+s your-cgi
把所有要执行的system()写到库函数中。然后让cgi程序调用这个库函数就可以了。
注意库函数文件需要有相应的权限。
例如:
把函数
C/C++ code?123456 void ls(char *path) { char cmd[1024]; sprintf(cmd,"ls %s",path); system(cmd); }
编译成libmysystem.so文件。在CGI程序中这样使用:
C/C++ code?123456789 int main(int argc,char **argv) { printf("Content-type:text/html\n\n"); printf("<html>"); printf("<body>"); ls("/usr"); printf("</body>"); printf("</html>"); }
然后编译:
gcc cgi.c -o cgi -lmysystem