Manpages

名 前

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_OVERRIDECAP_DAC_READ_SEARCH に よ り チ ェ ッ ク が 行 わ れ る 操 作 は 除 く 。

(chattr(1)

* 任 意 の フ ァ イ ル に 対 し て 拡 張 フ ァ イ ル 属 性 を 設 定 す る

参 照 )。

* 任 意 の フ ァ イ ル に 対 し て ア ク セ ス 制 御 リ ス ト

(ACL) を 設 定 す る 。

* フ ァ イ ル の 削 除 の 際 に デ ィ レ ク ト リ の ス テ ィ ッ

キ ー ビ ッ ト を 無 視 す る 。

*

open(2)fcntl(2) で 任 意 の フ ァ イ ル に 対 し て O_NOATIME を 指 定 す る 。

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_FLFS_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

* 以 下 の シ ス テ ム 管 理 用 の 操 作 を 実 行 す る :

quotactl(2), mount(2),

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_SETIPC_RMID 操 作 を 実 行 す る 。
*

RLIMIT_NPROC リ ソ ー ス 制 限 を 上 書 き す る 。

*

拡 張 属 性 trustedsecurity に 対 す る 操 作 を 実 行 す る (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_CHOWNKEYCTL_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_ALARMCLOCK_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_SECUREBITSPR_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/ に 書 か れ て い る 。