Manpages

名 前

capget, capset − ス レ ッ ド の ケ ー パ ビ リ テ ィ を 設 定 /取 得 す る

書 式

#include <sys/capability.h>

int capget(cap_user_header_t hdrp, cap_user_data_t datap);

int capset(cap_user_header_t hdrp, const cap_user_data_t datap);

説 明

Linux 2.2 で 、 ス ー パ ー ユ ー ザ ー (root) の 権 限 は 、 個 別 の ケ ー パ ビ リ テ ィ (capabilities) へ と 分 割 さ れ 、 そ の 集 合 と し て 表 現 さ れ る よ う に な っ た 。 各 ス レ ッ ド は 「 実 効 ケ ー パ ビ リ テ ィ (effective capability) の 集 合 」 を 持 ち 、 そ れ に よ っ て 現 在 ど の 操 作 が 実 行 可 能 か を 識 別 で き る 。 ま た 、 各 ス レ ッ ド は 、 「 継 承 可 能 ケ ー パ ビ リ テ ィ (inheritable capability) の 集 合 」 と 「 許 可 ケ ー パ ビ リ テ ィ (permitted capability) の 集 合 」 を 持 つ 。 「 継 承 可 能 ケ ー パ ビ リ テ ィ の 集 合 」 は execve(2) を 通 じ て 渡 す こ と が で き る ケ ー パ ビ リ テ ィ の 集 合 で あ り 、 「 許 可 ケ ー パ ビ リ テ ィ (permitted capability) の 集 合 」 は 実 効 ケ ー パ ビ リ テ ィ や 継 承 可 能 ケ ー パ ビ リ テ ィ と し て 有 効 に で き る ケ ー パ ビ リ テ ィ を 規 定 す る も の で あ る 。 こ の 二 つ の シ ス テ ム コ ー ル は ス レ ッ ド の ケ ー パ ビ リ テ ィ を 取 得 し た り 設 定 し た り す る た め の 生 の カ ー ネ ル イ ン タ ー フ ェ ー ス で あ る 。 こ れ ら の シ ス テ ム コ ー ル は Linux 特 有 で あ る と い う だ け で な く 、 カ ー ネ ル API は 変 更 さ れ る か も し れ ず 、 こ れ ら の シ ス テ ム コ ー ル の 使 用 法 (特 に cap_user_*_t 型 と い う 書 式 ) は カ ー ネ ル の リ ビ ジ ョ ン 毎 に 拡 張 さ れ る か も し れ な い が 、 以 前 の プ ロ グ ラ ム は そ の ま ま 動 作 す る 。 移 植 性 の あ る イ ン タ ー フ ェ ー ス は cap_set_proc(3)cap_get_proc(3) で あ る 。 可 能 な ら ば ア プ リ ケ ー シ ョ ン は こ れ ら の 関 数 を 使 用 す べ き で あ る 。 ア プ リ ケ ー シ ョ ン に Linux 拡 張 を 使 用 し た い 場 合 に は 、 よ り 簡 単 に 使 え る イ ン タ ー フ ェ ー ス で あ る capsetp(3)capgetp(3) を 使 用 す べ き で あ る 。 現 在 の 詳 細 現 在 の カ ー ネ ル の 詳 細 に つ い て 注 意 を 述 べ て お く 。 構 造 体 は 以 下 の よ う に 定 義 さ れ る 。

#define _LINUX_CAPABILITY_VERSION_1 0x19980330
#define _LINUX_CAPABILITY_U32S_1 1

#define _LINUX_CAPABILITY_VERSION_2 0x20071026
#define _LINUX_CAPABILITY_U32S_2 2

typedef struct __user_cap_header_struct {
__u32 version;
int pid; }
*cap_user_header_t;

