web-dev-qa-db-ja.com

setcapコマンドで機能を設定する方法は?

Wpa_supplicantとopenvpnをセットアップして、root以外のユーザーとして実行したいwiresharkの推奨セットアップのようにしたい。この例の+eipが何を意味するかについてのドキュメントは見つかりません。

Sudo setcap cap_net_raw,cap_net_admin,cap_dac_override+eip /usr/bin/dumpcap
10
T0m4t0s4uc3

Linuxでの機能の仕組みは man 7 capabilities

プロセスの機能有効なセットでは、これに対して権限チェックが実行されます。 ファイル機能execv呼び出し中に使用されます(これは別のプログラムを実行したいときに起こります1)プロセスの新しい機能セットを計算します。

ファイルには、permittedおよびinheritableおよび実効ビットの2つの機能セットがあります。

プロセスには3つの機能セットがあります:effectivepermittedおよび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_rawcap_net_adminおよびcap_dac_overrideinheritedおよびpermittedセットに追加され、effectiveビットが設定されます。バイナリが実行されると、プロセスは、実効および許可セットでこれらの機能を持ちます(境界セットによって制限されていない場合)。 。

[1]forksyscallの場合、すべての機能と境界セットが親プロセスからコピーされます。 uidの変更には、effectiveおよびpermittedセットでの機能の設定方法にも独自のセマンティクスがあります。

10
sebasth