当前位置: 技术问答>linux和unix
请问守护进程代码里面加入system()命令行,可以执行吗?
来源: 互联网 发布时间:2016-09-22
本文导语: (void)system("sudo iptables -F"); (void)system("sudo iptables -t nat -F"); //将iptables原有的规则清空 (void)system("echo 1 |sudo tee /proc/sys/net/ipv4/ip_forward"); (void)system("sudo iptables -t nat -A POSTROUTING -o wlan0 -j M...
(void)system("sudo iptables -F");
(void)system("sudo iptables -t nat -F"); //将iptables原有的规则清空
(void)system("echo 1 |sudo tee /proc/sys/net/ipv4/ip_forward");
(void)system("sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE");//以上两句实现对通过wlan0的包进行路由
(void)system("sudo iptables -t filter -A FORWARD -i eth0 -j DROP");//阻止eth0的所有包接入外网
我在守护进程的代码里面加了几句命令行,但是发现根本没起作用,但是在终端模式下是可以实现功能的,想问以下守护进程可以执行system命令行吗?或者又什么不一样的地方。
(void)system("sudo iptables -t nat -F"); //将iptables原有的规则清空
(void)system("echo 1 |sudo tee /proc/sys/net/ipv4/ip_forward");
(void)system("sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE");//以上两句实现对通过wlan0的包进行路由
(void)system("sudo iptables -t filter -A FORWARD -i eth0 -j DROP");//阻止eth0的所有包接入外网
我在守护进程的代码里面加了几句命令行,但是发现根本没起作用,但是在终端模式下是可以实现功能的,想问以下守护进程可以执行system命令行吗?或者又什么不一样的地方。
|
我刚刚测试了一下 重启xinetd的时候 micro_httpd没有执行
关于xinetd是怎样守护程序的 还有待研究
只有从页面访问的时候 micro_httpd才执行了 这时候才调用了system()
你作为访问者 对于系统来说 你的身份应该是nobody 肯定不是root
你想想 任何一个访问你网站的人 在网站上做的操作和请求都是root权限级别的
那你的系统还有什么安全性可言
所以
system("echo 1 > /tmp/temp.txt");可以成功
而
system("/sbin/iptables xxxx"); 就没有权限了
关于xinetd是怎样守护程序的 还有待研究
只有从页面访问的时候 micro_httpd才执行了 这时候才调用了system()
你作为访问者 对于系统来说 你的身份应该是nobody 肯定不是root
你想想 任何一个访问你网站的人 在网站上做的操作和请求都是root权限级别的
那你的系统还有什么安全性可言
所以
system("echo 1 > /tmp/temp.txt");可以成功
而
system("/sbin/iptables xxxx"); 就没有权限了
|
这个我没弄过 也只能猜测了
这个东西是怎么样一个执行流程我也不知道。
你就在开始先只加一句来测试一下
system("echo 1 >/tmp/tmp.txt");
然后重启程序 看看/tmp下有没有tmp.txt文件
这个东西是怎么样一个执行流程我也不知道。
你就在开始先只加一句来测试一下
system("echo 1 >/tmp/tmp.txt");
然后重启程序 看看/tmp下有没有tmp.txt文件
|
我判断它执行不执行的依据是跟我eth0连接的客户端还能不能上网,如果不能上网的话,就是命令行生效了,而刚才一直都是可以上网。
修改了echo的路径之后,客户端在没有认证之前还是可以上网的
---------------------------------------
你不要这样来判断 我看你只在操作forward链 根本没操作INPUT和OUTPUT 但我没有读你的防火墙设置到底是不是有这样的功能
在执行下你的程序 然后用/sbin/iptables -L 来确认!
修改了echo的路径之后,客户端在没有认证之前还是可以上网的
---------------------------------------
你不要这样来判断 我看你只在操作forward链 根本没操作INPUT和OUTPUT 但我没有读你的防火墙设置到底是不是有这样的功能
在执行下你的程序 然后用/sbin/iptables -L 来确认!