setcapコマンドを使用して機能を設定するには?

setcapコマンドを使用して機能を設定するには?

wpa_supplicantを設定したいです。オープンVPN推奨設定と同様に、root以外のユーザーとして実行します。ラインシャーク+eipこの例では、これが何を意味するのかを説明する文書が見つかりません。

sudo setcap cap_net_raw,cap_net_admin,cap_dac_override+eip /usr/bin/dumpcap

答え1

Linuxで機能がどのように機能するかについては、次の記事で説明します。man 7 capabilities

プロセス能力内部に有効なセットどちらに反対するのか権限の確認終わる。ファイル機能使用中プログラムの実行プロセスの新機能セットを計算するために呼び出されます(他のプログラムを実行したい場合は1が発生します)。

ファイルには2つの機能セットがあります。許可されたそして継承可能そして有効なビット

プロセスには3つの機能セットがあります。効果的な許可されたそして継承可能。後でプロセスの継承セットに追加できる機能を制限し、呼び出し中に機能がどのように計算されるかに影響を与える境界セットもあります。プログラムの実行。能力は以下からのみ得ることができます。境界セット、追加されていません。

プロセスに対する権限の確認は、プロセスに対して確認されます。有効なセット。プロセスは、以下を介して機能を向上させることができます。許可された到着有効なセット(使用 カーゲットそしてキャップsyscallsで推奨されるAPIは次のとおりです。cap_get_procそしてキャップ設定プロセス)。

継承可能そして境界ジホファイル機能しながら役割を果たすプログラムの実行システムコール。期間プログラムの実行、新しい効果的なそして許可されたセットを計算し、遺伝学そして境界セットは変更されません。アルゴリズムはマニュアルページに記載されていますcapabilities

P'(permitted) = (P(inheritable) & F(inheritable)) |
                (F(permitted) & cap_bset)

P'(effective) = F(effective) ? P'(permitted) : 0

P'(inheritable) = P(inheritable)    [i.e., unchanged]

どこ以前の機能セットです。後で設定する機能です。プログラムの実行そしてFファイル機能のセットです。

同時に、2つのプロセスに能力がある場合継承可能設定とファイル継承可能次に追加されるセット(クロス/論理AND)許可されたセット。文書許可されたセット(境界セットにある場合)ここに(和集合/論理OR)を追加します。

もし有効なビットファイル機能設定ですべて許可された能力が次に増加しました。効果的な後ろにプログラムの実行

カーネルの関数は実際にはスレッドに対して設定されますが、ファイル関数の場合、これらの区別は通常、プロセスが独自の機能を変更する場合にのみ関連します。

あなたのサンプル関数からcap_net_rawとが追加されますcap_net_admincap_dac_override遺伝学そして許可されたジホ効果的なビットがセットされました。バイナリが実行されると、プロセスは次のようになります。効果的なそして許可された境界セットによって制限されない場合はセットされます。

[1]クロスシステムコール、すべての関数、および境界セットは親プロセスからコピーされます。 uidへの変更には、関数の設定方法に固有の意味もあります。効果的なそして許可されたセット。

答え2

ファイルを設定する機能

sudo setcap 'cap_net_bind_service=ep' file_name

1つのファイルに複数の機能を設定する

sudo setcap 'cap_net_bind_service=ep cap_sys_admin=ep' file_name

ファイルからすべての機能を削除します。

sudo setcap -r file_name

ファイルの機能を確認してください

getcap file_name

可能な機能のリスト(一部は非常に興味深い)

https://linux.die.net/man/7/capability

罠:設定機能は実際にはスクリプトでは機能しません。 Pythonスクリプトを正しく機能させるには、Python実行可能ファイル自体の機能を設定する必要があります。これは理想的ではありません。

メモ: setcapフル機能セットは常にランタイムに適用されます。ほとんどの場合、setcapwith+または-構文を使用する例は混乱してゴミですchmodsetcap単一のコマンドで完了しました。

関連情報