typedef struct __user_cap_data_struct {
__u32 effective;
__u32 permitted;
__u32 inheritable; }
*cap_user_data_t; フ ィ ー ル ド effective, permitted, inheritable は 、 capabilities(7) で 定 義 さ れ る ケ ー パ ビ リ テ ィ の ビ ッ ト マ ス ク で あ る 。 CAP_* は ビ ッ ト 番 号 を 表 す イ ン デ ッ ク ス 値 で あ り 、 ビ ッ ト フ ィ ー ル ド に OR を 行 う 前 に CAP_* の 値 の 分 だ け ビ ッ ト シ フ ト を 行 う 必 要 が あ る 。 typedef の 方 は ポ イ ン タ ー な の で 、 こ の シ ス テ ム コ ー ル に 渡 す 構 造 体 を 定 義 す る に は 、 struct __user_cap_header_structstruct __user_cap_data_struct と い う 名 前 を 使 用 し な け れ ば な ら な い 。 カ ー ネ ル 2.6.25 よ り 前 で は 、 バ ー ジ ョ ン _LINUX_CAPABILITY_VERSION_1 の 32 ビ ッ ト ケ ー パ ビ リ テ ィ が 推 奨 で あ る 。 カ ー ネ ル 2.6.25 以 降 で は 、 バ ー ジ ョ ン _LINUX_CAPABILITY_VERSION_2 の 64 ビ ッ ト ケ ー パ ビ リ テ ィ が 推 奨 で あ る 。 64 ビ ッ ト ケ ー パ ビ リ テ ィ で は datap[0] と datap[1] が 使 用 さ れ る の に 対 し 、 32 ビ ッ ト ケ ー パ ビ リ テ ィ で は datap[0] だ け が 使 用 さ れ る 。 こ れ ら の シ ス テ ム コ ー ル の 挙 動 に 影 響 が あ る も う 一 つ の 変 更 点 は 、 フ ァ イ ル ケ ー パ ビ リ テ ィ (file capabilities) の カ ー ネ ル に よ る サ ポ ー ト (VFS ケ ー パ ビ リ テ ィ の サ ポ ー ト ) で あ る 。 VFS ケ ー パ ビ リ テ ィ の サ ポ ー ト は 現 在 の と こ ろ コ ン パ イ ル 時 の オ プ シ ョ ン で あ る (カ ー ネ ル 2.6.24 で 追 加 さ れ た )。

capget() で は 、 hdrp−>pid の フ ィ ー ル ド 値 に ケ ー パ ビ リ テ ィ を 知 り た い プ ロ セ ス の プ ロ セ ス ID を 指 定 す る こ と で 、 任 意 の プ ロ セ ス の ケ ー パ ビ リ テ ィ を 調 べ る こ と が で き る 。

VFS ケ ー パ ビ リ テ ィ が サ ポ ー ト さ れ て い る 場 合
VFS ケ ー パ ビ リ テ ィ の サ ポ ー ト で は 、 特 権 実 行 フ ァ イ ル に ケ ー パ ビ リ テ ィ を 追 加 す る た め の フ ァ イ ル 属 性 メ ソ ッ ド が 作 成 さ れ た 。 こ の 特 権 モ デ ル の 導 入 に よ り 、 あ る プ ロ セ ス に よ り 別 の プ ロ セ ス の ケ ー パ ビ リ テ ィ を 非 同 期 に 設 定 す る 機 能 の カ ー ネ ル に よ る サ ポ ー ト は 廃 止 さ れ る 。 つ ま り 、 VFS サ ポ ー ト で は 、 capset() を 呼 び 出 す 際 に hdrp−>pid の 値 と し て 許 さ れ る の は 0 と getpid(2) が 返 す 値 だ け と な る (ど ち ら の 値 で も 等 価 で あ る )。

VFS ケ ー パ ビ リ テ ィ が サ ポ ー ト さ れ て い な い 場 合 カ ー ネ ル が VFS ケ ー パ ビ リ テ ィ を サ ポ ー ト し て い な い 場 合 、 hdrppid フ ィ ー ル ド が 0 以 外 で あ れ ば 、 capset() の 操 作 対 象 は pid で 指 定 さ れ た ス レ ッ ド の ケ ー パ ビ リ テ ィ に な る 。 pid が 0 の 場 合 は 呼 び 出 し 元 の ス レ ッ ド の ケ ー パ ビ リ テ ィ が 操 作 対 象 と な る 。 pid が シ ン グ ル ス レ ッ ド プ ロ セ ス を 参 照 し て い る 場 合 、 pid は 以 前 か ら 使 わ れ て い る プ ロ セ ス ID を 使 っ て 指 定 で き る 。 マ ル チ ス レ ッ ド プ ロ セ ス 内 の あ る ス レ ッ ド を 対 象 に す る 場 合 は 、 gettid(2) が 返 す ス レ ッ ド ID を 用 い て 指 定 す る 必 要 が あ る 。 ま た 、 capset() で は −1 や −1 よ り 小 さ な 値 を 指 定 す る こ と も で き る 。 −1 は 呼 び 出 し 元 と init(1) を 除 く 全 て の ス レ ッ ド を 対 象 と し て 変 更 を 行 う こ と を 、 −1 よ り 小 さ な 値 は ID が −pid の プ ロ セ ス グ ル ー プ の 全 メ ン バ を 対 象 と し て 変 更 を 行 う こ と を 意 味 す る 。 こ の デ ー タ の 詳 細 は capabilities(7) を 参 照 す る こ と 。

