Imported Upstream version 1.8.7
[debian/sudo] / doc / UPGRADE
1 Notes on upgrading from an older release
2 ========================================
3
4 o Upgrading from a version prior to 1.8.7:
5
6     Sudo now stores its libexec files in a "sudo" sub-directory
7     instead of in libexec itself.  For backwards compatibility, if
8     the plugin is not found in the default plugin directory, sudo
9     will check the parent directory default directory ends in "/sudo".
10
11     The default sudo plugins now all use the .so extension, regardless
12     of the extension used by native shared libraries.  For backwards
13     compatibility, sudo on HP-UX will also search for a plugin with
14     an .sl extension if the .so version is not found.
15
16     Handling of users belonging to a large number of groups has
17     changed.  Previously, sudo would only use the group list from
18     the kernel unless the system_group plugin was enabled in sudoers.
19     Now, sudo will query the groups database if the user belongs
20     to the maximum number of groups supported by the kernel.  See
21     the group_source and max_groups settings in the sudo.conf manual
22     for details.
23
24 o Upgrading from a version prior to 1.8.2:
25
26     When matching Unix groups in the sudoers file, sudo will now
27     match based on the name of the group as it appears in sudoers
28     instead of the group ID.  This can substantially reduce the
29     number of group lookups for sudoers files that contain a large
30     number of groups.  There are a few side effects of this change.
31
32     1) Unix groups with different names but the same group ID are
33        can no longer be used interchangeably.  Sudo will look up all
34        of a user's groups by group ID and use the resulting group
35        names when matching sudoers entries.  If there are multiple
36        groups with the same ID, the group name returned by the
37        system getgrgid() library function is the name that will be
38        used when matching sudoers entries.
39
40     2) Unix group names specified in the sudoers file that are
41        longer than the system maximum will no longer match.  For
42        instance, if there is a Unix group "fireflie" on a system
43        where group names are limited to eight characters, "%fireflies"
44        in sudoers will no longer match "fireflie".  Previously, a
45        lookup by name of the group "fireflies" would have matched
46        the "fireflie" group on most systems.
47
48 o Upgrading from a version prior to 1.8.1:
49
50     Changes in the sudoers parser could result in parse errors for
51     existing sudoers file.  These changes cause certain erroneous
52     entries to be flagged as errors where before they allowed.
53     Changes include:
54
55     Combining multiple Defaults entries with a backslash.  E.g.
56
57         Defaults set_path \
58         Defaults syslog
59
60     which should be:
61
62         Defaults set_path
63         Defaults syslog
64
65     Also, double-quoted strings with a missing end-quote are now
66     detected and result in an error.  Previously, text starting a
67     double quote and ending with a newline was ignored.  E.g.
68
69         Defaults set_path"foo
70
71     In previous versions of sudo, the `"foo' portion would have
72     been ignored.
73
74     To avoid problems, sudo 1.8.1's "make install" will not install
75     a new sudo binary if the existing sudoers file has errors.
76
77     In Sudo 1.8.1 the "noexec" functionality has moved out of the
78     sudoers policy plugin and into the sudo front-end.  As a result,
79     the path to the noexec file is now specified in the sudo.conf
80     file instead of the sudoers file.  If you have a sudoers file
81     that uses the "noexec_file" option, you will need to move the
82     definition to the sudo.conf file instead.
83
84     Old style in /etc/sudoers:
85         Defaults noexec_file=/usr/local/libexec/sudo_noexec.so
86
87     New style in /etc/sudo.conf:
88         Path noexec /usr/local/libexec/sudo_noexec.so
89
90 o Upgrading from a version prior to 1.8.0:
91
92     Starting with version 1.8.0, sudo uses a modular framework to
93     support policy and I/O logging plugins.  The default policy
94     plugin is "sudoers" which provides the traditional sudoers
95     evaluation and I/O logging.  Plugins are typically located in
96     /usr/libexec or /usr/local/libexec, though this is system-dependent.
97     The sudoers plugin is named "sudoers.so" on most systems.
98
99     The sudo.conf file, usually stored in /etc, is used to configure
100     plugins.  This file is optional--if no plugins are specified
101     in sudo.conf, the "sudoers" plugin is used.  See the sample.sudo.conf
102     file in the doc directory or refer to the updated sudo manual
103     to see how to configure sudo.conf.
104
105     The "askpass" setting has moved from the sudoers file to the
106     sudo.conf file.  If you have a sudoers file that uses the
107     "askpass" option, you will need to move the definition to the
108     sudo.conf file.
109
110     Old style in /etc/sudoers:
111         Defaults askpass=/usr/X11R6/bin/ssh-askpass
112
113     New style in /etc/sudo.conf:
114         Path askpass /usr/X11R6/bin/ssh-askpass
115
116 o Upgrading from a version prior to 1.7.5:
117
118     Sudo 1.7.5 includes an updated LDAP schema with support for
119     the sudoNotBefore, sudoNotAfter and sudoOrder attributes.
120
121     The sudoNotBefore and sudoNotAfter attribute support is only
122     used when the SUDOERS_TIMED setting is enabled in ldap.conf.
123     If enabled, those attributes are used directly when constructing
124     an LDAP filter.  As a result, your LDAP server must have the
125     updated schema if you want to use sudoNotBefore and sudoNotAfter.
126
127     The sudoOrder support does not affect the LDAP filter sudo
128     constructs and so there is no need to explicitly enable it in
129     ldap.conf.  If the sudoOrder attribute is not present in an
130     entry, a value of 0 is used.  If no entries contain sudoOrder
131     attributes, the results are in whatever order the LDAP server
132     returns them, as in past versions of sudo.
133
134     Older versions of sudo will simply ignore the new attributes
135     if they are present in an entry.  There are no compatibility
136     problems using the updated schema with older versions of sudo.
137
138 o Upgrading from a version prior to 1.7.4:
139
140     Starting with sudo 1.7.4, the time stamp files have moved from
141     /var/run/sudo to either /var/db/sudo, /var/lib/sudo or /var/adm/sudo.
142     The directories are checked for existence in that order.  This
143     prevents users from receiving the sudo lecture every time the
144     system reboots.  Time stamp files older than the boot time are
145     ignored on systems where it is possible to determine this.
146
147     Additionally, the tty_tickets sudoers option is now enabled by
148     default.  To restore the old behavior (single time stamp per user),
149     add a line like:
150         Defaults !tty_tickets
151     to sudoers or use the --without-tty-tickets configure option.
152
153     The HOME and MAIL environment variables are now reset based on the
154     target user's password database entry when the env_reset sudoers option
155     is enabled (which is the case in the default configuration).  Users
156     wishing to preserve the original values should use a sudoers entry like:
157         Defaults env_keep += HOME
158     to preserve the old value of HOME and
159         Defaults env_keep += MAIL
160     to preserve the old value of MAIL.
161
162     NOTE: preserving HOME has security implications since many programs
163     use it when searching for configuration files.  Adding HOME to env_keep
164     may enable a user to run unrestricted commands via sudo.
165
166     The default syslog facility has changed from "local2" to "authpriv"
167     (or "auth" if the operating system doesn't have "authpriv").
168     The --with-logfac configure option can be used to change this
169     or it can be changed in the sudoers file.
170
171 o Upgrading from a version prior to 1.7.0:
172
173     Starting with sudo 1.7.0, comments in the sudoers file must not
174     have a digit or minus sign immediately after the comment character
175     ('#').  Otherwise, the comment may be interpreted as a user or
176     group ID.
177
178     When sudo is build with LDAP support the /etc/nsswitch.conf file is
179     now used to determine the sudoers sea ch order.  sudo will default to
180     only using /etc/sudoers unless /etc/nsswitch.conf says otherwise.
181     This can be changed with an nsswitch.conf line, e.g.:
182         sudoers:        ldap files
183     Would case LDAP to be searched first, then the sudoers file.
184     To restore the pre-1.7.0 behavior, run configure with the
185     --with-nsswitch=no flag.
186
187     Sudo now ignores user .ldaprc files as well as system LDAP defaults.
188     All LDAP configuration is now in /etc/ldap.conf (or whichever file
189     was specified by configure's --with-ldap-conf-file option).
190     If you are using TLS, you may now need to specify:
191         tls_checkpeer no
192     in sudo's ldap.conf unless ldap.conf references a valid certificate
193     authority file(s).
194
195     Please also see the NEWS file for a list of new features in
196     sudo 1.7.0.
197
198 o Upgrading from a version prior to 1.6.9:
199
200     Starting with sudo 1.6.9, if an OS supports a modular authentication
201     method such as PAM, it will be used by default by configure.
202
203     Environment variable handling has changed significantly in sudo
204     1.6.9.  Prior to version 1.6.9, sudo would preserve the user's
205     environment, pruning out potentially dangerous variables.
206     Beginning with sudo 1.6.9, the environment is reset to a default
207     set of values with only a small number of "safe" variables
208     preserved.  To preserve specific environment variables, add
209     them to the "env_keep" list in sudoers.  E.g.
210
211         Defaults env_keep += "EDITOR"
212
213     The old behavior can be restored by negating the "env_reset"
214     option in sudoers.  E.g.
215
216         Defaults !env_reset
217
218     There have  also been changes to how the "env_keep" and
219     "env_check" options behave.
220
221     Prior to sudo 1.6.9, the TERM and PATH environment variables
222     would always be preserved even if the env_keep option was
223     redefined.  That is no longer the case.  Consequently, if
224     env_keep is set with "=" and not simply appended to (i.e. using
225     "+="), PATH and TERM must be explicitly included in the list
226     of environment variables to keep.  The LOGNAME, SHELL, USER,
227     and USERNAME environment variables are still always set.
228
229     Additionally, the env_check setting previously had no effect
230     when env_reset was set (which is now on by default).  Starting
231     with sudo 1.6.9, environment variables listed in env_check are
232     also preserved in the env_reset case, provided that they do not
233     contain a '/' or '%' character.  Note that it is not necessary
234     to also list a variable in env_keep--having it in env_check is
235     sufficient.
236
237     The default lists of variables to be preserved and/or checked
238     are displayed when sudo is run by root with the -V flag.
239
240 o Upgrading from a version prior to 1.6.8:
241
242     Prior to sudo 1.6.8, if /var/run did not exist, sudo would put
243     the time stamp files in /tmp/.odus.  As of sudo 1.6.8, the
244     time stamp files will be placed in /var/adm/sudo or /usr/adm/sudo
245     if there is no /var/run directory.  This directory will be
246     created if it does not already exist.
247
248     Previously, a sudoers entry that explicitly prohibited running
249     a command as a certain user did not override a previous entry
250     allowing the same command.  This has been fixed in sudo 1.6.8
251     such that the last match is now used (as it is documented).
252     Hopefully no one was depending on the previous (buggy) behavior.
253
254 o Upgrading from a version prior to 1.6:
255
256     As of sudo 1.6, parsing of runas entries and the NOPASSWD tag
257     has changed.  Prior to 1.6, a runas specifier applied only to
258     a single command directly following it.  Likewise, the NOPASSWD
259     tag only allowed the command directly following it to be run
260     without a password.  Starting with sudo 1.6, both the runas
261     specifier and the NOPASSWD tag are "sticky" for an entire
262     command list.  So, given the following line in sudo < 1.6
263
264         millert ALL=(daemon) NOPASSWD:/usr/bin/whoami,/bin/ls
265
266     millert would be able to run /usr/bin/whoami as user daemon
267     without a password and /bin/ls as root with a password.
268
269     As of sudo 1.6, the same line now means that millert is able
270     to run run both /usr/bin/whoami and /bin/ls as user daemon
271     without a password.  To expand on this, take the following
272     example:
273
274         millert ALL=(daemon) NOPASSWD:/usr/bin/whoami, (root) /bin/ls, \
275             /sbin/dump
276
277     millert can run /usr/bin/whoami as daemon and /bin/ls and
278     /sbin/dump as root.  No password need be given for either
279     command.  In other words, the "(root)" sets the default runas
280     user to root for the rest of the list.  If we wanted to require
281     a password for /bin/ls and /sbin/dump the line could be written
282     as:
283
284         millert ALL=(daemon) NOPASSWD:/usr/bin/whoami, \
285             (root) PASSWD:/bin/ls, /sbin/dump
286
287     Additionally, sudo now uses a per-user time stamp directory
288     instead of a time stamp file.  This allows tty time stamps to
289     simply be files within the user's time stamp dir.  For the
290     default, non-tty case, the time stamp on the directory itself
291     is used.
292
293     Also, the temporary file used by visudo is now /etc/sudoers.tmp
294     since some versions of vipw on systems with shadow passwords use
295     /etc/stmp for the temporary shadow file.
296
297 o Upgrading from a version prior to 1.5:
298
299     By default, sudo expects the sudoers file to be mode 0440 and
300     to be owned by user and group 0.  This differs from version 1.4
301     and below which expected the sudoers file to be mode 0400 and
302     to be owned by root.  Doing a `make install' will set the sudoers
303     file to the new mode and group.  If sudo encounters a sudoers
304     file with the old permissions it will attempt to update it to
305     the new scheme.  You cannot, however, use a sudoers file with
306     the new permissions with an old sudo binary.  It is suggested
307     that if have a means of distributing sudo you distribute the
308     new binaries first, then the new sudoers file (or you can leave
309     sudoers as is and sudo will fix the permissions itself as long
310     as sudoers is on a local file system).