capability (ケイパビリティ)

標準テキスト CentOS 7 構築・運用・管理パーフェクトガイド』を一通り読んでみたがよくわからないので、ググってみたところ『いますぐ実践! Linux システム管理/Vol.183』というサイトがヒットした。

Linuxのシステムコールと密接に絡んでいるらしく、コマンドヒッターの私には少々つらい。(>_<)
両者を読み進めながら理解に励んでみる。

ケーパビリティを操作するためのコマンド

■getap
ケイパビリティの表示
■setcap
ケイパビリティの設定

それから、uname -rでカーネルのバージョンが調べられるらしい。

$ uname -r
3.10.0-514.26.2.el7.x86_64

ケーパビリティの理解とはまったく関係ないが、こういった小粒のコマンドを覚えると自分が成長した気がする。

ちなみに、Ubuntu 16.04デスクトップでこのコマンドを撃ちこんだら、

$ uname -r
4.4.0-93-generic

と出た。

さて、本題に入ろう。

理解メモ

■ざっくりとした理解
rootプロセスが持っている権限を小分けにして非rootプロセスに与え、非rootプロセスでもrootプロセスみたいな(超アバウト)ことをできるようにするための機能。

■もっとざっくりとした理解
ケーパビリティを付与したり削除したりすると、一般ユーザーとrootユーザーとでコマンドがアクセスできるファイルを違えることができる。

(例)
rootユーザーはls /rootを実行することができるが、一般ユーザーはls /rootを実行しても/rootにアクセスすることができないようにする。

プロセスに与えられる権限は、実行ユーザーIDによって決まる。
ケイパビリティは、スレッド単位で与えることが出来る。
CentOS 7には、37種類のケイパビリティがある。

■ケーパビリティセットには、プロセスに与えるものとファイルに与えるものがある。
Permitted
Inheritable
Effective

実効ユーザーがrootのプロセスは、すべてのケーパビリティを持っている。
実効ユーザーがrootでないプロセスは、ケーパビリティをひとつも持っていない。

ケーパビリティ:37ビットのビット列の各ビットのこと
ケーパビリティセット:ケーパビリティをひとまとめにしたもの。要するに32ビットのビットデータ。