名 前
capabilities − Linux の ケ ー パ ビ リ テ ィ (capability) の 概 要
説 明
権 限 の チ ェ ッ ク を 行 う 観 点 か ら 見 る と 、 伝 統 的 な UNIX の 実 装 で は プ ロ セ ス は 二 つ の カ テ ゴ リ ー に 分 類 で き る : 特 権 プ ロ セ ス (実 効 ユ ー ザ ー ID が 0 の プ ロ セ ス 。 ユ ー ザ ー ID 0 は ス ー パ ー ユ ー ザ ー や root と 呼 ば れ る ) と 非 特 権 プ ロ セ ス (実 効 ユ ー ザ ー ID が 0 以 外 の プ ロ セ ス ) で あ る 。 非 特 権 プ ロ セ ス で は 、 プ ロ セ ス の 資 格 情 報 (通 常 は 、 実 効 UID 、 実 効 GID と 追 加 の グ ル ー プ リ ス ト ) に 基 づ く 権 限 チ ェ ッ ク が 行 わ れ る の に 対 し 、 特 権 プ ロ セ ス で は 全 て の カ ー ネ ル の 権 限 チ ェ ッ ク が バ イ パ ス さ れ る 。 バ ー ジ ョ ン 2.2 以 降 の Linux で は 、 こ れ ま で ス ー パ ー ユ ー ザ ー に 結 び 付 け ら れ て き た 権 限 を 、 い く つ か の グ ル ー プ に 分 割 し て い る 。 こ れ ら の グ ル ー プ は ケ ー パ ビ リ テ ィ (capability) と 呼 ば れ 、 グ ル ー プ 毎 に 独 立 に 有 効 、 無 効 を 設 定 で き る 。 ケ ー パ ビ リ テ ィ は ス レ ッ ド 単 位 の 属 性 で あ る 。 ケ ー パ ビ リ テ ィ の リ ス ト 以 下 の リ ス ト は 、 Linux で 実 装 さ れ て い る ケ ー パ ビ リ テ ィ と 各 ケ ー パ ビ リ テ ィ が 許 可 す る 操 作 と 動 作 を ま と め た も の で あ る 。
CAP_AUDIT_CONTROL (Linux
2.6.11 以 降 ) カ ー ネ
ル 監 査 (audit) の 有
効 無 効 の 切 り
替 え 、 監 査 の
フ ィ ル タ ル ー
ル の 変 更 、 監
査 の 状 況 や フ
ィ ル タ ル ー ル
の 取 得 が で き
る 。
CAP_AUDIT_READ (Linux 3.16 以 降 ) マ
ル チ キ ャ ス ト
netlink ソ ケ ッ ト 経
由 で 監 査 ロ グ
の 読 み 出 し が
で き る 。
CAP_AUDIT_WRITE (Linux 2.6.11 以 降 )
カ ー ネ ル 監 査
の ロ グ に レ コ
ー ド を 書 き 込
む 。
CAP_BLOCK_SUSPEND (Linux 3.5 以 降 )
シ ス テ ム の サ
ス ペ ン ド を ブ
ロ ッ ク で き る
機 能 を 使 用 す
る (epoll(7) EPOLLWAKEUP,
/proc/sys/wake_lock)。
CAP_CHOWN フ ァ イ ル の
UID と GID を 任 意 に
変 更 す る (chown(2)
参 照 )。
CAP_DAC_OVERRIDE フ ァ イ ル
の 読 み 出 し 、
書 き 込 み 、 実
行 の 権 限 チ ェ
ッ ク を バ イ パ
ス す る (DAC は "discretionary
access control (任 意 の ア ク
セ ス 制 御 )" の
略 で あ る )。
CAP_DAC_READ_SEARCH
* フ ァ イ ル の 読 み 出 し 権 限 の チ ェ ッ ク と デ ィ レ ク ト リ の 読 み 出 し と 実 行 の 権 限 チ ェ ッ ク を バ イ パ ス す る 。
*
open_by_handle_at(2) を 起 動 す る 。
CAP_FOWNER
* 通 常 、 プ ロ セ ス の フ ァ イ ル シ ス テ ム
UID が フ ァ イ ル の UID に 一 致 す
る こ と が 要 求 さ れ る 操 作 (例 え ば chmod(2), utime(2)) に お け る 権 限 チ ェ ッ ク を バ イ パ ス す る 。 但 し 、 CAP_DAC_OVERRIDE か CAP_DAC_READ_SEARCH に よ り チ ェ ッ ク が 行 わ れ る 操 作 は 除 く 。
* 任 意 の フ ァ イ ル に 対 し て 拡 張 フ ァ イ ル 属 性 を 設 定 す る
(chattr(1)
参 照 )。
* 任 意 の フ ァ イ ル に 対 し て ア ク セ ス 制 御 リ ス ト
(ACL) を 設 定 す る 。
* フ ァ イ ル の 削 除 の 際 に デ ィ レ ク ト リ の ス テ ィ ッ
キ ー ビ ッ ト を 無 視 す る 。
CAP_FSETID フ
ァ イ ル が 変 更
さ れ た と き に
set−user−ID と set−group−ID
の 許 可 ビ ッ ト
を ク リ ア し な
い 。 呼 び 出 し
元 プ ロ セ ス の
フ ァ イ ル シ ス
テ ム GID と 追 加 の
GID の い ず れ と も
GID が 一 致 し な い
フ ァ イ ル に 対
し て set−group−ID ビ ッ
ト を 設 定 す る
。
CAP_IPC_LOCK メ モ リ ー
の ロ ッ ク (mlock(2),
mlockall(2), mmap(2), shmctl(2))
を 行 う 。
CAP_IPC_OWNER
System V IPC オ ブ ジ ェ ク ト に 対 す る 操 作 に 関 し て 権 限 チ ェ ッ ク を バ イ パ ス す る 。
CAP_KILL シ
グ ナ ル を 送 信
す る 際 に 権 限
チ ェ ッ ク を バ
イ パ ス す る (kill(2)
参 照 )。 こ れ に
は ioctl(2) の KDSIGACCEPT
操 作 の 使 用 も
含 ま れ る 。
CAP_LEASE (Linux 2.4 以 降 ) 任
意 の フ ァ イ ル
に 対 し て フ ァ
イ ル リ ー ス を
設 定 す る (fcntl(2)
参 照 )。
CAP_LINUX_IMMUTABLE
inode フ ラ グ FS_APPEND_FL と FS_IMMUTABLE_FL を 設 定 す る (chattr(1) 参 照 )。
CAP_MAC_ADMIN (Linux
2.6.25 以 降 ) 強 制 ア
ク セ ス 制 御 (MAC) を
上 書 き す る 。 Smack
Linux Security Module (LSM) 用 に 実
装 さ れ て い る
。
CAP_MAC_OVERRIDE (Linux 2.6.25 以 降 )
MAC の 設 定 や 状 態 を 変 更 す る 。 Smack LSM 用 に 実 装 さ れ て い る 。
CAP_MKNOD (Linux 2.4 以 降 )
(Linux 2.4 以 降 ) mknod(2) を 使 用 し て ス ペ シ ャ ル フ ァ イ ル を 作 成 す る 。
CAP_NET_ADMIN 各 種 の ネ ッ ト ワ ー ク 関 係 の 操 作 を 実 行 す る :
* イ ン タ ー フ ェ ー ス の 設 定
*
IP の フ ァ イ ア ウ ォ ー ル 、 マ ス カ レ ー ド 、 ア カ ウ ン テ ィ ン グ
* ル ー テ ィ ン グ テ ー ブ ル の 変 更
* 透 過 的 プ ロ キ シ で の 任 意 の ア ド レ ス の 割 り 当 て
(bind)
* サ ー ビ ス 種 別
(type−of−service; TOS) の セ ッ ト
* ド ラ イ バ の 統 計 情 報 の ク リ ア
*
promiscuous モ ー ド を セ ッ ト す る
* マ ル チ キ ャ ス ト を 有 効 に す る
*
setsockopt(2) を 使 っ て 以 下 の ソ ケ ッ ト オ プ シ ョ ン を 設 定 す る : SO_DEBUG, SO_MARK, SO_PRIORITY (優 先 度 を 0 か ら 6 以 外 に 設 定 す る 場 合 ), SO_RCVBUFFORCE, and SO_SNDBUFFORCE
CAP_NET_BIND_SERVICE
イ ン タ ー ネ ッ
ト ド メ イ ン の
特 権 ポ ー ト (ポ
ー ト 番 号 が 1024 番
未 満 ) を バ イ ン
ド で き る 。
CAP_NET_BROADCAST
(未 使 用 ) ソ ケ ッ ト の ブ ロ ー ド キ ャ ス ト と 、 マ ル チ キ ャ ス ト の 待 ち 受 け を 行 う 。
CAP_NET_RAW
*
RAW ソ ケ ッ ト と PACKET ソ ケ ッ ト を 使 用 す る 。
*
透 過 的 プ ロ キ シ で の 任 意 の ア ド レ ス の 割 り 当 て (bind)
CAP_SETGID プ
ロ セ ス の GID と 追
加 の GID リ ス ト に
対 す る 任 意 の
操 作 を 行 う 。 UNIX
ド メ イ ン ソ ケ
ッ ト 経 由 で ソ
ケ ッ ト の 資 格
情 報 (credential) を 渡 す
際 に 偽 の GID を 渡
す こ と が で き
る 。 ユ ー ザ ー
名 前 空 間 に グ
ル ー プ ID マ ッ ピ
ン グ を 書 き 込
む こ と が で き
る (user_namespaces(7) 参 照
)。
CAP_SETFCAP (Linux 2.6.24 以 降 ) フ
ァ イ ル ケ ー パ
ビ リ テ ィ を 設
定 す る 。
CAP_SETPCAP フ ァ イ ル ケ
ー パ ビ リ テ ィ
が サ ポ ー ト さ
れ て い な い 場
合 : 呼 び 出 し 元
が 許 可 さ れ て
い る ケ ー パ ビ
リ テ ィ セ ッ ト
に 含 ま れ る 任
意 の ケ ー パ ビ
リ テ ィ を 、 他
の プ ロ セ ス に
付 与 し た り 、
削 除 し た り で
き る 。 (カ ー ネ
ル が フ ァ イ ル
ケ ー パ ビ リ テ
ィ を サ ポ ー ト
し て い る 場 合
、 CAP_SETPCAP は こ の
役 割 を 持 た な
い 。 な ぜ な ら
、 フ ァ イ ル ケ
ー パ ビ リ テ ィ
を サ ポ ー ト し
て い る カ ー ネ
ル で は CAP_SETPCAP は
全 く 別 の 意 味
を 持 つ か ら で
あ る 。 ) フ ァ イ
ル ケ ー パ ビ リ
テ ィ が サ ポ ー
ト さ れ て い る
場 合 : 呼 び 出 し
元 ス レ ッ ド の
バ ウ ン デ ィ ン
グ セ ッ ト の 任
意 の ケ ー パ ビ
リ テ ィ を 自 身
の 継 承 可 能 ケ
ー パ ビ リ テ ィ
セ ッ ト に 追 加
で き る 。 (prctl(2)
PR_CAPBSET_DROP を 使 っ て )
バ ウ ン デ ィ ン
グ セ ッ ト か ら
ケ ー パ ビ リ テ
ィ を 削 除 で き
る 。 securebits フ ラ
グ を 変 更 で き
る 。
CAP_SETUID プ ロ セ ス の
UID に 対 す る 任 意
の 操 作 (setuid(2),
setreuid(2), setresuid(2), setfsuid(2))
を 行 う 。 UNIX ド メ
イ ン ソ ケ ッ ト
経 由 で ソ ケ ッ
ト の 資 格 情 報
(credential) を 渡 す 際 に
偽 の UID を 渡 す こ
と が で き る 。
ユ ー ザ ー 名 前
空 間 に ユ ー ザ
ー ID マ ッ ピ ン グ
を 書 き 込 む こ
と が で き る
(user_namespaces(7) 参 照 )。
CAP_SYS_ADMIN
* 以 下 の シ ス テ ム 管 理 用 の 操 作 を 実 行 す る :
umount(2), swapon(2), swapoff(2), sethostname(2), setdomainname(2).
* 特 権 が 必 要 な
syslog(2) の 操 作 を 実 行 す る (Linux 2.6.37 以 降 で
は 、 こ の よ う な 操 作 を 許 可 す る に は CAP_SYSLOG を 使 う べ き で あ る )
*
VM86_REQUEST_IRQ vm86(2) コ マ ン ド を 実 行 す る 。
*
任 意 の
System V IPC オ ブ ジ ェ ク
ト に 対 す る IPC_SET
と IPC_RMID 操 作 を 実
行 す る 。
*
RLIMIT_NPROC リ ソ ー ス 制 限 を 上 書 き す る 。
*
拡 張 属
性 trusted と security に
対 す る 操 作 を
実 行 す る (attr(5) 参
照 )。
*
lookup_dcookie(2) を 呼 び 出 す 。
*
ioprio_set(2) を 使 っ て I/O ス ケ ジ ュ ー リ ン グ ク ラ ス IOPRIO_CLASS_RT, IOPRIO_CLASS_IDLE を 割 り 当 て る (IOPRIO_CLASS_IDLE は Linux 2.6.25 よ り 前 の バ ー ジ ョ ン の み )。
*
UNIX ド メ イ ン ソ ケ ッ ト で ソ ケ ッ ト の 資 格 情 報 (credential) を 渡 す 際 に 偽 の UID を 渡 す 。
*
フ ァ イ
ル を オ ー プ ン
す る シ ス テ ム
コ ー ル (例 え ば
accept(2), execve(2), open(2),
pipe(2)) で シ ス テ ム
全 体 で オ ー プ
ン で き る フ ァ
イ ル 数 の 上 限
/proc/sys/fs/file−max を 超
過 す る 。
*
clone(2) と unshare(2) で 新 し い 名 前 空 間 を 作 成 す る CLONE_* フ ラ グ を 利 用 す る (た だ し 、 Linux 3.8 以 降 で は 、 ユ ー ザ ー 名 前 空 間 の 作 成 に ど の ケ ー パ ビ リ テ ィ も 必 要 と し な い )。
*
perf_event_open(2) を 呼 び 出 す 。
*
特 権 が
必 要 な perf イ ベ
ン ト の 情 報 に
ア ク セ ス す る
。
*
setns(2) を 呼 び 出 す (target 名 前 空 間 で の CAP_SYS_ADMIN が 必 要 )。
*
fanotify_init(2) を 呼 び 出 す 。
*
keyctl(2) の KEYCTL_CHOWN と KEYCTL_SETPERM 操 作 を 実 行 す る 。
*
madvise(2) の MADV_HWPOISON 操 作 を 実 行 す る 。
*
TIOCSTI ioctl(2) を 使 っ て 、 呼 び 出 し 元 の 制 御 端 末 以 外 の 端 末 の 入 力 キ ュ ー に 文 字 を 挿 入 す る 。
*
廃 止 予
定 の nfsservctl(2) シ ス
テ ム コ ー ル を
使 用 す る 。
* 廃 止 予 定 の
bdflush(2) シ ス テ ム
コ ー ル を 使 用
す る 。
* 特 権 が 必 要 な
ブ ロ ッ ク デ バ イ ス に 対 す る 各 種 の ioctl(2) 操 作 を 実 行 す る 。
*
特 権 が
必 要 な フ ァ イ
ル シ ス テ ム に
対 す る 各 種 の
ioctl(2) 操 作 を 実 行
す る 。
*
多 く の デ バ イ ス ド ラ イ バ に 対 す る 管 理 命 令 を 実 行 す る 。
CAP_SYS_BOOT
reboot(2) と kexec_load(2) を 呼 び 出 す 。
CAP_SYS_CHROOT
chroot(2). を 呼 び 出 す 。
CAP_SYS_MODULE カ
ー ネ ル モ ジ ュ
ー ル の ロ ー ド
、 ア ン ロ ー ド
を 行 う (init_module(2) と
delete_module(2) を 参 照 の
こ と )。 バ ー ジ
ョ ン 2.6.25 よ り 前 の
カ ー ネ ル で 、
シ ス テ ム 全 体
の ケ ー パ ビ リ
テ ィ バ ウ ン デ
ィ ン グ セ ッ ト
(capability bounding set) か ら ケ
ー パ ビ リ テ ィ
を 外 す 。
CAP_SYS_NICE
* プ ロ セ ス の
nice 値 の 引 き 上 げ (nice(2), setpriority(2)) や 、 任
意 の プ ロ セ ス の nice 値 の 変 更 を 行 う 。
* 呼 び 出 し 元 プ ロ セ ス に 対 す る リ ア ル タ イ ム ス ケ ジ ュ ー リ ン グ ポ リ シ ー と 、 任 意 の プ ロ セ ス に 対 す る ス ケ ジ ュ ー リ ン グ ポ リ シ ー と 優 先 度 を 設 定 す る
(sched_setscheduler(2), sched_setparam(2), shed_setattr(2))。
* 任 意 の プ ロ セ ス に 対 す る
CPU affinity を 設 定 で き る
(sched_setaffinity(2))。
* 任 意 の プ ロ セ ス に 対 し て
I/O ス ケ ジ ュ ー リ ン グ ク ラ ス と 優 先 度 を 設
定 で き る (ioprio_set(2))。
*
migrate_pages(2) を 任 意 の プ ロ セ ス に 適 用 し 、 プ ロ セ ス を 任 意 の ノ ー ド に 移 動 す る 。
*
move_pages(2) を 任 意 の プ ロ セ ス に 対 し て 行 う 。
*
mbind(2) と move_pages(2) で MPOL_MF_MOVE_ALL フ ラ グ を 使 用 す る 。
CAP_SYS_PACCT
acct(2) を 呼 び 出 す 。
CAP_SYS_PTRACE
*
ptrace(2) を 使 っ て 任 意 の プ ロ セ ス を ト レ ー ス す る 。
*
get_robust_list(2) を 任 意 の プ ロ セ ス に 対 し て 行 う 。
*
process_vm_readv(2) と process_vm_writev(2) を 使 っ て 任 意 の プ ロ セ ス の メ モ リ ー と の 間 で デ ー タ の 送 受 信 を 行 う 。
*
kcmp(2) を 使 っ て プ ロ セ ス 内 部 を 調 査 す る 。
CAP_SYS_RAWIO
*
I/O ポ ー ト 操 作 を 実 行 す る (iopl(2)、 ioperm(2))。
*
/proc/kcore に ア ク セ ス す る 。
*
FIBMAP ioctl(2) 操 作 を 使 用 す る 。
*
x86 モ デ ル に 固 有 の レ ジ ス タ ー (MSR レ ジ ス タ ー 群 、 msr(4) 参 照 ) に ア ク セ ス す る た め の デ バ イ ス を オ ー プ ン す る 。
*
/proc/sys/vm/mmap_min_addr を 更 新 す る 。
*
/proc/sys/vm/mmap_min_addr で 指 定 さ れ た 値 よ り も 小 さ な ア ド レ ス に メ モ リ ー マ ッ ピ ン グ を 作 成 す る 。
*
/proc/bus/pci に あ る フ ァ イ ル を マ ッ プ す る 。
*
/dev/mem や /dev/kmem を オ ー プ ン す る 。
*
各 種 の SCSI
デ バ イ ス コ マ
ン ド を 実 行 す
る 。
*
hpsa(4) デ バ イ ス や cciss(4) デ バ イ ス の 特 定 の 操 作 を 実 行 す る 。
*
他 の デ バ イ ス に 対 し て 各 種 の デ バ イ ス 固 有 命 令 を 実 行 す る 。
CAP_SYS_RESOURCE
*
ext2 フ ァ イ ル シ ス テ ム 上 の 予 約 さ れ て い る 領 域 を 使 用 す る 。
*
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 以 外 の 値 に な っ た 場 合 、 許 可 と 実 効 の ケ ー パ ビ リ テ ィ セ ッ ト の 全 ケ ー パ ビ リ テ ィ を ク リ ア す る 。
2.
実 効 UID が 0 か ら 0 以 外 に 変 更 さ れ た 場 合 、 実 効 ケ ー パ ビ リ テ ィ セ ッ ト の 全 ケ ー パ ビ リ テ ィ を ク リ ア す る 。
3.
実 効 UID が 0 以 外 か ら 0 に 変 更 さ れ た 場 合 、 許 可 ケ ー パ ビ リ テ ィ セ ッ ト の 内 容 を 実 効 ケ ー パ ビ リ テ ィ セ ッ ト に コ ピ ー す る 。
4.
フ ァ イ ル シ ス テ ム 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) の 部 分 集 合 で な け れ ば な ら な い 。
3.
新 し い
許 可 セ ッ ト は
、 既 存 の 許 可
セ ッ ト の 部 分
集 合 で な け れ
ば な ら な い (つ
ま り 、 そ の ス
レ ッ ド が 現 在
持 っ て い な い
許 可 ケ ー パ ビ
リ テ ィ を 獲 得
す る こ と は で
き な い )。
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/ に 書 か れ て い る 。