Current Stable Release
The current stable release of the sudo 1.9 branch is version
For the sudo 1.8 branch, see the legacy releases
For full details of all changes, see the ChangeLog
file or view the commit history via
Major changes between version 1.9.1 and 1.9.0:
- Fixed an AIX-specific problem when I/O logging was enabled.
The terminal device was not being properly set to raw mode.
- Corrected handling of sudo_logsrvd connections without
associated I/O log data. This fixes support for RejectMessage
as well as AcceptMessage when the expect_iobufs flag is not
- Added an iolog_path entry to the JSON-format event
log produced by sudo_logsrvd. Previously, it was
only possible to determine the I/O log file an event belonged
to using sudo-format logs.
- Fixed the bundle IDs for sudo-logsrvd and sudo-python
- I/O log files produced by the sudoers plugin now clear the write
bits on the I/O log timing file when the log is complete. This
is consistent with how sudo_logsrvd indicates that a log is
- The sudoreplay utility has a new -F
(follow) command line option to allow replaying a session
that is still in progress, similar to tail -f.
- The @include and @includedir directives
can be used in sudoers instead of #include and
#includedir. In addition, include paths may now
have embedded white space by either using a double-quoted
string or escaping the space characters with a backslash.
- Fixed some Solaris 11.4 compilation errors.
- When running a command in a pty, sudo will no longer try to
suspend itself if the user's tty has been revoked (for instance
when the parent ssh daemon is killed). This fixes a bug where
sudo would continuously suspend the command (which would succeed),
then suspend itself (which would fail due to the missing tty)
and then resume the command.
- If sudo's event loop fails due to the tty being revoked,
remove the user's tty events and restart the event loop
(once). This fixes a problem when running sudo reboot
in a pty on some systems. When the event loop exited
unexpectedly, sudo would kill the command running in the
pty, which in the case of reboot, could lead to
the system being in a half-rebooted state.
- Fixed a regression introduced in sudo 1.8.23 in the LDAP and
SSSD back-ends where a missing sudoHost attribute
was treated as an ALL wildcard value. A
sudoRole with no sudoHost attribute is
now ignored as it was prior to version 1.8.23.
- The audit plugin API has been changed slightly. The sudo front-end
now audits an accept event itself after all approval plugins are
run and the I/O logging plugins (if any) are opened. This makes
it possible for an audit plugin to only log a single overall
accept event if desired.
- The sudoers plugin can now be loaded as an audit plugin. Logging
of successful commands is now performed in the audit plugin's
accept function. As a result, commands are now only logged if
allowed by sudoers and all approval plugins. Commands rejected
by an approval plugin are now also logged by the sudoers plugin.
- Romanian translation for sudo and sudoers from
- Fixed a regression introduced in sudo 1.9.0 where sudoedit
did not remove its temporary files after installing them.
- Fixed a regression introduced in sudo 1.9.0 where the
iolog_file setting in sudoers and
sudo_logsrvd.conf caused an error if the file name
ended in six or more X's.
Major changes between version 1.9.0 and 1.8.31p1:
- Fixed a test failure in the
strsig_test on FreeBSD.
- The maximum length of a conversation reply has been increased
from 255 to 1023 characters. This allows for longer user passwords.
- Sudo now includes a logging daemon, sudo_logsrvd, which can
be used to implement centralized logging of I/O logs.
TLS connections are supported when sudo is
configured with the --enable-openssl option.
For more information, see the
manuals as well as the log_servers setting in the
The --disable-log-server and --disable-log-client
configure options can be used to disable building the I/O
log server and/or remote I/O log support in the sudoers
- The new sudo_sendlog utility can be used to test
sudo_logsrvd or send existing sudo I/O logs to a
- It is now possible to write sudo plugins in Python 4 when
sudo is configured with the --enable-python option.
See the sudo_plugin_python
manual for details.
Sudo 1.9.0 comes with several Python example plugins that get
installed sudo's examples directory.
The sudo blog article What's
new in sudo 1.9: Python includes a simple tutorial on
writing python plugins.
- Sudo now supports an audit plugin type. An audit plugin
receives accept, reject, exit and error messages and can be used
to implement custom logging that is independent of the underlying
security policy. Multiple audit plugins may be specified in
the sudo.conf file. A sample audit plugin is included that
writes logs in JSON format.
- Sudo now supports an approval plugin type. An
approval plugin is run only after the main security policy
(such as sudoers) accepts a command to be run. The approval
policy may perform additional checks, potentially interacting
with the user. Multiple approval plugins may be specified
in the sudo.conf file. Only if all approval plugins succeed
will the command be allowed.
- Sudo's -S command line option now causes
the sudo conversation function to write to the standard
output or standard error instead of the terminal device.
- Fixed a bug where if a #include or #includedir directive was the
last line in sudoers and there was no final newline character, it
was silently ignored.
- It is now possible to use Cmd_Alias instead of
Cmnd_Alias in sudoers for people who find the
former more natural.
- The new pam_ruser and pam_rhost sudoers
settings can be used to enable or disable setting the PAM
remote user and/or host values during PAM session setup.
- More than one SHA-2 digest may now be specified for a single
command. Multiple digests must be separated by a comma.
- It is now possible to specify a SHA-2 digest in conjunction
with the ALL reserved word in a command specification.
This allows one to give permission to run any command that
matches the specified digest, regardless of its path.
- sudo and sudo_logsrvd now create
an extended I/O log info file in JSON format that contains
additional information about the command that was run, such
as the host name. The sudoreplay utility uses this file
in preference to the legacy log file.
- The sudoreplay utility can now match on a host
name in list mode. The list output also now includes the
host name if one is present in the log file.
- For sudo -i, if the target user's home directory does not
exist, sudo will now warn about the problem but run the command
in the current working directory. Previously, this was a fatal
Debian bug #598519.
- The command line arguments in the SUDO_COMMAND environment
variable are now truncated at 4096 characters. This avoids an
Argument list too long error when executing a command with a
large number of arguments.
Debian bug #596631.
- Sudo now properly ends the PAM transaction when the user
authenticates successfully but sudoers denies the command.
Debian bug #669687.
- The sudoers grammar in the manual now indicates that sudoedit
requires one or more arguments.
Debian bug #571621.
- When copying the edited files to the original path, sudoedit now
allocates any additional space needed before writing. Previously,
it could truncate the destination file if the file system was
- Fixed an issue where PAM session modules could be called with
the wrong user name when multiple users in the passwd database
share the the same user-ID.
Debian bug #734752.
- Sudo command line options that take a value may only be specified
once. This is to help guard against problems caused by poorly
written scripts that invoke sudo with user-controlled input.