Wpa_supplicantとopenvpnをセットアップして、root以外のユーザーとして実行したいwiresharkの推奨セットアップのようにしたい。この例の+eip
が何を意味するかについてのドキュメントは見つかりません。
Sudo setcap cap_net_raw,cap_net_admin,cap_dac_override+eip /usr/bin/dumpcap
Linuxでの機能の仕組みは man 7 capabilities
。
プロセスの機能有効なセットでは、これに対して権限チェックが実行されます。 ファイル機能はexecv呼び出し中に使用されます(これは別のプログラムを実行したいときに起こります1)プロセスの新しい機能セットを計算します。
ファイルには、permittedおよびinheritableおよび実効ビットの2つの機能セットがあります。
プロセスには3つの機能セットがあります:effective、permittedおよびinheritable。境界セットもあります。これは、処理の継承セットに後で追加できる機能を制限し、execv中に機能を計算する方法に影響を与えます。機能は境界セットからのみドロップでき、追加できません。
プロセスの権限チェックは、プロセスの実効セットに対してチェックされます。プロセスはその機能をpermittedからeffective set(using capget および capset syscalls、推奨APIはそれぞれ cap_get_procです および cap_set_proc )。
継承可能および境界セットおよびファイル機能がexecvsyscall。 execv中に、新しい実効および許可されたセットが計算され、継承セットと境界セットは変更されません。アルゴリズムはcapabilities
のmanページで説明されています:
P'(permitted) = (P(inheritable) & F(inheritable)) | (F(permitted) & cap_bset) P'(effective) = F(effective) ? P'(permitted) : 0 P'(inheritable) = P(inheritable) [i.e., unchanged]
ここで、[〜#〜] p [〜#〜]は古い機能セットであり、-P 'はexecvの後に機能セットですおよび[〜#〜] f [〜#〜]はファイル機能セットです。
機能が両方のプロセスにある場合inheritableセットとファイルのinheritableセット(intersection/logical AND)は許可されたセット。ファイル許可されたセットが追加されます(ユニオン/論理OR)(バウンディングセット内にある場合)。
ファイル機能の有効ビットが設定されている場合、すべての許可機能が実効execvの後.
カーネルの機能は実際にはスレッドに対して設定されますが、ファイルの機能に関しては、この区別は通常、プロセスが独自の機能を変更する場合にのみ関連します。
あなたの例の機能ではcap_net_raw
、cap_net_admin
およびcap_dac_override
がinheritedおよびpermittedセットに追加され、effectiveビットが設定されます。バイナリが実行されると、プロセスは、実効および許可セットでこれらの機能を持ちます(境界セットによって制限されていない場合)。 。
[1]forksyscallの場合、すべての機能と境界セットが親プロセスからコピーされます。 uidの変更には、effectiveおよびpermittedセットでの機能の設定方法にも独自のセマンティクスがあります。