mini_httpd+cgi运行iptables等需要root权限的程序或脚本

最近项目需求移植了一个mini_httpd做嵌入式服务器,需要在网页里进行重启还有修改一些iptable规则,因为用root登录板子,运行一些带有iptables 或者重启的脚本都没问题,一到网页调用cgi程序去用system()或者popen调用外部脚本,却不行,找了很久后发现,是权限问题,在网上找了一圈,踩了许多坑后,终于解决这个问题:

第一步,在cgi程序里,在想用system或者popen调用root权限的命令前加入setuid(0);     ,setuid()这个函数是库函数,大概作用是更改当前运行程序的uid,因为root的uid是0,所以setuid(0)可以把程序用户设成root,这个函数只要包含几个头文件就行了,可以网上找一下,我这里包含了这几个头文件,懒得找可以直接复制:


#include <sys/types.h>

#include <stdlib.h>

#include <unistd.h>


第二步,在mini_httpd的配置文件mini_httpd.conf文件里,加入一行:

user=root

第三步,重启mini_httpd服务: 路径/mini_httpd -C 路径/mini_httpd.conf

重新编译cgi程序,放到板子上就可以了,就这么简单,但是花了我好几个小时。。。。经过测试,cgi程序可以通过system() 或者popen调用reboot或者iptables这种需要root权限的指令,因为就是通过root来运行的。

 

完。。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值