chiark / gitweb /
* summer works even if passed multiple option-containing args.
[chiark-utils.git] / cprogs / really.8
1 .TH really 8 2001-10-21 chiark-backup
2 .SH NAME
3 really \- gain privilege or run commands a different user
4 .SH SYNOPSIS
5 .B really
6 .RI [ options ]
7 .RI [ "command args... " ]
8 .SH DESCRIPTION
9 .B really
10 checks whether the caller is allowed, and if it is it changes its uids
11 and gids according to the command line options and executes the
12 specified command.
13 .PP
14 If no options are specified, the uid will be set to 0 and the gids
15 will be left unchanged.
16 .PP
17 If no command is specified,
18 .B really
19 will run
20 .BR "$SHELL -i" .
21 .PP
22 A caller is allowed if it has write access to
23 .BR /etc/inittab .
24 This is most easily achieved by creating or using a suitable group,
25 containing all the appropriate users, and making
26 .B /etc/inittab
27 group-owned by that group and group-writeable.
28 .SH OPTIONS
29 .TP
30 \fB-u\fR \fIusername\fR | \fB--user\fR \fIusername\fR
31 Sets the uid, gid, and supplementary group list, according to
32 .IR username 's
33 entry in the password and group databases.
34 .TP
35 \fB-i\fR \fIusername\fR | \fB--useronly\fR \fIusername\fR
36 Sets only the uid according to
37 .IR username 's
38 entry in the password database.
39 .TP
40 \fB-I\fR \fIuid\fR | \fB--uidonly\fR \fIuid\fR
41 Sets the uid to the numeric value
42 .I uid
43 (which need not correspond to any existing user in the password
44 database).
45 .TP
46 \fB-g\fR \fIgroupname\fR | \fB--group\fR \fIgroupname\fR
47 .I groupname
48 is looked up in the group database and its gid is appended to the
49 process's supplementary groups list.  If this is the first gid
50 specified it will also be set as the primary gid.
51 .TP
52 \fB-G\fR \fIgid\fR | \fB--gid\fR \fIgid\fR
53 .I gid
54 is appended to the process's supplementary groups list.
55 .RI ( gid
56 need not correspond to any existing group in the group database.)  If
57 this is the first gid specified it will also be set as the primary
58 gid.
59 .TP
60 \fB-z\fR | \fB--groupsclear\fR
61 Clears the process's supplementary groups list.  When using this
62 option you must also specify
63 .B -g
64 or
65 .BR -G .
66 The process's groups will then be exactly those specified.  The
67 relative position of
68 .B -z
69 in the argument list is not relevant.
70 .TP
71 .B \-\-
72 Indicates the end of the options.  The next argument (if present) will
73 be interpreted as the command name, even if it starts with a hyphen.
74 .SH SECURITY CONSIDERATIONS
75 .B really
76 is designed so that installing it setuid root is extremely unlikely to
77 compromise the security of any system.  It will check using
78 .BR access (2)
79 whether the real user is allowed to write to
80 .B /etc/inittab
81 and if this check fails
82 .B really
83 will exit without even attempting to parse its command line.
84 .PP
85 .B really
86 is
87 .B not
88 designed to be resistant to malicious command line arguments.  Do not
89 allow untrusted processes to pass options to really, or to specify the
90 command to be run.  Whether it is safe to allow relatively untrusted
91 processes to pass options to the command which is to be run depends on
92 the behaviour of that command and its security status.
93 .PP
94 Attempting to use
95 .B really
96 to drop privilege is dangerous unless the calling environment is very
97 well understood.  There are many inherited process properties and
98 resources which might be used by the callee to escalate its privilege
99 to that of the (root-equivalent) caller.  For this function, it is
100 usually better to use
101 .B userv
102 if possible.
103 .SH ENVIRONMENT
104 .B really
105 does not manipulate the environment at all.  The calling program is
106 run in exactly the same environment as the caller passes to
107 .BR really .
108 In particular,
109 .B really
110 will not add
111 .B sbin
112 directories to
113 .B PATH
114 so
115 .BR really -enabled
116 accounts will usually need to have these directories on their
117 configured
118 .B PATH
119 to start with.
120 .PP
121 .B SHELL
122 is used to find the default shell to use in interactive mode (ie, when
123 no command is specified).
124 .SH AUTHOR
125 This version of
126 .B really
127 was written by Ian Jackson <ian@chiark.greenend.org.uk>.
128 .PP
129 It and this manpage are Copyright (C) 1992-5,2003 Ian Jackson
130 <ian@chiark.greenend.org.uk>.
131 .PP
132 .B really
133 is free software; you can redistribute it and/or modify
134 it under the terms of the GNU General Public License as
135 published by the Free Software Foundation; either version 2,
136 or (at your option) any later version.
137 .PP
138 .B really
139 is distributed in the hope that it will be useful, but
140 WITHOUT ANY WARRANTY; without even the implied warranty of
141 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
142 GNU General Public License for more details.
143 .PP
144 You should have received a copy of the GNU General Public
145 License along with this file; if not, write to the Free Software
146 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
147 .SH AVAILABILITY
148 .B really
149 is currently part of
150 .B chiark-utils
151 and is available for download from
152 ftp.chiark.greenend.org.uk in /users/ian/chiark-utils/,
153 in source and pre-compiled binary form, and also from Ian Jackson's
154 cvsweb.
155 .SH "SEE ALSO"
156 .BR userv (1),
157 .BR access (2),
158 .BR setresuid (2),
159 .BR setresgid (2),
160 .BR setgroups (2)