Initial import of binutils 2.22 on the new vendor branch
[dragonfly.git] / share / man / man9 / priv.9
1 .\"-
2 .\" Copyright (c) 2006 nCircle Network Security, Inc.
3 .\" All rights reserved.
4 .\"
5 .\" This software was developed by Robert N. M. Watson for the TrustedBSD
6 .\" Project under contract to nCircle Network Security, Inc.
7 .\"
8 .\" Redistribution and use in source and binary forms, with or without
9 .\" modification, are permitted provided that the following conditions
10 .\" are met:
11 .\" 1. Redistributions of source code must retain the above copyright
12 .\"    notice, this list of conditions and the following disclaimer.
13 .\" 2. Redistributions in binary form must reproduce the above copyright
14 .\"    notice, this list of conditions and the following disclaimer in the
15 .\"    documentation and/or other materials provided with the distribution.
16 .\"
17 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR, NCIRCLE NETWORK SECURITY,
21 .\" INC., OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 .\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
23 .\" TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24 .\" PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25 .\" LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26 .\" NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 .\" SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 .\"
29 .\" $FreeBSD: src/share/man/man9/priv.9,v 1.7 2008/09/17 15:49:44 attilio Exp $
30 .\"
31 .Dd July 26, 2009
32 .Dt PRIV 9
33 .Os
34 .Sh NAME
35 .Nm priv
36 .Nd kernel privilege checking API
37 .Sh SYNOPSIS
38 .In sys/priv.h
39 .Ft int
40 .Fn priv_check "struct thread *td" "int priv"
41 .Ft int
42 .Fn priv_check_cred "struct ucred *cred" "int priv" "int flags"
43 .Sh DESCRIPTION
44 The
45 .Nm
46 interfaces check to see if specific system privileges are granted to the
47 passed thread,
48 .Fa td ,
49 or credential,
50 .Fa cred .
51 Privileges typically represent rights in one of two categories: the right to
52 manage a particular component of the system, or an exemption to a specific
53 policy or access control list.
54 The caller identifies the desired privilege via the
55 .Fa priv
56 argument.
57 The
58 .Fa flags
59 argument of the
60 .Fn priv_check_cred
61 function may be set to
62 .Dv NULL_CRED_OKAY ,
63 in which case
64 .Fa cred
65 is allowed to be
66 .Dv NULL .
67 .Ss Privilege Policies
68 Privileges are typically granted based on one of two base system policies:
69 the superuser policy, which grants privilege based on the effective (or
70 sometimes real) UID having a value of 0, and the
71 .Xr jail 2
72 policy, which permits only certain privileges to be granted to processes in a
73 jail.
74 .Sh IMPLEMENTATION NOTES
75 When adding a new privilege check to a code path, first check the complete
76 list of current privileges in
77 .In sys/priv.h
78 to see if one already exists for the class of privilege required.
79 Only if there is not an exact match should a new privilege be added to the
80 privilege list.
81 As privilege numbers becomes encoded in the kernel module ABI, privilege
82 constants must not be changed as any kernel modules depending on privileges
83 will then need to be recompiled.
84 When adding a new privilege, be certain to also determine whether it should
85 be listed in
86 .Fn prison_priv_check ,
87 which includes a complete list of privileges granted to the root user in
88 .Xr jail 2 .
89 .Pp
90 Certain catch-all privileges exist, such as
91 .Dv PRIV_DRIVER ,
92 intended to be used by device drivers, rather than adding a new
93 driver-specific privilege.
94 .Sh RETURN VALUES
95 Typically, 0 will be returned for success, and
96 .Er EPERM
97 will be returned on failure.
98 Most consumers of
99 .Nm
100 will wish to directly return the error code from a failed privilege check to
101 user space; a small number will wish to translate it to another error code
102 appropriate to a specific context.
103 .Pp
104 When designing new APIs, it is preferable to return explicit errors from a
105 call if privilege is not granted rather than changing the semantics of the
106 call but returning success.
107 For example, the behavior exhibited by
108 .Xr stat 2 ,
109 in which the generation field is optionally zero'd out when there is
110 insufficient privilege is highly undesirable, as it results in frequent
111 privilege checks, and the caller is unable to tell if an access control
112 failure occurred.
113 .Sh SEE ALSO
114 .Xr jail 2
115 .\".Xr ucred 9
116 .Sh AUTHORS
117 The
118 .Nm
119 API and implementation were created by
120 .An Robert Watson
121 under contract to
122 nCircle Network Security, Inc.