私が知る限り、Linux機能はプロセス/ファイルベースで定義されています。しかし、 capsh --print を実行すると、ユーザーの能力が表示されます。
それでは、capsh --printは正確に何をするのでしょうか?能力は、ユーザーではなくプロセスでのみ定義されますか?
答え1
capsh
libcap
提供されている機能とAPIを使用して確認する方法を調べるためのツールです。デバッグに使用できます。いつ何が起こるのかあらゆる種類の質問。
の重要な属性capsh
は、引数を左から右に厳密に評価することです。したがって、何かが目的の場所にない理由を特定しようとするときは、パラメータを--print
挿入してそれを見つけることができます。--print
実行中のプロセスの現在の状態を出力するだけですcapsh
。
機能に関連する機能を備えた一種のスイス軍用ナイフと考えるべきです。ツリーを作成してlibcap
使用するquicktest.sh
ライブラリが最新のカーネルなどで動作し続けていることを確認してください。スクリプトには、libcap
カーネル関数を使用したさまざまな操作例と予想される結果が含まれています。
これには環境機能はもちろん、非標準カーネル動作モード(別名libcap
モデル)。
たとえば、次の 2 つのシーケンスは、カーネルの動作方法によって異なる結果を生成します。
$ sudo capsh --iab=^cap_dac_override --user=$(whoami) --print
$ sudo capsh --user=$(whoami) --iab=^cap_dac_override --print
次の質問に自動的に答えることができます。これは環境を少し改善しますか?このような:
$ sudo capsh --user=$(whoami) --iab=^cap_dac_override --has-a=cap_dac_override && echo yes
また、世界を探索したいならPOSIX.1eドラフト委員会は、次のことを試すことができると想像しています。
$ sudo capsh --mode=PURE1E --user=$(whoami) --
答え2
単純な。これはユーザー機能ではありません。これはそれ自体の能力です。だから親から受け継いだのです。
私は(数年前)私たちが議論し、capsh
それが何のためであるかを調べようとしたことを思い出します。私たちはそれがほとんど役に立たないと考え、議論を通して周辺関数(継承され有効)の発明が行われました。capsh
環境機能が存在したため、これを試していませんでした。これは、一連のsudo
機能(例:)を作成する場合にのみ必要ですcapsh
。あるいは、時にはより専門的な包装が可能です。