Debian Gnu / Linuxで機能を試しています。
/ bin / pingを現在の作業ディレクトリにコピーしました。予想通り動作しませんが、元々はsetuidルートでした。
次に、を実行してpingに最小限の機能(rootではない)を付与し、pingは正常に機能しsudo /sbin/setcap cap_net_raw=ep ./pingます。
次にsudo /sbin/setcap -r ./ping、その機能を無効にします。現在、期待どおりに動作していません。
を使用してpingを動作させようとしていますcapsh。 
capsh には特権がないため、rootとして実行する必要がありますが、rootを削除して、他のすべての特権を削除します。
私も必要だと思いますがsecure-keep-caps、これはに記載されていませんcapshが、機能マニュアルに記載されています。からビット番号を取得しました/usr/include/linux/securebits.h。の出力--printはこれらのビットが正しいことを示しているため、それらは正しいように見えます。
私は何時間もいじっていましたが、これまでのところこれがあります。
sudo /sbin/capsh  --keep=1 --secbits=0x10  --caps="cap_net_raw+epi" == --secbits=0x10 --user=${USER} --print -- -c "./ping localhost"
ただし、のpingエラーping: icmp open socket: Operation not permittedは、機能がない場合に発生することです。また--print番組ではCurrent: =p cap_net_raw+i、これは十分に私たちの必要性ではありませんe。
sudo /sbin/capsh    --caps="cap_net_raw+epi" --print -- -c "./ping localhost"Current: = cap_net_raw+eipこれは正しい機能に設定されますが、そのままにしておきますroot。
編集-1
私は今試しました sudo /sbin/capsh --keep=1 --secbits=0x11  --caps=cap_net_raw+epi  --print -- -c "touch zz; ./ping -c1 localhost;"
これにより、以下が生成されます。
touch: cannot touch `zz': Permission denied
ping: icmp open socket: Operation not permitted
最初のエラーは次のように予想されますがsecure-noroot: yes
、2番目のエラーはCurrent: = cap_net_raw+eip
編集-2
私が入れた場合==の前に--print、それ今ショーCurrent: = cap_net_raw+iそれは前のエラーを説明したが、根の外に切り替えるときに、なぜ私たちは機能を失うされていないので、私はそれはしかしsecure-keep-capsそれを修正する必要があります。
編集-3
私が見ることができるものから、私はexecが呼び出されたときにEffective(e)とPermitted(p)を失います。これは予想されていますが、安全なキープキャップは失われないようにする必要があると考えました。私は何かが欠けていますか。
編集-4
私はより多くの研究を行っており、マニュアルをもう一度読みました。通常e、次のp場合に機能が失われるようです:ユーザーから切り替えるroot(または、apply secure-noroot、つまりrootを通常のユーザーにする)場合、これをオーバーライドできますsecure-keep-caps; を呼び出すとexec、これは不変であると言えます。
私が知る限り、それはマニュアルに従って動作しています。私が知る限り、役に立つことをする方法がありませんcapsh。私が知る限り、機能を使用するには、ファイル機能を使用するか、機能を認識できるプログラムを使用する必要がありますexec。したがって、特権ラッパーはありません。
だから今、私の質問は、私が何を失い、何のcapshためにあるのかということです。
編集-5
アンビエント機能に関する回答を追加しました。たぶんcapshも継承された機能で使用することができますが、これらは、実行可能ファイルに設定する必要が有用であること。capshがアンビエント機能なしで、または継承された機能を許可するために有用なことをどのように実行できるかはわかりません。
バージョン:
- capshパッケージ- libcap2-binバージョンから- 1:2.22-1.2
- edit-3の前に、最新のcapshものgit://git.debian.org/collab-maint/libcap2.gitを入手して使用し始めました。
- uname -a- Linux richard-laptop 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linuxユーザーランドは32ビットです。
capsh、アンビエントがない場合(本来のように)の用途です。私は何が欠けています。用途が必要です。
                
capshcollab-maintリポジトリから取得しても「最新」capshは提供されませんでしたが、Debianパッケージはまだアンビエント機能をサポートしていません。アップストリーム2.27はサポートします。