OSDN Git Service

ba9bb8386a6716a67ecac4e5e2242a9c3a6ca6ef
[linuxjm/LDP_man-pages.git] / release / man2 / capget.2
1 .\" written by Andrew Morgan <morgan@kernel.org>
2 .\"
3 .\" %%%LICENSE_START(GPL_NOVERSION_ONELINE)
4 .\" may be distributed as per GPL
5 .\" %%%LICENSE_END
6 .\"
7 .\" Modified by David A. Wheeler <dwheeler@ida.org>
8 .\" Modified 2004-05-27, mtk
9 .\" Modified 2004-06-21, aeb
10 .\" Modified 2008-04-28, morgan of kernel.org
11 .\"     Update in line with addition of file capabilities and
12 .\"     64-bit capability sets in kernel 2.6.2[45].
13 .\" Modified 2009-01-26, andi kleen
14 .\"
15 .\"*******************************************************************
16 .\"
17 .\" This file was generated with po4a. Translate the source file.
18 .\"
19 .\"*******************************************************************
20 .TH CAPGET 2 2013\-03\-11 Linux "Linux Programmer's Manual"
21 .SH 名前
22 capget, capset \- スレッドのケーパビリティを設定/取得する
23 .SH 書式
24 \fB#include <sys/capability.h>\fP
25 .sp
26 \fBint capget(cap_user_header_t \fP\fIhdrp\fP\fB, cap_user_data_t \fP\fIdatap\fP\fB);\fP
27 .sp
28 \fBint capset(cap_user_header_t \fP\fIhdrp\fP\fB, const cap_user_data_t
29 \fP\fIdatap\fP\fB);\fP
30 .SH 説明
31 Linux 2.2 で、スーパーユーザー (root) の権限は、個別のケーパビリティ (capabilities)
32 へと分割され、その集合として表現されるようになった。 各スレッドは「実効ケーパビリティ (effective capability) の集合」を持ち、
33 それによって現在どの操作が実行可能かを識別できる。 また、各スレッドは、 「継承可能ケーパビリティ (inheritable capability)
34 の集合」と 「許可ケーパビリティ (permitted capability) の集合」を持つ。 「継承可能ケーパビリティの集合」は
35 \fBexecve\fP(2)  を通じて渡すことができるケーパビリティの集合であり、 「許可ケーパビリティ (permitted capability)
36 の集合」は 実効ケーパビリティや継承可能ケーパビリティとして有効にできる ケーパビリティを規定するものである。
37 .PP
38 These two system calls are the raw kernel interface for getting and setting
39 thread capabilities.  Not only are these system calls specific to Linux, but
40 the kernel API is likely to change and use of these system calls (in
41 particular the format of the \fIcap_user_*_t\fP types) is subject to extension
42 with each kernel revision, but old programs will keep working.
43 .sp
44 移植性のあるインターフェースは \fBcap_set_proc\fP(3)  と \fBcap_get_proc\fP(3)  である。
45 可能ならばアプリケーションはこれらの関数を使用すべきである。 アプリケーションに Linux 拡張を使用したい場合には、より簡単に
46 使えるインターフェースである \fBcapsetp\fP(3)  と \fBcapgetp\fP(3)  を使用すべきである。
47 .SS 現在の詳細
48 現在のカーネルの詳細について注意を述べておく。 構造体は以下のように定義される。
49 .sp
50 .nf
51 .in +4n
52 #define _LINUX_CAPABILITY_VERSION_1  0x19980330
53 #define _LINUX_CAPABILITY_U32S_1     1
54
55 #define _LINUX_CAPABILITY_VERSION_2  0x20071026
56 #define _LINUX_CAPABILITY_U32S_2     2
57
58 typedef struct __user_cap_header_struct {
59    __u32 version;
60    int pid;
61 } *cap_user_header_t;
62
63 typedef struct __user_cap_data_struct {
64    __u32 effective;
65    __u32 permitted;
66    __u32 inheritable;
67 } *cap_user_data_t;
68 .fi
69 .in -4n
70 .sp
71 The \fIeffective\fP, \fIpermitted\fP, and \fIinheritable\fP fields are bit masks of
72 the capabilities defined in \fIcapability(7).\fP Note the \fBCAP_*\fP values are
73 bit indexes and need to be bit\-shifted before ORing into the bit fields.  To
74 define the structures for passing to the system call you have to use the
75 \fIstruct __user_cap_header_struct\fP and \fIstruct __user_cap_data_struct\fP
76 names because the typedefs are only pointers.
77
78 カーネル 2.6.25 より前では、バージョン \fB_LINUX_CAPABILITY_VERSION_1\fP の 32
79 ビットケーパビリティが推奨である。 カーネル 2.6.25 以降では、バージョン \fB_LINUX_CAPABILITY_VERSION_2\fP の 64
80 ビットケーパビリティが推奨である。 64 ビットケーパビリティでは \fIdatap\fP[0] と \fIdatap\fP[1] が使用されるのに対し、 32
81 ビットケーパビリティでは \fIdatap\fP[0] だけが使用される。
82 .sp
83 これらのシステムコールの挙動に影響があるもう一つの変更点は、 ファイルケーパビリティ (file capabilities) のカーネルによるサポート
84 (VFS ケーパビリティのサポート) である。 VFS ケーパビリティのサポートは現在のところコンパイル時のオプションである (カーネル 2.6.24
85 で追加された)。
86 .sp
87 \fBcapget\fP()  では、 \fIhdrp\->pid\fP のフィールド値にケーパビリティを知りたいプロセスのプロセス ID を
88 指定することで、任意のプロセスのケーパビリティを調べることができる。
89 .SS "With VFS capability support"
90 VFS ケーパビリティのサポートでは、特権実行ファイルにケーパビリティを 追加するためのファイル属性メソッドが作成された。
91 この特権モデルの導入により、あるプロセスにより別のプロセスのケーパビリティ を非同期に設定する機能のカーネルによるサポートは廃止される。 つまり、VFS
92 サポートでは、 \fBcapset\fP()  を呼び出す際に \fIhdrp\->pid\fP の値として許されるのは 0 と \fBgetpid\fP(2)
93 が返す値だけとなる (どちらの値でも等価である)。
94 .SS "Without VFS capability support"
95 カーネルが VFS ケーパビリティをサポートしていない場合、 \fIhdrp\fP の \fIpid\fP フィールドが 0 以外であれば、 \fBcapset\fP()
96 の操作対象は \fIpid\fP で指定されたスレッドのケーパビリティになる。 \fIpid\fP が 0
97 の場合は呼び出し元のスレッドのケーパビリティが操作対象となる。 \fIpid\fP がシングルスレッド・プロセスを参照している場合、 \fIpid\fP
98 は以前から使われているプロセスID を使って指定できる。 マルチスレッド・プロセス内のあるスレッドを対象にする場合は、 \fBgettid\fP(2)
99 が返すスレッドID を用いて指定する必要がある。 また、 \fBcapset\fP()  では \-1 や \-1 より小さな値を指定することもできる。 \-1
100 は呼び出し元と \fBinit\fP(8)  を除く全てのスレッドを対象として変更を行うことを、 \-1 より小さな値は ID が \-\fIpid\fP
101 のプロセスグループの全メンバ を対象として変更を行うことを意味する。
102
103 このデータの詳細は \fBcapabilities\fP(7)  を参照すること。
104 .SH 返り値
105 成功した場合は 0 が返される。エラーの場合は \-1 が返され、 \fIerrno\fP が適切に設定される。
106
107 \fIhdrp\fP のフィールド \fIversion\fP にサポートされていない値が指定された場合、 呼び出しはエラー \fBEINVAL\fP で失敗し、
108 \fIversion\fP にカーネル推奨の \fB_LINUX_CAPABILITY_VERSION_?\fP を設定する。
109 このようにして、現在の推奨ケーパビリティ・リビジョンが何かを 調べることができる。
110 .SH エラー
111 .TP 
112 \fBEFAULT\fP
113 不正なメモリアドレス。 \fIhdrp\fP は NULL であってはならない。 \fIdatap\fP に NULL
114 を指定してよいのは、ユーザがカーネルがサポートしている 推奨のケーパビリティ・バージョンを判定しようとしているときだけである。
115 .TP 
116 \fBEINVAL\fP
117 引き数のどれかが無効である。
118 .TP 
119 \fBEPERM\fP
120 「許可ケーパビリティセット」にケーパビリティを追加しようとしているか、 もしくは「許可ケーパビリティセット」に含まれないケーパビリティを
121 「実効ケーパビリティセット」や「継承可能ケーパビリティセット」に セットしようとしている。
122 .TP 
123 \fBEPERM\fP
124 呼び出し元が自分以外のスレッドのケーパビリティを \fBcapset\fP()  を使って修正しようとしたが、十分な特権がなかった。 VFS
125 ケーパビリティをサポートしているカーネルでは、 この操作が許可されることは決してない。 VFS ケーパビリティをサポートしていないカーネルでは、
126 \fBCAP_SETPCAP\fP ケーパビリティが必要である。 (バージョン 2.6.11 より前のカーネルには、 このケーパビリティを持たないスレッドが
127 \fIpid\fP フィールドに 0 でない値 (つまり、0 の代わりに \fBgetpid\fP(2)  が返す値)
128 を指定して自分自身のケーパビリティを変更しようとした場合にも、 このエラーが発生するというバグがあった。)
129 .TP 
130 \fBESRCH\fP
131 そのようなスレッドが存在しない。
132 .SH 準拠
133 これらのシステムコールは Linux 独自である。
134 .SH 注意
135 ケーパビリティを設定したり取得したりする機能のための移植性ある インターフェースは \fIlibcap\fP ライブラリによって提供される。
136 このライブラリは以下から入手できる:
137 .br
138 .UR http://git.kernel.org/cgit\:/linux\:/kernel\:/git\:/morgan\:\:/libcap.git
139 .UE
140 .SH 関連項目
141 \fBclone\fP(2), \fBgettid\fP(2), \fBcapabilities\fP(7)
142 .SH この文書について
143 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
144 である。プロジェクトの説明とバグ報告に関する情報は
145 http://www.kernel.org/doc/man\-pages/ に書かれている。