Linux:如果既没有设置SETUID也没有设置功能,为什么我可以使用ping?
我想我已经掌握了文件权限和功能的基本知识。 但是现在-那是什么 1。确认没有设置SETUID位:Linux:如果既没有设置SETUID也没有设置功能,为什么我可以使用ping?,linux,file-permissions,acl,ping,linux-capabilities,Linux,File Permissions,Acl,Ping,Linux Capabilities,我想我已经掌握了文件权限和功能的基本知识。 但是现在-那是什么 1。确认没有设置SETUID位: $ ll /bin/ping -rwxr-xr-x 1 root root 72776 Jan 31 00:11 /bin/ping* $ getcap /bin/ping /bin/ping = $ strace -e socket ping google.com socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP) = 3 socket(AF_INET6, SO
$ ll /bin/ping
-rwxr-xr-x 1 root root 72776 Jan 31 00:11 /bin/ping*
$ getcap /bin/ping
/bin/ping =
$ strace -e socket ping google.com
socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP) = 3
socket(AF_INET6, SOCK_DGRAM, IPPROTO_ICMPV6) = 4
socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 5
socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 5
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 5
socket(AF_NETLINK, **SOCK_RAW**|SOCK_CLOEXEC, NETLINK_ROUTE) = 5
2。验证没有设置任何功能:
$ ll /bin/ping
-rwxr-xr-x 1 root root 72776 Jan 31 00:11 /bin/ping*
$ getcap /bin/ping
/bin/ping =
$ strace -e socket ping google.com
socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP) = 3
socket(AF_INET6, SOCK_DGRAM, IPPROTO_ICMPV6) = 4
socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 5
socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 5
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 5
socket(AF_NETLINK, **SOCK_RAW**|SOCK_CLOEXEC, NETLINK_ROUTE) = 5
3。使用ping键
$ /bin/ping google.com
PING google.com(qro01s18-in-x0e.1e100.net (2607:f8b0:4012:80a::200e)) 56 data bytes
64 bytes from qro01s18-in-x0e.1e100.net (2607:f8b0:4012:80a::200e): icmp_seq=2 ttl=120 time=418 ms
64 bytes from qro01s18-in-x0e.1e100.net (2607:f8b0:4012:80a::200e): icmp_seq=3 ttl=120 time=102 ms
4。验证原始套接字是否已打开:
$ ll /bin/ping
-rwxr-xr-x 1 root root 72776 Jan 31 00:11 /bin/ping*
$ getcap /bin/ping
/bin/ping =
$ strace -e socket ping google.com
socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP) = 3
socket(AF_INET6, SOCK_DGRAM, IPPROTO_ICMPV6) = 4
socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 5
socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 5
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 5
socket(AF_NETLINK, **SOCK_RAW**|SOCK_CLOEXEC, NETLINK_ROUTE) = 5
>那么为什么/bin/ping允许或能够在没有SETUID或cap\u net\u RAW的情况下打开袜子呢?
注意:我当然不是在尝试!
我正在使用Linux Mint Ulyana。创建(正常)ICMP数据包不再需要特殊权限。你可以用
socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP) = 3
socket(AF_INET6, SOCK_DGRAM, IPPROTO_ICMPV6) = 4
套接字(来自4中的日志)
您在中标记的SOCK\u RAW
socket(AF_NETLINK, **SOCK_RAW**|SOCK_CLOEXEC, NETLINK_ROUTE) = 5
是NETLINK套接字,用于检查是否可以使用IPv6(使用“-4”或“-6”调用“ping”以查看差异)。这些类型的套接字也不需要特殊权限。因此ping实际上不再需要特权或功能。。。谢谢你,ensc!