擅长:python、mysql、java
<p>现代Linuxes ping使用libcap并要求libcap执行此操作。此操作检查(capget/set函数)和管理权限:</p>
<pre><code>linux@jacax:~/WORK$ ldd /bin/ping
linux-gate.so.1 => (0xb77b6000)
libcap.so.2 => /lib/i386-linux-gnu/libcap.so.2 (0xb7796000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75e7000)
/lib/ld-linux.so.2 (0xb77b7000)
</code></pre>
<p>假设你有一个“myping”程序:</p>
<pre><code>linux@jacax:~/WORK$ getcap ./myping
linux@jacax:~/WORK$ (-> nothing! )
linux@jacax:~/WORK$ setcap cap_net_raw=ep ./myping
unable to set CAP_SETFCAP effective capability: Operation not permitted
linux@jacax:~/WORK$ sudo setcap cap_net_raw=ep ./myping
</code></pre>
<p>现在做:</p>
<pre><code>linux@jacax:~/WORK$ getcap ./myping
./ping = cap_net_raw+ep
</code></pre>
<p>现在,你的“myping”将在没有根的情况下工作。也就是说,只要<code>myping</code>实际上是一个二进制程序。如果是脚本,则必须在脚本解释器上设置此功能。</p>