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
、アンビエントがない場合(本来のように)の用途です。私は何が欠けています。用途が必要です。
capsh
collab-maintリポジトリから取得しても「最新」capsh
は提供されませんでしたが、Debianパッケージはまだアンビエント機能をサポートしていません。アップストリーム2.27はサポートします。