ext3 の ジ ャ ー ナ
ル 機 能 を 制 御
す る ioctl(2) を 使 用
す る 。
デ ィ ス
ク quota の 上 限 を 上
書 き す る 。
限 を 増
や す (setrlimit(2))。
*
RLIMIT_NPROC
リ ソ ー ス 制 限
を 上 書 き す る
。
*
コ ン ソ
ー ル 割 り 当 て
に お い て コ ン
ソ ー ル の 最 大
数 を 上 書 き す
る 。
|
|
|
|
* キ ー マ ッ プ の
最 大 数 を 上 書
き す る 。 |
|
|
* リ ア ル タ イ ム
ク ロ ッ ク か ら
秒 間 |
|
64 回 を 越
え る 回 数 の 割
り 当 て が 許 可
す る 。
|
* メ ッ セ
ー ジ キ ュ ー に
関 す る 上 限 |
|
msg_qbytes を |
|
/proc/sys/kernel/msgmnb
に 指 定 さ れ て
い る 上 限 よ り
も 大 き く 設 定
す る (msgop(2) と msgctl(2)
参 照 )。
|
* |
|
F_SETPIPE_SZ fcntl(2)
を 使 っ て パ イ
プ の 容 量 を 設
定 す る 際 に 上
限 /proc/sys/fs/pipe−size−max
を 上 書 き す る
。 |
|
* |
|
/proc/sys/fs/pipe−max−size に
指 定 さ れ て い
る 上 限 を 超 え
て パ イ プ の 容
量 を 増 や す の
に F_SETPIPE_SZ を 使 用
す る 。 |
|
* |
|
POSIX メ ッ セ ー ジ
キ ュ ー を 作 成
す る 際 に 、 上
限 /proc/sys/fs/mqueue/queues_max を
上 書 き す る
(mq_overview(7) 参 照 )。 |
|
* |
|
prctl(2) PR_SET_MM 操 作
を 使 用 す る 。 |
|
* |
|
CAP_SYS_RESOURCE を 持 っ
た プ ロ セ ス に
よ っ て 最 後 に
設 定 さ れ た 値
よ り も 小 さ な
値 を /proc/PID/oom_score_adj に
設 定 す る 。 |
CAP_SYS_TIME シ
ス テ ム ク ロ ッ
ク を 変 更 す る
(settimeofday(2), stime(2),
adjtimex(2))。 リ ア ル
タ イ ム (ハ ー ド
ウ ェ ア ) ク ロ ッ
ク を 変 更 す る
。
CAP_SYS_TTY_CONFIG
vhangup(2) を
使 用 す る 。 特
権 が 必 要 な 仮
想 端 末 に 関 す
る 各 種 の ioctl(2) 操
作 を 利 用 で き
る 。
CAP_SYSLOG (Linux 2.6.37
以 降 )
|
* 特 権 が 必 要
な |
|
syslog(2) 操 作 を 実
行 で き る 。 ど
の 操 作 が 特 権
が 必 |
要 か に
つ い て の 情 報
は syslog(2) を 参 照
。
|
* |
|
/proc/sys/kernel/kptr_restrict
の 値 が 1 の 場 合
、 /proc や 他 の イ
ン タ ー フ ェ ー
ス 経 由 で 公 開
さ れ て い る カ
ー ネ ル ア ド レ
ス を 参 照 す る
(proc(5) の kptr_restrict の
議 論 を 参 照 )。 |
CAP_WAKE_ALARM (Linux
3.0 以 降 ) シ ス テ ム
を 起 こ す ト リ
ガ ー を 有 効 に
す る (タ イ マ ー
CLOCK_REALTIME_ALARM や
CLOCK_BOOTTIME_ALARM を 設 定
す る )。 過 去 と
現 在 の 実 装 完
全 な 形 の ケ ー
パ ビ リ テ ィ を
実 装 す る に は
、 以 下 の 要 件
を 満 た す 必 要
が あ る :
|
1. 全 て の 特 権 操
作 に つ い て 、
カ ー ネ ル は そ
の ス レ ッ ド の
実 効 ケ ー パ ビ
リ テ ィ セ ッ ト
に 必 要 な ケ ー
パ ビ リ テ ィ が
あ る か を 確 認
す る 。 |
|
2. カ ー ネ ル で 、
あ る ス レ ッ ド
の ケ ー パ ビ リ
テ ィ セ ッ ト を
変 更 し た り 、
取 得 し た り で
き る シ ス テ ム
コ ー ル が 提 供
さ れ る 。 |
|
3. フ ァ イ ル シ ス
テ ム が 、 実 行
可 能 フ ァ イ ル
に ケ ー パ ビ リ
テ ィ を 付 与 で
き 、 フ ァ イ ル
実 行 時 に そ の
ケ ー パ ビ リ テ
ィ を プ ロ セ ス
が 取 得 で き る
よ う な 機 能 を
サ ポ ー ト す る
。 カ ー ネ ル |
2.6.24 よ り
前 で は 、 最 初
の 2つ の 要 件 の
み が 満 た さ れ
て い る 。 カ ー
ネ ル 2.6.24 以 降 で は
、 3つ の 要 件 す
べ て が 満 た さ
れ て い る 。 ス
レ ッ ド ケ ー パ
ビ リ テ ィ セ ッ
ト 各 ス レ ッ ド
は 以 下 の 3種 類
の ケ ー パ ビ リ
テ ィ セ ッ ト を
持 つ 。 各 々 の
ケ ー パ ビ リ テ
ィ セ ッ ト は 上
記 の ケ ー パ ビ
リ テ ィ の 組 み
合 わ せ で あ る
(全 て の ケ ー パ
ビ リ テ ィ が 無
効 で も よ い )。
許 可
(permitted): そ の ス レ
ッ ド が 持 つ こ
と に な っ て い
る 実 効 ケ ー パ
ビ リ テ ィ の 限
定 的 な ス ー パ
ー セ ッ ト で あ
る 。 こ れ は 、
実 効 ケ ー パ ビ
リ テ ィ セ ッ ト
に CAP_SETPCAP ケ ー パ
ビ リ テ ィ を 持
っ て い な い ス
レ ッ ド が 継 承
可 能 ケ ー パ ビ
リ テ ィ セ ッ ト
に 追 加 可 能 な
ケ ー パ ビ リ テ
ィ の 限 定 的 な
ス ー パ ー セ ッ
ト で も あ る 。
許 可 ケ ー パ ビ
リ テ ィ セ ッ ト
か ら 削 除 し て
し ま っ た ケ ー
パ ビ リ テ ィ は
、 (set−user−ID−root プ
ロ グ ラ ム か 、
そ の ケ ー パ ビ
リ テ ィ を フ ァ
イ ル ケ ー パ ビ
リ テ ィ で 許 可
し て い る プ ロ
グ ラ ム を execve(2)
し な い 限 り は )
も う 一 度 獲 得
す る こ と は で
き な い 。 継 承
可 能
(inheritable):
execve(2) を
前 後 で 保 持 さ
れ る ケ ー パ ビ
リ テ ィ セ ッ ト
で あ る 。 こ の
仕 組 み を 使 う
こ と で 、 あ る
プ ロ セ ス が
execve(2) を 行 う 際
に 新 し い プ ロ
グ ラ ム の 許 可
ケ ー パ ビ リ テ
ィ セ ッ ト と し
て 割 り 当 て る
ケ ー パ ビ リ テ
ィ を 指 定 す る
こ と が で き る
。 実 効
(effective): カ
ー ネ ル が ス レ
ッ ド の 権 限 (permission)
を チ ェ ッ ク す
る と き に 使 用
す る ケ ー パ ビ
リ テ ィ セ ッ ト
で あ る 。
fork(2)
で 作 成 さ れ る
子 プ ロ セ ス は
、 親 の ケ ー パ
ビ リ テ ィ セ ッ
ト の コ ピ ー を
継 承 す る 。
execve(2) 中 の ケ ー
パ ビ リ テ ィ の
扱 い に つ い て
は 下 記 を 参 照
の こ と 。
capset(2)
を 使 う と 、 プ
ロ セ ス は 自 分
自 身 の ケ ー パ
ビ リ テ ィ セ ッ
ト を 操 作 す る
こ と が で き る
(下 記 参 照 )。
Linux 3.2
以 降 で は 、 フ
ァ イ ル
/proc/sys/kernel/cap_last_cap で 、
実 行 中 の カ ー
ネ ル で サ ポ ー
ト さ れ て い る
ケ ー パ ビ リ テ
ィ の 最 大 値 を
参 照 で き る 。
こ の 情 報 を 使
っ て 、 ケ ー パ
ビ リ テ ィ セ ッ
ト に 設 定 さ れ
る 可 能 性 が あ
る 最 上 位 ビ ッ
ト を 判 定 す る
こ と が で き る
。 フ ァ イ ル ケ
ー パ ビ リ テ ィ
カ ー ネ ル 2.6.24 以 降
で は 、 setcap(8) を
使 っ て 実 行 フ
ァ イ ル に ケ ー
パ ビ リ テ ィ セ
ッ ト を 対 応 付
け る こ と が で
き る 。 フ ァ イ
ル ケ ー パ ビ リ
テ ィ セ ッ ト は
security.capability と い う
名 前 の 拡 張 属
性 に 保 存 さ れ
る (setxattr(2) 参 照 )。
こ の 拡 張 属 性
へ の 書 き 込 み
に は CAP_SETFCAP ケ ー
パ ビ リ テ ィ が
必 要 で あ る 。
フ ァ イ ル ケ ー
パ ビ リ テ ィ セ
ッ ト と ス レ ッ
ド の ケ ー パ ビ
リ テ ィ セ ッ ト
の 両 方 が 考 慮
さ れ 、 execve(2) 後
の ス レ ッ ド の
ケ ー パ ビ リ テ
ィ セ ッ ト が 決
定 さ れ る 。
3 つ
の フ ァ イ ル ケ
ー パ ビ リ テ ィ
セ ッ ト が 定 義
さ れ て い る 。
許 可
(Permitted) (以 前 の 強
制 (Forced)): ス レ ッ ド
の 継 承 可 能 ケ
ー パ ビ リ テ ィ
に 関 わ ら ず 、
そ の ス レ ッ ド
に 自 動 的 に 認
め ら れ る ケ ー
パ ビ リ テ ィ 。
継 承 可 能
(Inheritable) (以 前 の 許
容 (Allowed)): こ の セ ッ
ト と 、 ス レ ッ
ド の 継 承 可 能
ケ ー パ ビ リ テ
ィ セ ッ ト と の
論 理 積 (AND) が と ら
れ 、 execve(2) の 後
に そ の ス レ ッ
ド の 許 可 ケ ー
パ ビ リ テ ィ セ
ッ ト で 有 効 と
な る 継 承 可 能
ケ ー パ ビ リ テ
ィ が 決 定 さ れ
る 。 実 効
(effective): こ れ は 集
合 で は な く 、 1
ビ ッ ト の 情 報
で あ る 。 こ の
ビ ッ ト が セ ッ
ト さ れ て い る
と 、 execve(2) 実 行
中 に 、 そ の ス
レ ッ ド の 新 し
い 許 可 ケ ー パ
ビ リ テ ィ が 全
て 実 効 ケ ー パ
ビ リ テ ィ 集 合
に お い て も セ
ッ ト さ れ る 。
こ の ビ ッ ト が
セ ッ ト さ れ て
い な い 場 合 、
execve(2) 後 に は 新
し い 許 可 ケ ー
パ ビ リ テ ィ の
ど れ も 新 し い
実 効 ケ ー パ ビ
リ テ ィ 集 合 に
セ ッ ト さ れ な
い 。 フ ァ イ ル
の 実 効 ケ ー パ
ビ リ テ ィ ビ ッ
ト を 有 効 に す
る と い う の は
、 execve(2) 実 行 時
に 、 フ ァ イ ル
の 許 可 ケ ー パ
ビ リ テ ィ と 継
承 ケ ー パ ビ リ
テ ィ に 対 応 す
る も の が ス レ
ッ ド の 許 可 ケ
ー パ ビ リ テ ィ
セ ッ ト と し て
セ ッ ト さ れ る
が 、 こ れ が 実
効 ケ ー パ ビ リ
テ ィ セ ッ ト に
も セ ッ ト さ れ
る と い う こ と
で あ る (ケ ー パ
ビ リ テ ィ の 変
換 ル ー ル は 下
記 参 照 )。 し た
が っ て 、 フ ァ
イ ル に ケ ー パ
ビ リ テ ィ を 割
り 当 て る 際
(setcap(8), cap_set_file(3),
cap_set_fd(3))、 い ず れ
か の ケ ー パ ビ
リ テ ィ に 対 し
て 実 効 フ ラ グ
を 有 効 と 指 定
す る 場 合 、 許
可 フ ラ グ や 継
承 可 能 フ ラ グ
を 有 効 に し た
他 の 全 て の ケ
ー パ ビ リ テ ィ
に つ い て も 実
効 フ ラ グ を 有
効 と 指 定 し な
け れ ば な ら な
い 。
execve()
中 の ケ ー パ ビ
リ テ ィ の 変 換
execve(2) 実 行 時 に 、
カ ー ネ ル は プ
ロ セ ス の 新 し
い ケ ー パ ビ リ
テ ィ を 次 の ア
ル ゴ リ ズ ム を
用 い て 計 算 す
る :
P’(permitted)
= (P(inheritable) & F(inheritable)) |
(F(permitted) & cap_bset)
P’(effective)
= F(effective) ? P’(permitted) : 0
P’(inheritable)
= P(inheritable) [つ ま り 、
変 更 さ れ な い ]
各 変 数 の 意 味
は 以 下 の 通 り :
|
P |
|
execve(2) 前 の ス レ
ッ ド の ケ ー パ
ビ リ テ ィ セ ッ
ト の 値 |
|
P’ |
|
execve(2) 後 の ス レ
ッ ド の ケ ー パ
ビ リ テ ィ セ ッ
ト の 値 |
|
F |
|
|
フ ァ イ
ル ケ ー パ ビ リ
テ ィ セ ッ ト の
値
|
|
|
|
|
cap_bset ケ ー パ ビ リ
テ ィ バ ウ ン デ
ィ ン グ セ ッ ト
の 値 |
|
(下 記 参 照 ) |
ケ ー パ
ビ リ テ ィ と 、
ル ー ト に よ る
プ ロ グ ラ ム の
実 行
execve(2) 時
に 、 ケ ー パ ビ
リ テ ィ セ ッ ト
を 使 っ て 、 全
て の 権 限 を 持
っ た root を 実 現
す る に は 、 以
下 の よ う に す
る 。
|
1. |
|
set−user−ID−root
プ ロ グ ラ ム が
実 行 さ れ る 場
合 、 ま た は プ
ロ セ ス の 実 ユ
ー ザ ー ID が 0 (root) の
場 合 、 フ ァ イ
ル の 継 承 可 能
セ ッ ト と 許 可
セ ッ ト を 全 て 1
(全 て の ケ ー パ
ビ リ テ ィ が 有
効 ) に 定 義 す る
。 |
|
2. |
|
set−user−ID−root プ ロ
グ ラ ム が 実 行
さ れ る 場 合 、
フ ァ イ ル の 実
効 ケ ー パ ビ リ
テ ィ ビ ッ ト を 1
(enabled) に 定 義 す る
。 |
上 記 の
ル ー ル に ケ ー
パ ビ リ テ ィ 変
換 を 適 用 し た
結 果 を ま と め
る と 、 プ ロ セ
ス が set−user−ID−root
プ ロ グ ラ ム を
execve(2) す る 場 合
、 ま た は 実 効 UID
が 0 の プ ロ セ ス
が プ ロ グ ラ ム
を execve(2) す る 場
合 、 許 可 と 実
効 の ケ ー パ ビ
リ テ ィ セ ッ ト
の 全 ケ ー パ ビ
リ テ ィ (正 確 に
は 、 ケ ー パ ビ
リ テ ィ バ ウ ン
デ ィ ン グ セ ッ
ト に よ る マ ス
ク で 除 外 さ れ
る も の 以 外 の
全 て の ケ ー パ
ビ リ テ ィ ) を 取
得 す る と い う
こ と で あ る 。
こ れ に よ り 、
伝 統 的 な UNIX シ ス
テ ム と 同 じ 振
る 舞 い が で き
る よ う に な っ
て い る 。 ケ ー
パ ビ リ テ ィ バ
ウ ン デ ィ ン グ
セ ッ ト ケ ー パ
ビ リ テ ィ バ ウ
ン デ ィ ン グ セ
ッ ト (capability bounding set) は
、 execve(2) 時 に 獲
得 で き る ケ ー
パ ビ リ テ ィ を
制 限 す る た め
に 使 わ れ る セ
キ ュ リ テ ィ 機
構 で あ る 。 バ
ウ ン デ ィ ン グ
セ ッ ト は 以 下
の よ う に 使 用
さ れ る 。
|
* |
|
execve(2) 実
行 時 に 、 ケ ー
パ ビ リ テ ィ バ
ウ ン デ ィ ン グ
セ ッ ト と フ ァ
イ ル の 許 可 ケ
ー パ ビ リ テ ィ
セ ッ ト の 論 理
和 (AND) を 取 っ た も
の が 、 そ の ス
レ ッ ド の 許 可
ケ ー パ ビ リ テ
ィ セ ッ ト に 割
り 当 て ら れ る
。 つ ま り 、 ケ
ー パ ビ リ テ ィ
バ ウ ン デ ィ ン
グ セ ッ ト は 、
実 行 フ ァ イ ル
が 認 め て い る
許 可 ケ ー パ ビ
リ テ ィ に 対 し
て 制 限 を 課 す
働 き を す る 。 |
|
* |
|
(Linux 2.6.25 以 降 ) ケ ー
パ ビ リ テ ィ バ
ウ ン デ ィ ン グ
セ ッ ト は 、 ス
レ ッ ド が capset(2)
に よ り 自 身 の
継 承 可 能 セ ッ
ト に 追 加 可 能
な ケ ー パ ビ リ
テ ィ の 母 集 団
を 制 限 す る 役
割 を 持 つ 。 ス
レ ッ ド に 許 可
さ れ た ケ ー パ
ビ リ テ ィ で あ
っ て も 、 バ ウ
ン デ ィ ン グ セ
ッ ト に 含 ま れ
て い な け れ ば
、 ス レ ッ ド は
そ の ケ ー パ ビ
リ テ ィ は 自 身
の 継 承 可 能 セ
ッ ト に 追 加 で
き ず 、 そ の 結
果 、 継 承 可 能
セ ッ ト に そ の
ケ ー パ ビ リ テ
ィ を 含 む フ ァ
イ ル を execve(2) す
る 場 合 、 そ の
ケ ー パ ビ リ テ
ィ を 許 可 セ ッ
ト に 持 ち 続 け
る こ と が で き
な い 、 と い う
こ と で あ る 。 |
バ ウ ン
デ ィ ン グ セ ッ
ト が マ ス ク を
行 う の は 、 継
承 可 能 ケ ー パ
ビ リ テ ィ で は
な く 、 フ ァ イ
ル の 許 可 ケ ー
パ ビ リ テ ィ の
マ ス ク を 行 う
点 に 注 意 す る
こ と 。 あ る ス
レ ッ ド の 継 承
可 能 セ ッ ト に
そ の ス レ ッ ド
の バ ウ ン デ ィ
ン グ セ ッ ト に
存 在 し な い ケ
ー パ ビ リ テ ィ
が 含 ま れ て い
る 場 合 、 そ の
ス レ ッ ド は 、
継 承 可 能 セ ッ
ト に 含 ま れ る
ケ ー パ ビ リ テ
ィ を 持 つ フ ァ
イ ル を 実 行 す
る こ と に よ り
、 許 可 セ ッ ト
に 含 ま れ る ケ
ー パ ビ リ テ ィ
も 獲 得 で き る
と い う こ と で
あ る 。 カ ー ネ
ル の バ ー ジ ョ
ン に よ り 、 ケ
ー パ ビ リ テ ィ
バ ウ ン デ ィ ン
グ セ ッ ト は シ
ス テ ム 共 通 の
属 性 の 場 合 と
、 プ ロ セ ス 単
位 の 属 性 の 場
合 が あ る 。
Linux 2.6.25
よ り 前 の ケ ー
パ ビ リ テ ィ バ
ウ ン デ ィ ン グ
セ ッ ト
2.6.25 よ
り 前 の カ ー ネ
ル で は 、 ケ ー
パ ビ リ テ ィ バ
ウ ン デ ィ ン グ
セ ッ ト は シ ス
テ ム 共 通 の 属
性 で 、 シ ス テ
ム 上 の 全 て の
ス レ ッ ド に 適
用 さ れ る 。 バ
ウ ン デ ィ ン グ
セ ッ ト は
/proc/sys/kernel/cap−bound フ ァ
イ ル 経 由 で 参
照 で き る 。 (間
違 え や す い が
、 こ の ビ ッ ト
マ ス ク 形 式 の
パ ラ メ ー タ ー
は 、 /proc/sys/kernel/cap−bound
で は 符 号 付 き
の 十 進 数 で 表
現 さ れ る 。 )
init
プ ロ セ ス だ け
が ケ ー パ ビ リ
テ ィ バ ウ ン デ
ィ ン グ セ ッ ト
で ケ ー パ ビ リ
テ ィ を セ ッ ト
す る こ と が で
き る 。 そ れ 以
外 で は 、 ス ー
パ ー ユ ー ザ ー
(よ り 正 確 に は
、 CAP_SYS_MODULE ケ ー パ
ビ リ テ ィ を 持
っ た プ ロ グ ラ
ム ) が 、 ケ ー パ
ビ リ テ ィ バ ウ
ン デ ィ ン グ セ
ッ ト の ケ ー パ
ビ リ テ ィ の ク
リ ア が で き る
だ け で あ る 。
通 常 の シ ス テ
ム で は 、 ケ ー
パ ビ リ テ ィ バ
ウ ン デ ィ ン グ
セ ッ ト は 、
CAP_SETPCAP が 無 効 に
な っ て い る 。
こ の 制 限 を 取
り 去 る に は (取
り 去 る の は 危
険 !)、 include/linux/capability.h
内 の CAP_INIT_EFF_SET の 定
義 を 修 正 し 、
カ ー ネ ル を 再
構 築 す る 必 要
が あ る 。 シ ス
テ ム 共 通 の ケ
ー パ ビ リ テ ィ
バ ウ ン デ ィ ン
グ セ ッ ト 機 能
は 、 カ ー ネ ル 2.2.11
以 降 で Linux に 追 加
さ れ た 。
Linux 2.6.25
以 降 の ケ ー パ
ビ リ テ ィ バ ウ
ン デ ィ ン グ セ
ッ ト
Linux 2.6.25
以 降 で は 、 「
ケ ー パ ビ リ テ
ィ バ ウ ン デ ィ
ン グ セ ッ ト 」
は ス レ ッ ド 単
位 の 属 性 で あ
る (シ ス テ ム 共
通 の ケ ー パ ビ
リ テ ィ バ ウ ン
デ ィ ン グ セ ッ
ト は も は や 存
在 し な い )。 バ
ウ ン デ ィ ン グ
セ ッ ト は fork(2) 時
に は ス レ ッ ド
の 親 プ ロ セ ス
か ら 継 承 さ れ
、 execve(2) の 前 後
で は 保 持 さ れ
る 。 ス レ ッ ド
が CAP_SETPCAP ケ ー パ
ビ リ テ ィ を 持
っ て い る 場 合
、 そ の ス レ ッ
ド は prctl(2) の
PR_CAPBSET_DROP 操 作 を 使
っ て 自 身 の ケ
ー パ ビ リ テ ィ
バ ウ ン デ ィ ン
グ セ ッ ト か ら
ケ ー パ ビ リ テ
ィ を 削 除 す る
こ と が で き る
。 い っ た ん ケ
ー パ ビ リ テ ィ
を バ ウ ン デ ィ
ン グ セ ッ ト か
ら 削 除 し て し
ま う と 、 ス レ
ッ ド は そ の ケ
ー パ ビ リ テ ィ
を 再 度 セ ッ ト
す る こ と は で
き な い 。 prctl(2) の
PR_CAPBSET_READ 操 作 を 使
う こ と で 、 ス
レ ッ ド が あ る
ケ ー パ ビ リ テ
ィ が 自 身 の バ
ウ ン デ ィ ン グ
セ ッ ト に 含 ま
れ て い る か を
知 る こ と が で
き る 。 バ ウ ン
デ ィ ン グ セ ッ
ト か ら の ケ ー
パ ビ リ テ ィ の
削 除 が サ ポ ー
ト さ れ る の は
、 カ ー ネ ル の
コ ン パ イ ル 時
に フ ァ イ ル ケ
ー パ ビ リ テ ィ
が 有 効 に な っ
て い る 場 合 だ
け で あ る 。 Linux 2.6.33
よ り 前 の カ ー
ネ ル で は 、 フ
ァ イ ル ケ ー パ
ビ リ テ ィ は 設
定 オ プ シ ョ ン
CONFIG_SECURITY_FILE_CAPABILITIES で 切
り 替 え ら れ る
追 加 の 機 能 で
あ っ た 。 Linux 2.6.33 以
降 で は 、 こ の
設 定 オ プ シ ョ
ン は 削 除 さ れ
、 フ ァ イ ル ケ
ー パ ビ リ テ ィ
は 常 に カ ー ネ
ル に 組 込 ま れ
る よ う に な っ
た 。 フ ァ イ ル
ケ ー パ ビ リ テ
ィ が カ ー ネ ル
に コ ン パ イ ル
時 に 組 み 込 ま
れ て い る 場 合
、 (全 て の プ ロ
セ ス の 先 祖 で
あ る ) init プ ロ セ
ス は バ ウ ン デ
ィ ン グ セ ッ ト
で 全 て の ケ ー
パ ビ リ テ ィ が
セ ッ ト さ れ た
状 態 で 開 始 す
る 。 フ ァ イ ル
ケ ー パ ビ リ テ
ィ が 有 効 に な
っ て い な い 場
合 に は 、 init は
バ ウ ン デ ィ ン
グ セ ッ ト で
CAP_SETPCAP 以 外 の 全
て の ケ ー パ ビ
リ テ ィ が セ ッ
ト さ れ た 状 態
で 開 始 す る 。
こ の よ う に な
っ て い る の は
、 CAP_SETPCAP ケ ー パ
ビ リ テ ィ が フ
ァ イ ル ケ ー パ
ビ リ テ ィ が サ
ポ ー ト さ れ て
い な い 場 合 に
は 違 っ た 意 味
を 持 つ か ら で
あ る 。 バ ウ ン
デ ィ ン グ セ ッ
ト か ら ケ ー パ
ビ リ テ ィ を 削
除 し て も 、 ス
レ ッ ド の 継 承
可 能 セ ッ ト か
ら は そ の ケ ー
パ ビ リ テ ィ は
削 除 さ れ な い
。 し か し な が
ら 、 バ ウ ン デ
ィ ン グ セ ッ ト
か ら の 削 除 に
よ り 、 こ の 先
そ の ケ ー パ ビ
リ テ ィ を ス レ
ッ ド の 継 承 可
能 セ ッ ト に 追
加 す る こ と は
で き な く な る
。 ユ ー ザ ー ID 変
更 の ケ ー パ ビ
リ テ ィ へ の 影
響 ユ ー ザ ー ID が
0 と 0 以 外 の 間 で
変 化 す る 際 の
振 る 舞 い を 従
来 と 同 じ に す
る た め 、 ス レ
ッ ド の 実 UID、 実
効 UID、 保 存
set−user−ID、 フ ァ イ
ル シ ス テ ム UID が
(setuid(2), setresuid(2) な ど
を 使 っ て ) 変 更
さ れ た 際 に 、
カ ー ネ ル は そ
の ス レ ッ ド の
ケ ー パ ビ リ テ
ィ セ ッ ト に 以
下 の 変 更 を 行
う :
|
1. |
|
UID の 変 更
前 に は 実 UID、 実
効 UID、 保 存
set−user−ID の う ち 少
な く と も 一 つ
が 0 で 、 変 更 後
に 実 UID、 実 効 UID、
保 存 set−user−ID が す
べ て 0 以 外 の 値
に な っ た 場 合
、 許 可 と 実 効
の ケ ー パ ビ リ
テ ィ セ ッ ト の
全 ケ ー パ ビ リ
テ ィ を ク リ ア
す る 。
実 効 UID が
0 か ら 0 以 外 に 変
更 さ れ た 場 合
、 実 効 ケ ー パ
ビ リ テ ィ セ ッ
ト の 全 ケ ー パ
ビ リ テ ィ を ク
リ ア す る 。
実 効 UID が
0 以 外 か ら 0 に 変
更 さ れ た 場 合
、 許 可 ケ ー パ
ビ リ テ ィ セ ッ
ト の 内 容 を 実
効 ケ ー パ ビ リ
テ ィ セ ッ ト に
コ ピ ー す る 。
フ ァ イ
ル シ ス テ ム UID が 0
か ら 0 以 外 に 変
更 さ れ た 場 合
(setfsuid(2) 参 照 )、 実
効 ケ ー パ ビ リ
テ ィ セ ッ ト の
以 下 の ケ ー パ
ビ リ テ ィ が ク
リ ア さ れ る :
CAP_CHOWN, CAP_DAC_OVERRIDE,
CAP_DAC_READ_SEARCH, CAP_FOWNER,
CAP_FSETID, CAP_LINUX_IMMUTABLE (Linux 2.6.30
以 降 ), CAP_MAC_OVERRIDE,
CAP_MKNOD (Linux 2.6.30 以 降 )。
フ ァ イ ル シ ス
テ ム UID が 0 以 外 か
ら 0 に 変 更 さ れ
た 場 合 、 上 記
の ケ ー パ ビ リ
テ ィ の う ち 許
可 ケ ー パ ビ リ
テ ィ セ ッ ト で
有 効 に な っ て
い る も の が 実
効 ケ ー パ ビ リ
テ ィ セ ッ ト で
有 効 に さ れ る
。 各 種 UID の う ち
少 な く と も 一
つ が 0 で あ る ス
レ ッ ド が 、 そ
の UID の 全 て が 0 以
外 に な っ た と
き に 許 可 ケ ー
パ ビ リ テ ィ セ
ッ ト が ク リ ア
さ れ な い よ う
に し た い 場 合
に は 、 prctl(2) の
PR_SET_KEEPCAPS 操 作 を 使
え ば よ い 。 プ
ロ グ ラ ム で ケ
ー パ ビ リ テ ィ
セ ッ ト を 調 整
す る 各 ス レ ッ
ド は 、 capget(2) や
capset(2) を 使 っ て
、 自 身 の ケ ー
パ ビ リ テ ィ セ
ッ ト を 取 得 し
た り 変 更 し た
り で き る 。 た
だ し 、 こ れ を
行 う に は 、 libcap
パ ッ ケ ー ジ で
提 供 さ れ て い
る cap_get_proc(3) や
cap_set_proc(3) を 使 う の
が 望 ま し い 。
ス レ ッ ド の ケ
ー パ ビ リ テ ィ
セ ッ ト の 変 更
に は 以 下 の ル
ー ル が 適 用 さ
れ る 。
|
1. 呼 び 出
し 側 が |
|
CAP_SETPCAP ケ
ー パ ビ リ テ ィ
を 持 っ て い な
い 場 合 、 新 し
い 継 承 可 能 セ
ッ ト は 、 既 存
の 継 承 可 能 セ
ッ ト と 許 可 セ
ッ ト の 積 集 合 (AND)
の 部 分 集 合 で
な け れ ば な ら
な い 。 |
|
2. |
|
(Linux 2.6.25 以 降 ) 新 し
い 継 承 可 能 セ
ッ ト は 、 既 存
の 継 承 可 能 セ
ッ ト と ケ ー パ
ビ リ テ ィ バ ウ
ン デ ィ ン グ セ
ッ ト の 積 集 合 (AND)
の 部 分 集 合 で
な け れ ば な ら
な い 。
新 し い
許 可 セ ッ ト は
、 既 存 の 許 可
セ ッ ト の 部 分
集 合 で な け れ
ば な ら な い (つ
ま り 、 そ の ス
レ ッ ド が 現 在
持 っ て い な い
許 可 ケ ー パ ビ
リ テ ィ を 獲 得
す る こ と は で
き な い )。
4.
新 し い
実 効 ケ ー パ ビ
リ テ ィ セ ッ ト
は 新 し い 許 可
ケ ー パ ビ リ テ
ィ セ ッ ト の 部
分 集 合 に な っ
て い な け れ ば
な ら な い 。
|
securebits フ ラ
グ : ケ ー パ ビ リ
テ ィ だ け の 環
境 を 構 築 す る
カ ー ネ ル 2.6.26 以 降
で 、 フ ァ イ ル
ケ ー パ ビ リ テ
ィ が 有 効 に な
っ た カ ー ネ ル
で は 、 ス レ ッ
ド 単 位 の securebits
フ ラ グ が 実 装
さ れ て お り 、
こ の フ ラ グ を
使 う と UID 0 (root) に
対 す る ケ ー パ
ビ リ テ ィ の 特
別 扱 い を 無 効
す る こ と が で
き る 。 以 下 の
よ う な フ ラ グ
が あ る 。 |
SECBIT_KEEP_CAPS
こ の フ ラ グ を
セ ッ ト さ れ て
い る 場 合 、 UID が 0
の ス レ ッ ド の UID
が 0 以 外 の 値 に
切 り 替 わ る 際
に 、 そ の ス レ
ッ ド は ケ ー パ
ビ リ テ ィ を 維
持 す る こ と が
で き る 。 こ の
フ ラ グ が セ ッ
ト さ れ て い な
い 場 合 に は 、 UID
が 0 か ら 0 以 外 の
値 に 切 り 替 わ
る と 、 そ の ス
レ ッ ド は 全 て
の ケ ー パ ビ リ
テ ィ を 失 う 。
こ の フ ラ グ は
execve(2) 時 に は 全
て ク リ ア さ れ
る (こ の フ ラ グ
は 、 以 前 の prctl(2)
の PR_SET_KEEPCAPS 操 作 と
同 じ 機 能 を 提
供 す る も の で
あ る )。
SECBIT_NO_SETUID_FIXUP こ の フ
ラ グ を セ ッ ト
す る と 、 ス レ
ッ ド の 実 効 UID と
フ ァ イ ル シ ス
テ ム UID が 0 と 0 以
外 の 間 で 切 り
替 わ っ た 場 合
に 、 カ ー ネ ル
は ケ ー パ ビ リ
テ ィ セ ッ ト の
調 整 を 行 わ な
く な る (「 ユ ー
ザ ー ID 変 更 の ケ
ー パ ビ リ テ ィ
へ の 影 響 」 の
節 を 参 照 )。
SECBIT_NOROOT こ の ビ ッ
ト が セ ッ ト さ
れ て い る 場 合
、 set−user−ID−root プ
ロ グ ラ ム の 実
行 時 や 、 実 効 UID
か 実 UID が 0 の プ ロ
セ ス が execve(2) を
呼 び 出 し た 時
に 、 カ ー ネ ル
は ケ ー パ ビ リ
テ ィ を 許 可 し
な い (「 ケ ー パ
ビ リ テ ィ と 、
ル ー ト に よ る
プ ロ グ ラ ム の
実 行 」 の 節 を
参 照 )。 上 記 の
"base" フ ラ グ の
各 々 に は 対 応
す る "locked" フ ラ
グ が 存 在 す る
。 い ず れ の
"locked" フ ラ グ も
一 度 セ ッ ト さ
れ る と 戻 す こ
と は で き ず 、
そ れ 以 降 は 対
応 す る "base" フ
ラ グ を 変 更 す
る こ と が で き
な く な る 。
"locked" フ ラ グ は
SECBIT_KEEP_CAPS_LOCKED,
SECBIT_NO_SETUID_FIXUP_LOCKED,
SECBIT_NOROOT_LOCKED と い う
名 前 で あ る 。
securebits
フ ラ グ は 、 prctl(2)
の 操 作 PR_SET_SECUREBITS や
PR_GET_SECUREBITS を 使 う こ
と で 変 更 し た
り 取 得 し た り
で き る 。 フ ラ
グ を 変 更 す る
に は CAP_SETPCAP ケ ー
パ ビ リ テ ィ が
必 要 で あ る 。
securebits
フ ラ グ は 子 プ
ロ セ ス に 継 承
さ れ る 。 execve(2)
に お い て は 、
SECBIT_KEEP_CAPS が 常 に ク
リ ア さ れ る 以
外 は 、 全 て の
フ ラ グ が 保 持
さ れ る 。 ア プ
リ ケ ー シ ョ ン
は 、 以 下 の 呼
び 出 し を 行 う
こ と に よ り 、
自 分 自 身 お よ
び 子 孫 と な る
プ ロ セ ス 全 て
に 対 し て 、 必
要 な フ ァ イ ル
ケ ー パ ビ リ テ
ィ を 持 っ た プ
ロ グ ラ ム を 実
行 し な い 限 り
、 対 応 す る ケ
ー パ ビ リ テ ィ
を 獲 得 で き な
い よ う な 状 況
に 閉 じ こ め る
こ と が で き る
。
prctl(PR_SET_SECUREBITS,
SECBIT_KEEP_CAPS_LOCKED |
SECBIT_NO_SETUID_FIXUP |
SECBIT_NO_SETUID_FIXUP_LOCKED |
SECBIT_NOROOT |
SECBIT_NOROOT_LOCKED); ユ ー ザ
ー 名 前 空 間 と
の 相 互 作 用 ケ
ー パ リ ビ テ ィ
と ユ ー ザ ー 名
前 空 間 の 相 互
の 影 響 に 関 す
る 議 論 は
user_namespaces(7) を 参 照
。
ケ ー パ
ビ リ テ ィ に 関
す る 標 準 は な
い が 、 Linux の ケ ー
パ ビ リ テ ィ は
廃 案 に な っ た
POSIX.1e 草 案 に 基 づ
い て 実 装 さ れ
て い る 。
http://wt.xpilot.org/publications/posix.1e/">http://wt.xpilot.org/publications/posix.1e/
を 参 照 。
カ ー ネ
ル 2.5.27 以 降 、 ケ ー
パ ビ リ テ ィ は
選 択 式 の カ ー
ネ ル コ ン ポ ー
ネ ン ト と な っ
て お り 、 カ ー
ネ ル 設 定 オ プ
シ ョ ン
CONFIG_SECURITY_CAPABILITIES に よ
り 有 効 /無 効 を
切 り 替 え る こ
と が で き る 。
/proc/PID/task/TID/status
フ ァ イ ル を 使
う と 、 ス レ ッ
ド の ケ ー パ ビ
リ テ ィ セ ッ ト
を 見 る こ と が
で き る 。 /proc/PID/status
フ ァ イ ル に は
、 プ ロ セ ス の
メ イ ン ス レ ッ
ド の ケ ー パ ビ
リ テ ィ セ ッ ト
が 表 示 さ れ る
。 Linux 3.8 よ り 前 で
は 、 こ れ ら の
ケ ー パ ビ リ テ
ィ セ ッ ト の 表
示 で 、 存 在 し
な い ケ ー パ ビ
リ テ ィ は す べ
て 有 効 (1) と し て
表 示 さ れ る 。 Linux
3.8 以 降 で は 、 存
在 し な い ケ ー
パ ビ リ テ ィ は
す べ て 無 効 (0) と
し て 表 示 さ れ
る 。 (CAP_LAST_CAP よ り
大 き い 値 を 持
つ ケ ー パ ビ リ
テ ィ が 存 在 し
な い ケ ー パ ビ
リ テ ィ で あ る
)。
libcap
パ ッ ケ ー ジ は
、 ケ ー パ ビ リ
テ ィ を 設 定 ・
取 得 す る た め
の ル ー チ ン 群
を 提 供 し て い
る 。 こ れ ら の
イ ン タ ー フ ェ
ー ス は 、 capset(2)
と capget(2) が 提 供
す る イ ン タ ー
フ ェ ー ス と 比
べ て 、 よ り 使
い や す く 、 変
更 さ れ る 可 能
性 が 少 な い 。
こ の パ ッ ケ ー
ジ で は 、 setcap(8),
getcap(8) と い う プ
ロ グ ラ ム も 提
供 さ れ て い る
。 パ ッ ケ ー ジ
は 以 下 で 入 手
で き る 。
http://www.kernel.org/pub/linux/libs/security/linux-privs">http://www.kernel.org/pub/linux/libs/security/linux-privs.
バ ー ジ ョ ン 2.6.24 よ
り 前 、 お よ び
フ ァ イ ル ケ ー
パ ビ リ テ ィ が
有 効 に な っ て
い な い 2.6.24 以 降 の
カ ー ネ ル で は
、 CAP_SETPCAP ケ ー パ
ビ リ テ ィ を 持
っ た ス レ ッ ド
は 自 分 以 外 の
ス レ ッ ド の ケ
ー パ ビ リ テ ィ
を 操 作 で き る
。 し か し な が
ら 、 こ れ は 理
論 的 に 可 能 と
い う だ け で あ
る 。 以 下 の い
ず れ か の 場 合
に お い て も 、
ど の ス レ ッ ド
も CAP_SETPCAP ケ ー パ
ビ リ テ ィ を 持
つ こ と は な い
か ら で あ る 。
|
* |
|
2.6.25 よ り 前 の 実
装 で は 、 シ ス
テ ム 共 通 の ケ
ー パ ビ リ テ ィ
バ ウ ン デ ィ ン
グ セ ッ ト
/proc/sys/kernel/cap−bound で は
こ の ケ ー パ ビ
リ テ ィ は 常 に
無 効 に な っ て
お り 、 ソ ー ス
を 変 更 し て カ
ー ネ ル を 再 コ
ン パ イ ル し な
い 限 り 、 こ れ
を 変 更 す る こ
と は で き な い
。
現 在 の
実 装 で は フ ァ
イ ル ケ ー パ ビ
リ テ ィ が 無 効
に な っ て い る
場 合 、 プ ロ セ
ス 毎 の バ ウ ン
デ ィ ン グ セ ッ
ト か ら こ の ケ
ー パ ビ リ テ ィ
を 抜 い て init は
開 始 さ れ 、 シ
ス テ ム 上 で 生
成 さ れ る 他 の
全 て の プ ロ セ
ス で こ の バ ウ
ン デ ィ ン グ セ
ッ ト が 継 承 さ
れ る 。
capsh(1),
setpriv(2), prctl(2), setfsuid(2),
cap_clear(3), cap_copy_ext(3),
cap_from_text(3), cap_get_file(3),
cap_get_proc(3), cap_init(3),
capgetp(3), capsetp(3), libcap(3),
credentials(7), user_namespaces(7),
pthreads(7), getcap(8), setcap(8)
Linux カ
ー ネ ル ソ ー ス
内 の include/linux/capability.h
こ の man ペ
ー ジ は Linux man−pages
プ ロ ジ ェ ク ト
の リ リ ー ス 3.79 の
一 部 で あ る 。
プ ロ ジ ェ ク ト
の 説 明 と バ グ
報 告 に 関 す る
情 報 は
http://www.kernel.org/doc/man−pages/ に 書
か れ て い る 。
| | | |