web-dev-qa-db-ja.com

setcapを使用する場合、権限はどこに保存されますか?

バイナリに追加のアクセス許可を与えるためにsetcapを使用すると、ストレージまたはメモリのどこかに新しいアクセス許可が書き込まれ、どこに保存されますか?

lsofをそのまま使用しても、プロセスがすぐに消えてしまうため機能しません。

11
Zulgrib

setfaclによって設定されるアクセス制御リストやsetcapによって設定される機能フラグなどの拡張権限は、従来の権限とchmodによって設定されるset [ug] idフラグと同じ場所に保存されます:ファイルのiノード内。

(それらは実際にはディスク上の別のブロックに格納されている可能性があります。これは、iノードのサイズが固定されているため、従来のアクセス許可ビットには十分ですが、無制限の拡張アクセス許可には対応していません。しかし、それが必要になるのはまれなケースだけです。 setcapでディスク領域が不足する可能性があることに注意してください。ただし、重複排除を使用するシステムでは、chmodでもディスク領域が不足する可能性があります!)

GNU lsはファイルのsetcap属性を表示しません。 getcap で表示できます。 _getfattr -d -m -_ ;を使用して、すべての拡張属性をリストできます。 setcap属性は_​​security.capability_と呼ばれ、getcapがデコードするバイナリ形式でエンコードされます。

setcapは、ファイルシステム拡張属性に格納されているファイル機能を設定します。これらは man 7 capabilities で説明されています:

ファイル機能セットは、security.capabilityという名前の拡張属性(setxattr(2)を参照)に格納されます。

/proc/PID/statusCapInh/CapPrm/CapEffフィールドを調べることで、実行中のプロセスの機能を検査できます。機能がプロセスに適用される方法の説明については、「setcapコマンドで機能を設定する方法?」に対する私の回答を参照してください。幹部。

4
sebasth