普通用户一般不需要去开关网络接口, 特殊情况下,需要普通用户拥有这一权力,例如ppp/vpn之类的,
例如我们需要用户能开启关闭一个网络接口eth1
需要编辑/etc/sysconfig/network-scripts/ifcfg-eth1
设置USERCTL为yes, 如下:
PROTO=static
DEVICE=eth1
ONBOOT=yes
IPADDR=192.168.137.137
NETMASK=255.255.255.0
TYPE=Ethernet
BOOTPROTO=none
USERCTL=yes
PREFIX=24
GATEWAY=192.168.137.1
DNS1=192.168.137.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME=eth1
UUID=9c92fad9-6ecb-3e6c-eb4d-8a47c6f50c04
LAST_CONNECT=1404040062
普通用户即可用 ifup eth1 / ifdown eth1 来开关网络接口
有时候设置了
ONBOOT=yes
但是还不能开机自动连接网络,可以在 /etc/rc.local 里加入 /sbin/ifup eth0
原理:
普通用户通过ifup/ifdown 操作网络接口时, 会调用 /usr/sbin/usernetctl, 这个程序是setuid的程序,
usernetctl 检查配置文件中USERCTL变量的值,如果为真,则允许普通用户进行up/down之类的简单操作.
如下:
if [ ${UID} != 0 ]; then
if [ -x /usr/sbin/usernetctl ]; then
source_config
if /usr/sbin/usernetctl ${CONFIG} report ; then
exec /usr/sbin/usernetctl ${CONFIG} up
fi
fi
echo $"Users cannot control this device." >&2
exit 1
fi
(参见: /etc/sysconfig/network-scripts/ifup )
转载自:http://hi.baidu.com/zypublic111