Linux capabilities

root権限を細かく分割して,特定の権限のみを与えるためのもの. root権限が必要な操作を含む場合,本来ならば当然root権限で実行する必要があるが, その実行は本来必要でない操作への権限(root権限なのでね)も持ってしまっているため, もし脆弱性があった場合非常に危険であるが, これを使うとその問題が避けられる

  • CAP_DAC_OVERRIDE ファイルの read, write, execute パーミッションのチェックをバイパスする。

  • CAP_DAC_READ_SEARCH ファイルの read とディレクトリの read と execute のパーミッションチェックをバイパスする。

  • CAP_KILL シグナルを送るときの権限チェックをバイパスする。

  • CAP_NET_BIND_SERVICE 特権ポートにソケットをバインドできる。

  • CAP_SYS_TIME システムの時刻を設定できる。.

File capabilities

実行ファイルに capabilities を持たせる方法. 注意点として, この方法だと起動したユーザによらずプロセスがcapabilitiesを持つことになる.

CAP_NET_BIND_SERVICEを与える例

$ sudo setcap 'cap_net_bind_service=+ep' [path to file]
$ getcap [path to file]
[path to file] = cap_net_bind_service+ep

Ambient capabilities

init(=systemd として良いのか?)から起動するようなプロセス(デーモン)に対して capabilitiesを持たせる方法.

参照

http://matope.hatenablog.com/entry/2014/09/28/031155 https://nojima.hatenablog.com/entry/2016/12/03/000000 https://linuxjm.osdn.jp/html/LDP_man-pages/man7/capabilities.7.html https://source.android.com/devices/tech/config/ambient