Sam*_*hen 5 permissions networking
我是根。
ping 127.0.0.1 并返回错误;
root@sam-PC:~# ping 127.0.0.1
socket: Permission denied
root@sam-PC:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:00:ff:ff:00:00
inet addr:192.168.100.104 Bcast:192.168.100.255 Mask:255.255.255.0
inet6 addr: fe80::200:ffff:feff:0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:36 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2220 (2.2 KB) TX bytes:524 (524.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:40 errors:0 dropped:0 overruns:0 frame:0
TX packets:40 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3160 (3.1 KB) TX bytes:3160 (3.1 KB)
root@sam-PC:~# ping 192.168.100.100
socket: Permission denied
Run Code Online (Sandbox Code Playgroud)
谁知道为什么?
小智 3
对于这个问题,我们应该添加以下几行/etc/group:
inet:x:3003:root
net_raw:x:3004:root
Run Code Online (Sandbox Code Playgroud)
小智 0
底层 ping 使用 sock_raw。要创建这样的套接字,您必须具有 root 权限。
int main(void) {
rawsock = socket(AF_INET, SOCK_RAW, protocol->p_proto);
if(rawsock < 0){
perror("socket");
return -1;
}
}
Run Code Online (Sandbox Code Playgroud)
如果 ping 的所有者不是 root,则该错误将无法修复。使用linux能力机制并不能解决问题。