返 り 値

成 功 し た 場 合 は 0 が 返 さ れ る 。 エ ラ ー の 場 合 は −1 が 返 さ れ 、 errno が 適 切 に 設 定 さ れ る 。

hdrp の フ ィ ー ル ド version に サ ポ ー ト さ れ て い な い 値 が 指 定 さ れ た 場 合 、 呼 び 出 し は エ ラ ー EINVAL で 失 敗 し 、 version に カ ー ネ ル 推 奨 の _LINUX_CAPABILITY_VERSION_? を 設 定 す る 。 こ の よ う に し て 、 現 在 の 推 奨 ケ ー パ ビ リ テ ィ リ ビ ジ ョ ン が 何 か を 調 べ る こ と が で き る 。

エ ラ ー

EFAULT 不 正 な メ モ リ ー ア ド レ ス 。

hdrp は NULL で あ っ て は な ら な い 。 datap

に NULL を 指 定 し て よ い の は 、 ユ ー ザ ー が カ ー ネ ル が サ ポ ー ト し て い る 推 奨 の ケ ー パ ビ リ テ ィ バ ー ジ ョ ン を 判 定 し よ う と し て い る と き だ け で あ る 。

EINVAL 引 き 数 の ど れ か が 無 効 で あ る 。

EPERM 「 許 可 ケ ー パ ビ リ テ ィ セ ッ ト 」 に ケ ー パ ビ リ テ ィ を 追 加 し よ う と し て い る か 、 も し く は 「 許 可 ケ ー パ ビ リ テ ィ セ ッ ト 」 に 含 ま れ な い ケ ー パ ビ リ テ ィ を 「 実 効 ケ ー パ ビ リ テ ィ セ ッ ト 」 や 「 継 承 可 能 ケ ー パ ビ リ テ ィ セ ッ ト 」 に セ ッ ト し よ う と し て い る 。

EPERM 呼 び 出 し 元 が 自 分 以 外 の ス レ ッ ド の ケ ー パ ビ リ テ ィ を

capset() を 使 っ て 修 正 し よ う と し た が 、 十 分 な 特 権 が な か っ た 。 VFS ケ ー パ ビ リ テ ィ を サ ポ ー ト し て い る カ ー ネ ル で は 、 こ の 操 作 が 許 可 さ れ る こ と は 決 し て な い 。 VFS ケ ー パ ビ リ テ ィ を サ ポ ー ト し て い な い カ ー ネ ル で は 、 CAP_SETPCAP ケ ー パ ビ リ テ ィ が 必 要 で あ る 。 (バ ー ジ ョ ン 2.6.11 よ り 前 の カ ー ネ ル に は 、 こ の ケ ー パ ビ リ テ ィ を 持 た な い ス レ ッ ド が pid フ ィ ー ル ド に 0 で な い 値 (つ ま り 、 0 の 代 わ り に getpid(2) が 返 す 値 ) を 指 定 し て 自 分 自 身 の ケ ー パ ビ リ テ ィ を 変 更 し よ う と し た 場 合 に も 、 こ の エ ラ ー が 発 生 す る と い う バ グ が あ っ た 。 )

ESRCH そ の よ う な ス レ ッ ド が 存 在 し な い 。

準 拠

こ れ ら の シ ス テ ム コ ー ル は Linux 独 自 で あ る 。

注 意

ケ ー パ ビ リ テ ィ を 設 定 し た り 取 得 し た り す る 機 能 の た め の 移 植 性 あ る イ ン タ ー フ ェ ー ス は libcap ラ イ ブ ラ リ に よ っ て 提 供 さ れ る 。 こ の ラ イ ブ ラ リ は 以 下 か ら 入 手 で き る :

http://git.kernel.org/cgit/linux/kernel/git/morgan/libcap.git">http://git.kernel.org/cgit/linux/kernel/git/morgan/libcap.git

関 連 項 目

clone(2), gettid(2), capabilities(7)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。