Stable Release (original) (raw)
The current stable release of the sudo 1.9 branch is version1.9.16p1. For the sudo 1.8 branch, see legacy releases.
For full details of all changes, see the ChangeLogfile or view the commit history viamercurial orGitHub
Sudo 1.9.16p1
- Fixed the test for cross-compiling when checking for C99 snprintf(). The changes made to the test in sudo 1.9.16 resulted in a different problem.GitHub issue #386.
- Fixed the date used by the exit record in sudo-format log files. This was a regression introduced in sudo 1.9.16 and only affected file-based logs, not syslog.GitHub issue #405.
- Fixed the root cause of the “unable to find terminal name for device” message when running sudo on AIX when no terminal is present. In sudo 1.9.16 this was turned from a debug message into a warning.GitHub issue #408.
- When a duplicate alias is found in the sudoers file, the warning message now includes the file and line number of the previous definition.
- Added support for the
--with-secure-path-value=no
configure option to allow packagers to ship the default sudoers file with the secure path line commented out. - Sudo no longer sends mail when a user runs
sudo -nv
orsudo -nl
, even if mail_badpass or mail_always are set. Sudo already avoids logging to a file or syslog in this case.Bug #1072.
Sudo 1.9.16p1 downloads 119
Sudo 1.9.16
- Added the cmddenial_message sudoers option to provide additional information to the user when a command is denied by the sudoers policy. The default message is still displayed.
- The time stamp used for file-based logs is now more consistent with the time stamp produced by syslog.GitHub issue #327.
- Sudo will now warn the user if it can detect the user’s terminal but cannot determine the path to the terminal device. The sudoers time stamp file will now use the terminal device number directly.GitHub issue #329.
- The embedded copy of zlib has been updated to version 1.3.1.
- Improved error handling if generating the list of signals and signal names fails at build time.
- Fixed a compilation issue on Linux systems without process_vm_readv().
- Fixed cross-compilation with WolfSSL.
- Added a json_compact value for the sudoers log_format option which can be used when logging to a file. The existing jsonvalue has been aliased to json_pretty. In a future release,json will be an alias for json_compact.GitHub issue #357.
- A new pam_silent sudoers option has been added which may be negated to avoid suppressing output from PAM authentication modules.GitHub issue #216.
- Fixed several cvtsudoers JSON output problems. GitHub issues #369,#370,#371,#373,#381.
- When sudo runs a command in a pseudo-terminal and the user’s terminal is revoked, the pseudo-terminal’s foreground process group will now receive
SIGHUP
before the terminal is revoked. This emulates the behavior of the session leader exiting and is consistent with what happens when, for example, an ssh session is closed.GitHub issue #367. - Fixed make test with Python 3.12.GitHub issue #374.
- In schema.ActiveDirectory, fixed the quoting in the example command.GitHub issue #376.
- Paths specified via a Chdir_Spec or Chroot_Spec in sudoers may now be double-quoted.
- Sudo insults are now included by default, but disabled unless the
--with-insults
configure option is specified or the _insults_sudoers option is enabled. - The default sudoers file now enables the secure_path option by default and preserves the
EDITOR
,VISUAL
, andSUDO_EDITOR
environment variables when running visudo. The new--with-secure-path-value
configure option can be used to set the value of secure_path in the default sudoers file.GitHub issue #387. - A sudoers schema for IBM Directory Server (aka IBM Tivoli Directory Server, IBM Security Directory Server, and IBM Security Verify Directory) is now included.
- When cross-compiling sudo, the configure script now assumes that the snprintf() function is C99-compliant if the C compiler supports the C99 standard. Previously, configure would use sudo’s own snprintf() when cross-compiling.GitHub issue #386.
Sudo 1.9.16 downloads 119
Sudo 1.9.15p5
- Fixed evaluation of the lecture, listpw, verifypw, and_fdexec_ sudoers Defaults settings when used without an explicit value. Previously, if specified without a value they were evaluated as boolean false, even when the negation operator (’!’) was not present.
- Fixed a bug introduced in sudo 1.9.14 that prevented LDAP netgroup queries using the
NETGROUP_BASE
setting from being performed. - Sudo will now transparently rename a user’s lecture file from the older name-based path to the newer user-ID-based path.GitHub issue #342.
- Fixed a bug introduced in sudo 1.9.15 that could cause a memory allocation failure if
sysconf(_SC_LOGIN_NAME_MAX)
fails.Bug #1066.
Sudo 1.9.15p5 downloads 119
Sudo 1.9.15p4
- Fixed a bug introduced in sudo 1.9.15 that could prevent a user’s privileges from being listed by
sudo -l
if the sudoers entry in/etc/nsswitch.conf
contains[SUCCESS=return]
. This did not affect the ability to run commands via sudo.Bug #1063.
Sudo 1.9.15p4 downloads 119
Sudo 1.9.15p3
- Always disable core dumps when sudo sends itself a fatal signal. Fixes a problem where sudo could potentially dump core dump when it re-sends the fatal signal to itself. This is only an issue if the command received a signal that would normally result in a core dump but the command did not actually dump core.
- Fixed a bug matching a command with a relative path name when the sudoers rule uses shell globbing rules for the path name.Bug #1062.
- Permit visudo to be run even if the local host name is not set.GitHub issue #332.
- Fixed an editing error introduced in sudo 1.9.15 that could prevent sudoreplay from replaying sessions correctly.GitHub issue #334.
- Fixed a bug introduced in sudo 1.9.15 where
sudo -l > /dev/null
could hang on Linux systems.GitHub issue #335. - Fixed a bug introduced in sudo 1.9.15 where Solaris privileges specified in sudoers were not applied to the command being run.
Sudo 1.9.15p3 downloads 119
Sudo 1.9.15p2
- Fixed a bug on BSD systems where sudo would not restore the terminal settings on exit if the terminal had parity enabled.GitHub issue #326.
Sudo 1.9.15p2 downloads 119
Sudo 1.9.15p1
- Fixed a bug introduced in sudo 1.9.15 that prevented LDAP-based sudoers from being able to read the ldap.conf file.GitHub issue #325.
Sudo 1.9.15p1 downloads 119
Sudo 1.9.15
- Fixed an undefined symbol problem on older versions of macOS when intercept or log_subcmds are enabled in sudoers.GitHub issue #276.
- Fixed
make check
failure related to getpwent(3) wrapping on NetBSD. - Fixed the warning message for
sudo -l command
when the command is not permitted. There was a missing space between “list” and the actual command due to changes in sudo 1.9.14. - Fixed a bug where output could go to the wrong terminal if_use_pty_ is enabled (the default) and the standard input, output or error is redirected to a different terminal.Bug #1056.
- The
visudo
utility will no longer create an empty file when the specified sudoers file does not exist and the user exits the editor without making any changes.GitHub issue #294. - The AIX and Solaris sudo packages on www.sudo.ws now support_log_subcmds_ and intercept with both 32-bit and 64-bit binaries. Previously, they only worked when running binaries with the same word size as the sudo binary.GitHub issue #289.
- The sudoers source is now logged in the JSON event log. This makes it possible to tell which rule resulted in a match.
- Running
sudo -ll command
now produces verbose output that includes matching rule as well as the path to the sudoers file the matching rule came from. For LDAP sudoers, the name of the matching sudoRole is printed instead. - The embedded copy of zlib has been updated to version 1.3.
- The sudoers plugin has been modified to make it more resilient to ROWHAMMER attacks on authentication and policy matching. This addressesCVE-2023-42465.
- The sudoers plugin now constructs the user time stamp file path name using the user-ID instead of the user name. This avoids a potential problem with user names that contain a path separator (’/’) being interpreted as part of the path name. A similar issue in sudo-rs has been assignedCVE-2023-42456.
- A path separator (’/’) in a user, group or host name is now replaced with an underbar character (’_’) when expanding escapes in
@include
and@includedir
directives as well as the _iolog_file_and iolog_dir sudoers Default settings. - The intercept_verify sudoers option is now only applied when the intercept option is set in sudoers. Previously, it was also applied when log_subcmds was enabled. Sudo 1.9.14 contained an incorrect fix for this.Bug #1058.
- Changes to terminal settings are now performed atomically, where possible. If the command is being run in a pseudo-terminal and the user’s terminal is already in raw mode, sudo will not change the user’s terminal settings. This prevents concurrent sudo processes from restoring the terminal settings to the wrong values.GitHub issue #312.
- Reverted a change from sudo 1.9.4 that resulted in PAM session modules being called with the environment of the command to be run instead of the environment of the invoking user. GitHub issue #318.
- New Indonesian translation fromtranslationproject.org.
- The
sudo_logsrvd
server will now raise its open file descriptor limit to the maximum allowed value when it starts up. Each connection can require up to nine open file descriptors so the default soft limit may be too low. - Better log message when rejecting a command if the _intercept_option is enabled and the intercept_allow_setid option is disabled. Previously, “command not allowed” would be logged and the user had no way of knowing what the actual problem was.
- Sudo will now log the invoking user’s environment as _submitenv_in the JSON logs. The command’s environment (runenv) is no longer logged for commands rejected by the sudoers file or an approval plugin.
Sudo 1.9.15 downloads 119
Sudo 1.9.14p3
- Fixed a crash with Python 3.12 when the sudo Python plugin is unloaded. This only affects
make check
for the Python plugin. - Adapted the sudo Python plugin test output to match Python 3.12.
Sudo 1.9.14p3 downloads 125
Sudo 1.9.14p2
- Fixed a crash on Linux systems introduced in version 1.9.14 when running a command with a
NULL
argv[0]
if log_subcmds or_intercept_ is enabled in sudoers. - Fixed a problem with “stair-stepped” output when piping or redirecting the output of a sudo command that takes user input when running a command in a pseudo-terminal.
- Fixed a bug introduced in sudo 1.9.14 that affects matching sudoers rules containing a
Runas_Spec
with an empty Runas user. These rules should only match when sudo’s-g
option is used but were matching even without the-g
option.GitHub issue #290.
Sudo 1.9.14p2 downloads 125
Sudo 1.9.14p1
- Fixed an invalid free bug in
sudo_logsrvd
that was introduced in version 1.9.14 which could causesudo_logsrvd
to crash. - The sudoers plugin no longer tries to send the terminal name to the log server when no terminal is present. This bug was introduced in version 1.9.14.
Sudo 1.9.14p1 downloads 125
Sudo 1.9.14
- Fixed a bug where if the intercept or log_subcmds sudoers option was enabled and a sub-command was run where the first entry of the argument vector didn’t match the command being run. This resulted in commands like
sudo su -
being killed due to the mismatch. Bug #1050. - The sudoers plugin now canonicalizes command path names before matching (where possible). This fixes a bug where sudo could execute the wrong path if there are multiple symbolic links with the same target and the same base name in sudoers that a user is allowed to run.GitHub issue #228.
- Improved command matching when a chroot is specified in sudoers. The sudoers plugin will now change the root directory id needed before performing command matching. Previously, the root directory was simply prepended to the path that was being processed.
- When NETGROUP_BASE is set in the
ldap.conf
file, sudo will now perform its own netgroup lookups of the host name instead of using the systeminnetgr(3)
function. This guarantees that user and host netgroup lookups are performed using the same LDAP server (or servers). - Fixed a bug introduced in sudo 1.9.13 that resulted in a missing " ; " separator between environment variables and the command in log entries.
- The
visudo
utility now displays a warning when it ignores a file in an include dir such as/etc/sudoers.d
. - When running a command in a pseudo-terminal, sudo will initialize the terminal settings even if it is the background process. Previously, sudo only initialized the pseudo-terminal when running in the foreground. This fixes an issue where a program that checks the window size would read the wrong value when sudo was running in the background.
- Fixed a bug where only the first two digits of the TSID field being was logged.Bug #1046.
- The use_pty sudoers option is now enabled by default. To restore the historic behavior where a command is run in the user’s terminal, add
Defaults !use_pty
to the sudoers file.GitHub issue #258. - Sudo’s
-b
option now works when the command is run in a pseudo-terminal. - When disabling core dumps, sudo now only modifies the soft limit and leaves the hard limit as-is. This avoids problems on Linux when sudo does not have
CAP_SYS_RESOURCE
, which may be the case when run inside a container.GitHub issue #42. - Sudo configuration file paths have been converted to colon-separated lists of paths. This makes it possible to have configuration files on a read-only file system while still allowing for local modifications in a different (writable) directory. The new
--enable-adminconf
configure option can be used to specify a directory that is searched for configuration files in preference to the sysconfdir (which is usually/etc
). - The intercept_verify sudoers option is now only applied when the intercept option is set in sudoers. Previously, it was also applied when log_subcmds was enabled.
- The NETGROUP_QUERY
ldap.conf
parameter can now be disabled for LDAP servers that do not support querying the nisNetgroup object by its nisNetgroupTriple attribute, while still allowing sudo to query the LDAP server directly to determine netgroup membership. - Fixed a long-standing bug where a sudoers rule without an explicit runas list allowed the user to run a command as root and any group instead of just one of the groups that root is a member of. For example, a rule such as
myuser ALL = ALL
would permitsudo -u root -g othergroup
even if root did not belong toothergroup. - Fixed a bug where a sudoers rule with an explicit runas list allowed a user to run sudo commands as themselves. For example, a rule such as
myuser ALL = (root) ALL
, myuser should only allow commands to be run as root (optionally using one of root’s groups). However, the rule also allowed the user to runsudo -u myuser -g myuser command
. - Fixed a bug that prevented the user from specifying a group on the command line via
sudo -g
if the rule’s Runas_Spec contained a Runas_Alias. - Sudo now requires a C99 compiler due to the use of flexible array members.
Sudo 1.9.14 downloads 125
Sudo 1.9.13p3
- Fixed a bug introduced in sudo 1.9.13 that caused a syntax error when list was used as a user or host name.GitHub issue #246.
- Fixed a bug that could cause sudo to hang when running a command in a pseudo-terminal when there is still input buffered after a command has exited.
- Fixed
sudo -U otheruser -l command
. This is a regression in sudo 1.9.13.GitHub issue #248. - Fixed
sudo -l command args
when matching a command in sudoers with command line arguments. This is a regression in sudo 1.9.13.GitHub issue #249.
Sudo 1.9.13p3 downloads 153
Sudo 1.9.13p2
- Fixed the
--enable-static-sudoers
option, broken in sudo 1.9.13.GitHub issue #245. - Fixed a potential double-free bug when matching a sudoers rule that contains a per-command chroot directive (
CHROOT=dir
). This bug was introduced in sudo 1.9.8.
Sudo 1.9.13p2 downloads 114
Sudo 1.9.13p1
- Fixed a typo in the configure script that resulted in a line like “]: command not found” in the output.GitHub issue #238.
- Corrected the order of the C23
[[noreturn]]
attribute in function prototypes. This fixes a build error with GCC 13.GitHub issue #239. - The check make target misbehaved when there was more than one version of the UTF-8 C locale in the output of
locale -a
.GitHub issue #241. - Removed a dependency on the
AC_SYS_YEAR2038
macro in configure.ac. This was added in autoconf 2.72 but sudo’s configure.ac only required autoconf 2.70.GitHub issue #242. - Relaxed the autoconf version requirement to version 2.69.
Sudo 1.9.13p1 downloads 114
Sudo 1.9.13
- Fixed a bug running relative commands via sudo when _log_subcmds_is enabled.GitHub issue #194.
- Fixed a signal handling bug when running sudo commands in a shell script. Signals were not being forwarded to the command when the sudo process was not run in its own process group.
- Fixed a bug in the
cvtsudoers
LDIF parsing when the file ends without a newline and a backslash is the last character of the file. - Fixed a potential use-after-free bug with cvtsudoers filtering.GitHub issue #198.
- Added a reminder to the default lecture that the password will not echo. This line is only displayed when the pwfeedback option is disabled.GitHub issue #195.
- Fixed potential memory leaks in error paths.GitHub issue #199.GitHub issue #202.
- Fixed potential NULL dereferences on memory allocation failure.GitHub issue #204.GitHub issue #211.
- Sudo now uses C23-style attributes in function prototypes instead of gcc-style attributes if supported.
- Added a new list pseudo-command in sudoers to allow a user to list another user’s privileges. Previously, only root or a user with the ability to run any command as either root or the target user on the current host could use the -U option. This also includes a fix to the log entry when a user lacks permission to run
sudo -U otheruser -l command
. Previously, the logs would indicate that the user tried to run the actual command, now the log entry includes the list operation. - JSON logging now escapes control characters if they happen to appear in the command or environment.
- New Albanian translation fromtranslationproject.org.
- Regular expressions in sudoers or logsrvd.conf may no longer contain consecutive repetition operators. This is implementation- specific behavior according to POSIX, but some implementations will allocate excessive amounts of memory. This mainly affects the fuzzers.
- Sudo now builds AIX-style shared libraries and dynamic shared objects by default instead of svr4-style. This means that the default sudo plugins are now .a (archive) files that contain a .so shared object file instead of bare .so files. This was done to improve compatibility with the AIX Freeware ecosystem, specifically, the AIX Freeware build of OpenSSL. Sudo will still load svr4-style .so plugins and if a .so file is requested, either via sudo.conf or the sudoers file, and only the .a file is present, sudo will convert the path from plugin.so to plugin.a(plugin.so) when loading it. This ensures compatibility with existing configurations. To restore the old, pre-1.9.13 behavior, run configure using the –with-aix-soname=svr4 option.
- Sudo no longer checks the ownership and mode of the plugins that it loads. Plugins are configured via either the sudo.conf or sudoers file which are trusted configuration files. These checks suffered from time-of-check vs. time-of-use race conditions and complicate loading plugins that are not simple paths. Ownership and mode checks are still performed when loading the sudo.conf and sudoers files, which do not suffer from race conditions. The sudo.conf developer_mode setting is no longer used.
- Control characters in sudo log messages and
sudoreplay -l
output are now escaped in octal format. Space characters in the command path are also escaped. Command line arguments that contain spaces are surrounded by single quotes and any literal single quote or backslash characters are escaped with a backslash. This makes it possible to distinguish multiple command line arguments from a single argument that contains spaces. - Improved support for DragonFly BSD which uses a different struct procinfo than either FreeBSD or 4.4BSD.
- Fixed a compilation error on Linux arm systems running older kernels that may not define EM_ARM in linux/elf-em.h.GitHub issue #232.
- Fixed a compilation error when LDFLAGS contains -Wl,–no-undefined. Sudo will now link using -Wl,–no-undefined by default if possible.GitHub issue #234.
- Fixed a bug executing a command with a very long argument vector when log_subcmds or intercept is enabled on a system where_intercept_type_ is set to trace.GitHub issue #194.
- When sudo is configured to run a command in a pseudo-terminal but the standard input is not connected to a terminal, the command will now be run as a background process. This works around a problem running sudo commands in the background from a shell script where changing the terminal to raw mode could interfere with the interactive shell that ran the script.GitHub issue #237.
- A missing include file in sudoers is no longer a fatal error unless the error_recovery plugin argument has been set to false.
Sudo 1.9.13 downloads 114
Sudo 1.9.12p2
- Fixed a compilation error on Linux/aarch64.GitHub issue #197.
- Fixed a potential crash introduced in the fixGitHub issue #134. If a user’s sudoers entry did not have any RunAs user’s set, running
sudo -U otheruser -l
would dereference a NULL pointer. - Fixed a bug introduced in sudo 1.9.12 that could prevent sudo from creating a I/O files when the iolog_file sudoers setting contains six or more Xs.
- Fixed a compilation issue on AIX with the native compiler.GitHub issue #231.
- Fixed CVE-2023-22809, a flaw in sudo’s
-e
option (akasudoedit
) that could allow a malicious user with sudoedit privileges to edit arbitrary files. For more information, seeSudoedit can edit arbitrary files.
Sudo 1.9.12p2 downloads 114
Sudo 1.9.12p1
- Sudo’s configure script now does a better job of detecting when the -fstack-clash-protection compiler option does not work.GitHub issue #191.
- Fixed CVE-2022-43995, a potential out-of-bounds write for passwords smaller than 8 characters when passwd authentication is enabled. This does not affect configurations that use other authentication methods such as PAM, AIX authentication or BSD authentication.
- Fixed a build error with some configurations compiling host_port.c.
Sudo 1.9.12p1 downloads 114
Sudo 1.9.12
- Fixed a bug in the ptrace-based intercept mode where the current working directory could include garbage at the end.
- Fixed a compilation error on systems that lack the stdint.h header. Bug #1035.
- Fixed a bug when logging the command’s exit status in intercept mode. The wrong command could be logged with the exit status.
- For ptrace-based intercept mode, sudo will now attempt to verify that the command path name, arguments and environment have not changed from the time when they were authorized by the security policy. The new intercept_verify sudoers setting can be used to control this behavior.
- Fixed running commands with a relative path (e.g. ./foo) in intercept mode. Previously, this would fail if sudo’s current working directory was different from that of the command.
- Sudo now supports passing the execve(2) system call the NULL pointer for the
argv
and/orenvp
arguments when in intercept mode. Linux treats a NULL pointer like an empty array. - The sudoers LDAP schema now allows sudoUser, sudoRunasUser and sudoRunasGroup to include UTF-8 characters, not just 7-bit ASCII.
- Fixed a problem with
sudo -i
on SELinux when the target user’s home directory is not searchable by sudo.GitHub issue #160. - Neovim has been added to the list of visudo editors that support passing the line number on the command line.
- Fixed a bug in sudo’s SHA384 and SHA512 message digest padding.
- Added a new
-N
(no-update) command line option to sudo which can be used to prevent sudo from updating the user’s cached credentials. It is now possible to determine whether or not a user’s cached credentials are currently valid by running:$ sudo -Nnv
and checking the exit value. One use case for this is to indicate in a shell prompt that sudo is “active” for the user. - PAM approval modules are no longer invoked when running sub-commands in intercept mode unless the intercept_authenticate option is set. There is a substantial performance penalty for calling into PAM for each command run. PAM approval modules are still called for the initial command.
- Intercept mode on Linux now uses process_vm_readv(2) and process_vm_writev(2) if available.
- The
XDG_CURRENT_DESKTOP
environment variable is now preserved by default. This makes it possible for graphical applications to choose the correct theme when run via sudo. - On 64-bit systems, if sudo fails to load a sudoers group plugin, it will use system-specific heuristics to try to locate a 64-bit version of the plugin.
- The cvtsudoers manual now documents the JSON and CSV output formats.GitHub issue #172.
- Fixed a bug where sub-commands were not being logged to a remote log server when log_subcmds was enabled.GitHub issue #174.
- The new log_stdin, log_stdout, log_stderr, log_ttyin, and log_ttyout sudoers settings can be used to support more fine-grained I/O logging. The sudo front-end no longer allocates a pseudo-terminal when running a command if the I/O logging plugin requests logging of stdin, stdout, or stderr but not terminal input/output.
- Quieted a libgcrypt run-time initialization warning. This fixes Debian bug #1019428 and Ubuntu bug #1397663.
- Fixed a bug in visudo that caused literal backslashes to be removed from the
EDITOR
environment variable.GitHub issue #179. - The sudo Python plugin now implements the
find_spec
method instead of the the deprecatedfind_module
. This fixes a test failure when a newer version of setuptools that doesn’t includefind_module
is found on the system. - Fixed a bug introduced in sudo 1.9.9 where sudo_logsrvd created the process ID file, usually
/var/run/sudo/sudo_logsrvd.pid
, as a directory instead of a plain file. The same bug could result in I/O log directories that end in six or more X’s being created literally in addition to the name being used as a template for the mkdtemp(3) function. - Fixed a long-standing bug where a sudoers rule with a command line argument of “”, which indicates the command may be run with no arguments, would also match a literal "" on the command line.GitHub issue #182.
- Added the
-I
option to visudo which only edits the main sudoers file. Include files are not edited unless a syntax error is found. - Fixed
sudo -l -U otheruser
output when the runas list is empty. Previously, sudo would list the invoking user instead of the list user.GitHub issue #183. - Fixed the display of command tags and options in
sudo -l
output when the RunAs user or group changes. A new line is started for RunAs changes which means we need to display the command tags and options again.GitHub issue #184. - The sesh helper program now uses getopt_long(3) to parse the command line options.
- The embedded copy of zlib has been updated to version 1.2.13.
- Fixed a bug that prevented event log data from being sent to the log server when I/O logging was not enabled. This only affected systems without PAM or configurations where the pam_session and_pam_setcred_ options were disabled in the sudoers file.
- Fixed a bug where
sudo -l
output included a carriage return after the newline. This is only needed when displaying to a terminal in raw mode.Bug #1042.
Sudo 1.9.12 downloads 114
Sudo 1.9.11p3
- Fixed “connection reset” errors on AIX when running shell scripts with the intercept or log_subcmds sudoers options enabled.Bug #1034.
- Fixed very slow execution of shell scripts when the _intercept_or log_subcmds sudoers options are set on systems that enable Nagle’s algorithm on the loopback device, such as AIX.Bug #1034.
Sudo 1.9.11p3 downloads 114
Sudo 1.9.11p2
- Fixed a compilation error on Linux/x86_64 with the x32 ABI.
- Fixed a regression introduced in 1.9.11p1 that caused a warning when logging to
sudo_logsrvd
if the command returned no output.
Sudo 1.9.11p2 downloads 114
Sudo 1.9.11p1
- Correctly handle
EAGAIN
in the I/O read/right events. This fixes a hang seen on some systems when piping a large amount of data through sudo, such as via rsync.Bug #963. - Changes to avoid implementation or unspecified behavior when bit shifting signed values in the protobuf library.
- Fixed a compilation error on Linux/aarch64.
- Fixed the configure check for
seccomp(2)
support on Linux. - Corrected the EBNF specification for tags in the sudoers manual page.GitHub issue #153.
Sudo 1.9.11p1 downloads 114
Sudo 1.9.11
- Fixed a crash in the Python module with Python 3.9.10 on some systems. Additionally,
make check
now passes for Python 3.9.10. - Error messages sent via email now include more details, including the file name and the line number and column of the error. Multiple errors are sent in a single message. Previously, only the first error was included.
- Fixed logging of parse errors in JSON format. Previously, the JSON logger would not write entries unless the command and runuser were set. These may not be known at the time a parse error is encountered.
- Fixed a potential crash parsing sudoers lines larger than twice the value of
LINE_MAX
on systems that lack thegetdelim()
function. - The tests run by
make check
now unset the LANGUAGE environment variable. Otherwise, localization strings will not match if LANGUAGE is set to a non-English locale.Bug #1025. - The “starttime” test now passed when run under Debian faketime.Bug #1026.
- The Kerberos authentication module now honors the custom password prompt if one has been specified.
- The embedded copy of zlib has been updated to version 1.2.12.
- Updated the version of libtool used by sudo to version 2.4.7.
- Sudo now defines
_TIME_BITS
to 64 on systems that define__TIMESIZE
in the header files (currently only GNU libc). This is required to allow the use of 64-bit time values on some 32-bit systems. - Sudo’s intercept and log_subcmds options no longer force the command to run in its own pseudo-terminal. It is now also possible to intercept the
system(3)
function. - Fixed a bug in
sudo_logsrvd
when run in store-first relay mode where the commit point messages sent by the server were incorrect if the command was suspended or received a window size change event. - Fixed a potential crash in
sudo_logsrvd
when the _tls_dhparams_configuration setting was used. - The intercept and log_subcmds functionality can now use
ptrace(2)
on Linux systems that supportseccomp(2)
filtering. This has the advantage of working for both static and dynamic binaries and can work with sudo’s SELinux RBAC mode. The following architectures are currently supported: i386, x86_64, aarch64, arm, mips (log_subcmds only), powerpc, riscv, and s390x. The default is to useptrace(2)
where possible; the new _intercept_type_sudoers setting can be used to explicitly set the type. - New Georgian translation fromtranslationproject.org.
- Fixed creating packages on CentOS Stream.
- Fixed a bug in the intercept and log_subcmds support where the
execve(2)
wrapper was using the current environment instead of the passed environment pointer.Bug #1030. - Added AppArmor integration for Linux. A sudoers rule can now specify an
APPARMOR_PROFILE
option to run a command confined by the named AppArmor profile. - Fixed parsing of the server_log setting in
sudo_logsrvd.conf
. Non-paths were being treated as paths and an actual path was treated as an error.
Sudo 1.9.11 downloads 114
Sudo 1.9.10
- Added new log_passwords and passprompt_regex sudoers options. If log_passwords is disabled, sudo will attempt to prevent passwords from being logged. If sudo detects any of the regular expressions in the passprompt_regex list in the terminal output, sudo will log ‘*’ characters instead of the terminal input until a newline or carriage return is found in the input or an output character is received.
- Added new log_passwords and passprompt_regex settings to
sudo_logsrvd
that operate like the sudoers options when logging terminal input. - Fixed several few bugs in the
cvtsudoers
utility when merging multiple sudoers sources. - Fixed a bug in
sudo_logsrvd
parsing thesudo_logsrvd.conf
file, where the retry_interval in the [relay] section was not being recognized. - Restored the pre-1.9.9 behavior of not performing authentication when sudo’s
-n
option is specified. A new _noninteractive_auth_sudoers option has been added to enable PAM authentication in non-interactive mode.GitHub issue #131. - On systems with
/proc
, if the/proc/self/stat
(Linux) or/proc/pid/psinfo
(other systems) file is missing or invalid, sudo will now check file descriptors 0-2 to determine the user’s terminal.Bug #1020. - Fixed a compilation problem on Debian kFreeBSD.Bug #1021.
- Fixed a crash in
sudo_logsrvd
when running in relay mode if an alert message is received. - Fixed an issue that resulting in “problem with defaults entries” email to be sent if a user ran
sudo
when the sudoers entry in thensswitch.conf
file includes “sss” but no sudo provider is configured in/etc/sssd/sssd.conf
.Bug #1022. - Updated the warning displayed when the invoking user is not allowed to run sudo. If sudo has been configured to send mail on failed attempts (see the mail_* flags in sudoers), it will now print “This incident has been reported to the administrator.” If the mailto or mailerpath sudoers settings are disabled, the message will not be printed and no mail will be sent.
- Fixed a bug where the user-specified command timeout was not being honored if the sudoers rule did not also specify a timeout.
- Added support for using POSIX extended regular expressions in sudoers rules. A command and/or arguments in sudoers are treated as a regular expression if they start with a ‘^’ character and end with a ‘$’. The command and arguments are matched separately, either one (or both) may be a regular expression.Bug #578,GitHub issue #15.
- A user may now only run
sudo -U otheruser -l
if they have a “sudo ALL” privilege where the RunAs user contains either _root_or otheruser. Previously, having “sudo ALL” was sufficient, regardless of the RunAs user.GitHub issue #134. - The sudo lecture is now displayed immediately before the password prompt. As a result, sudo will no longer display the lecture unless the user needs to enter a password. Authentication methods that don’t interact with the user via a terminal do not trigger the lecture.
- Sudo now uses its own closefrom() emulation on Linux systems. The glibc version may not work in a chroot jail where
/proc
is not available. If close_range(2) is present, it will be used in preference to/proc/self/fd
.
Sudo 1.9.10 downloads 110
Sudo 1.9.9
- Sudo can now be built with OpenSSL 3.0 without generating warnings about deprecated OpenSSL APIs.
- A digest can now be specified along with the ALL command in the LDAP and SSSD back-ends. Sudo 1.9.0 introduced support for this in the sudoers file but did not include corresponding changes for the other back-ends.
visudo
now only warns about an undefined alias or a cycle in an alias once for each alias.- The
sudoRole
cn was truncated by a single character in warning messages.GitHub issue #115. - The
cvtsudoers
utility has new--group-file
and--passwd-file
options to use a custom passwd or group file when the--match-local
option is also used. - The
cvtsudoers
utility can now filter or match based on a command. - The
cvtsudoers
utility can now produce output in csv (comma-separated value) format. This can be used to help generate entitlement reports. - Fixed a bug in
sudo_logsrvd
that could result in the connection being dropped for very long command lines. - Fixed a bug where
sudo_logsrvd
would not accept a restore point of zero. - Fixed a bug in
visudo
where the value of the editor setting was not used if it did not match the user’sEDITOR
environment variable. This was only a problem if the env_editor setting was not enabled.Bug #1000. - Sudo now builds with the
-fcf-protection
compiler option and the-z now
linker option if supported. - The output of
sudoreplay -l
now more closely matches the traditional sudo log format. - The
sudo_sendlog
utility will now use the full contents of the log.json file, if present. This makes it possible to send sudo-format I/O logs that use the newer log.json format to sudo_logsrvd without losing any information. - Fixed compilation of the arc4random_buf() replacement on systems with arc4random() but no arc4random_buf().Bug #1008.
- Sudo now uses its own getentropy() by default on Linux. The GNU libc version of getentropy() will fail on older kernels that don’t support the getrandom() system call.
- It is now possible to build sudo with WolfSSL’s OpenSSL compatibility layer by using the
--enable-wolfssl
configure option. - Fixed a bug related to Daylight Saving Time when parsing timestamps in Generalized Time format. This affected the NOTBEFORE and NOTAFTER options in sudoers.Bug #1006.
- Added the
-O
and-P
options tovisudo
, which can be used to check or set the owner and permissions. This can be used in conjunction with the-c
option to check that the sudoers file ownership and permissions are correct.Bug #1007. - It is now possible to set resource limits in the sudoers file itself. The special values default and “user” refer to the default system limit and invoking user limit respectively. The core dump size limit is now set to 0 by default unless overridden by the sudoers file.
- The
cvtsudoers
utility can now merge multiple sudoers sources into a single, combined sudoers file. If there are conflicting entries,cvtsudoers
will attempt to resolve them but manual intervention may be required. The merging of sudoers rules is currently fairly simplistic but will be improved in a future release. - Sudo was parsing but not applying the “deref” and “tls_reqcert” ldap.conf settings. This meant the options were effectively ignored which broke dereferencing of aliases in LDAP.Bug #1013.
- Clarified in the sudo man page that the security policy may override the user’s PATH environment variable.Bug #1014.
- When sudo is run in non-interactive mode (with the
-n
option), it will now attempt PAM authentication and only exit with an error if user interaction is required. This allows PAM modules that don’t interact with the user to succeed. Previously, sudo would not attempt authentication if the-n
option was specified.Bug #956 andGitHub issue #83. - Fixed a regression introduced in version 1.9.1 when sudo is built with the
--with-fqdn
configure option. The local host name was being resolved before the sudoers file was processed, making it impossible to disable DNS lookups by negating the_fqdn_ sudoers option.Bug #1016. - Added support for negated sudoUser attributes in the LDAP and SSSD sudoers back ends. A matching sudoUser that is negated will cause the sudoRole containing it to be ignored.
- Fixed a bug where the stack resource limit could be set to a value smaller than that of the invoking user and not be reset before the command was run.Bug #1016.
Sudo 1.9.8p2
- Fixed a potential out-of-bounds read with
sudo -i
when the target user’s shell is bash. This is a regression introduced in sudo 1.9.8.Bug #998. sudo_logsrvd
now only sends a log ID for first command of a session. There is no need to send the log ID for each sub-command.- Fixed a few minor memory leaks in intercept mode.
- Fixed a problem with
sudo_logsrvd
in relay mode if_store_first_ was enabled when handling sub-commands. A new zero-length journal file was created for each sub-command instead of simply using the existing journal file.
Sudo 1.9.8p2 downloads 115
Sudo 1.9.8p1
- Fixed support for passing a prompt (
sudo -p
) or a login class (sudo -c
) on the command line. This is a regression introduced in sudo 1.9.8.Bug #993. - Fixed a crash with sudo
ALL
rules in the LDAP and SSSD back-ends. This is a regression introduced in sudo 1.9.8.Bug #994. - Fixed a compilation error when the
--enable-static-sudoers
configure option was specified. This is a regression introduced in sudo 1.9.8 caused by a symbol clash with the intercept and log server protobuf functions.
Sudo 1.9.8p1 downloads 115
Sudo 1.9.8
- It is now possible to transparently intercepting sub-commands executed by the original command run via sudo. Intercept support is implemented using
LD_PRELOAD
(or the equivalent supported by the system) and so has some limitations. The two main limitations are that only dynamic executables are supported and only theexecl
,execle
,execlp
,execv
,execve
,execvp
, andexecvpe
library functions are currently intercepted. Its main use case is to support restricting privileged shells run via sudo.
To support this, there is a new intercept Defaults setting and anINTERCEPT
command tag that can be used in sudoers. For example:
Cmnd_Alias SHELLS=/bin/bash, /bin/sh, /bin/csh, /bin/ksh, /bin/zsh
Defaults!SHELLS intercept
would cause sudo to run the listed shells in intercept mode. This can also be set on a per-rule basis. For example:
Cmnd_Alias SHELLS=/bin/bash, /bin/sh, /bin/csh, /bin/ksh, /bin/zsh
chuck ALL = INTERCEPT: SHELLS
would only apply intercept mode to user chuck when running one of the listed shells.
In intercept mode, sudo will not prompt for a password before running a sub-command and will not allow a set-user-ID or set-group-ID program to be run by default. The new intercept_authenticate and_intercept_allow_setid_ sudoers settings can be used to change this behavior.
- The new log_subcmds sudoers setting can be used to log commands run in a privileged shell. It uses the same mechanism as the intercept support described above and has the same limitations.
- The new log_exit_status sudoers setting can be used to log the exit status commands run via sudo. This is also a corresponding log_exit setting in the
sudo_logsrvd.conf
eventlog stanza. - Support for logging
sudo_logsrvd
errors via syslog or to a file. Previously, mostsudo_logsrvd
errors were only visible in the debug log. - Better diagnostics when there is a TLS certificate validation error.
- Using the
+=
or-=
operators in a Defaults setting that takes a string, not a list, now produces a warning from sudo and a syntax error from inside visudo. - Fixed a bug where the iolog_mode setting in sudoers and
sudo_logsrvd
had no effect when creating I/O log parent directories if the I/O log file name ended with the stringXXXXXX
. - Fixed a bug in the sudoers custom prompt code where the size parameter that was passed to the
strlcpy()
function was incorrect. No overflow was possible since the correct amount of memory was already pre-allocated. - The
mksigname
andmksiglist
helper programs are now built with the host compiler, not the target compiler, when cross-compiling.Bug #989. - Fixed compilation error when the
--enable-static-sudoers
configure option was specified. This was due to a typo introduced in sudo 1.9.7.GitHub PR #113.
Sudo 1.9.7p2
- When formatting JSON output, octal numbers are now stored as strings, not numbers. The JSON spec does not actually support octal numbers with a
0
prefix. - Fixed a compilation issue on Solaris 9.
- Sudo now can handle the
getgroups()
function returning a different number of groups for subsequent invocations.GitHub PR #106. - When loading a Python plugin,
python_plugin.so
now verifies that the module loaded matches the one we tried to load. This allows sudo to display a more useful error message when trying to load a plugin with a name that conflicts with a Python module installed in the system location. - Sudo no longer sets the the open files resource limit to_unlimited_ while it runs. This avoids a problem where sudo’s
closefrom()
emulation would need to close a very large number of descriptors on systems without a way to determine which ones are actually open. - Sudo now includes a configure check for
va_copy
or__va_copy
and only defines its own version if the configure test fails. - Fixed a bug in sudo’s utmp file handling which prevented old entries from being reused. As a result, the utmp (or utmpx) file was appended to unnecessarily.GitHub PR #107.
- Fixed a bug introduced in sudo 1.9.7 that prevented
sudo_logsrvd
from accepting TLS connections when OpenSSL is used.Bug #988.
Sudo 1.9.7p2 downloads 107
Sudo 1.9.7p1
- Fixed an SELinux
sudoedit
bug when the edited temporary file could not be opened. Thesesh
helper would still be run even when there are no temporary files available to install. - Fixed a compilation problem on FreeBSD.
- The
sudo_noexec.so
file is now built as a module on all systems other than macOS. This makes it possible to use otherlibtool
implementations such asslibtool
. On macOS shared libraries and modules are not interchangeable and the version oflibtool
shipped with sudo must be used. - Fixed a few bugs in the
getgrouplist()
emulation on Solaris when reading from the local group file. - Fixed a bug in sudo_logsrvd that prevented periodic relay server connection retries from occurring in store_first mode.
- Disabled the
nss_search()
-basedgetgrouplist()
emulation on HP-UX due to a crash when the group source is set to_compat_ in/etc/nsswitch.conf
. This is probably due to a mismatch betweeninclude/compat/nss_dbdefs.h
and what HP-UX uses internally. On HP-UX we now just cycle through groups the slow way usinggetgrent()
.Bug #978.
Sudo 1.9.7p1 downloads 111
Sudo 1.9.7
- The fuzz Makefile target now runs all the fuzzers for 8192 passes (can be overridden via the
FUZZ_RUNS
variable). This makes it easier to run the fuzzers in-tree. To run a fuzzer indefinitely, setFUZZ_RUNS=-1
, e.g.make FUZZ_RUNS=-1 fuzz
. - Fixed fuzzing on FreeBSD where the ld.lld linker returns an error by default when a symbol is multiply-defined.
- Added support for determining local IPv6 addresses on systems that lack the
getifaddrs()
function. This now works on AIX, HP-UX and Solaris (at least).Bug #969. - Fixed a bug introduced in sudo 1.9.6 that caused
sudo -V
to report a usage error. Also, when invoked as sudoedit, sudo now allows a more restricted set of options that matches the usage statement and documentation.GitHub Issue #95. - Fixed a crash in
sudo_sendlog
when the specified certificate or key does not exist or is invalid.Bug #970. - Fixed a compilation error when sudo is configured with the
disable-log-client
option. - Sudo’s limited support for
SUCCESS=return
entries in nsswitch.conf is now documented.Bug #971. - Sudo now requires autoconf 2.70 or higher to regenerate the configure script.Bug #972.
sudo_logsrvd
now has a relay mode which can be used to create a hierarchy of log servers. By default, when a relay server is defined, messages from the client are forwarded immediately to the relay. However, if the store_first setting is enabled, the log will be stored locally until the command completes and then relayed.Bug #965.- Sudo now links with OpenSSL by default if it is available unless the
--disable-openssl
configure option is used or both the--disable-log-client
and--disable-log-server
configure options are specified. - Fixed configure’s Python version detection when the version minor number is more than a single digit, for example Python 3.10.
- The sudo Python module tests now pass for Python 3.10.
- Sudo will now avoid changing the datasize resource limit as long as the existing value is at least 1GB. This works around a problem on 64-bit HP-UX where it is not possible to exactly restore the original datasize limit.Bug #973.
- Fixed a race condition that could result in a hang when sudo is executed by a process where the
SIGCHLD
handler is set toSIG_IGN
. This fixes the bug described by GitHub PR #98. - Fixed an out-of-bounds read in sudoedit and visudo when the
EDITOR
,VISUAL
orSUDO_EDITOR
environment variables end in an unescaped backslash. Also fixed the handling of quote characters that are escaped by a backslash.GitHub Issue #99. - Fixed a bug that prevented the log_server_verify sudoers option from taking effect.
- The
sudo_sendlog
utility has a new -s option to cause it to stop sending I/O records after a user-specified elapsed time. This can be used to test the I/O log restart functionality ofsudo_logsrvd
. - Fixed a crash introduced in sudo 1.9.4 in
sudo_logsrvd
when attempting to restart an interrupted I/O log transfer. - The TLS connection timeout in the sudoers log client was previously hard-coded to 10 seconds. It now uses the value of_log_server_timeout_.
- The configure script now outputs a summary of the user-configurable options at the end, separate from output of configure script tests.Bug #820.
- Corrected the description of which groups may be specified via the-g option in the Runas_Spec section.Bug #975.
Sudo 1.9.6p1
- Fixed a regression introduced in sudo 1.9.6 that resulted in an error message instead of a usage message when sudo is run with no arguments.
Sudo 1.9.6p1 downloads 109
Sudo 1.9.6
- Fixed a
sudo_sendlog
compilation problem with the AIX xlC compiler. - Fixed a regression introduced in sudo 1.9.4 where the
--disable-root-mailer
configure option had no effect. - Added a
--disable-leaks
configure option that avoids some memory leaks on exit that would otherwise occur. This is intended to be used with development tools that measure memory leaks. It is not safe to use in production at this time. - Plugged some memory leaks identified by oss-fuzz and ASAN.
- Fixed the handling of
sudoOptions
for an LDAPsudoRole
that contains multiple sudoCommands. Previously, some of the options would only be applied to the firstsudoCommand
. - Fixed a potential out of bounds read in the parsing of
NOTBEFORE
andNOTAFTER
sudoers command options (and their LDAP equivalents). - The parser used for reading I/O log JSON files is now more resilient when processing invalid JSON.
- Fixed typos that prevented
make uninstall
from working.GitHub issue #87. - Fixed a regression introduced in sudo 1.9.4 where the last line in a sudoers file might not have a terminating NUL character added if no newline was present.
- Integrated oss-fuzz and LLVM’s libFuzzer with sudo. The new
--enable-fuzzer
configure option can be combined with the--enable-sanitizer
option to build sudo with fuzzing support. Multiple fuzz targets are available for fuzzing different parts of sudo. Fuzzers are built and tested via make fuzz or as part of make check (even when sudo is not built with fuzzing support). Fuzzing support currently requires the LLVM clang compiler (not gcc). - Fixed the
--enable-static-sudoers
configure option.GitHub issue #92. - Fixed a potential out of bounds read sudo when is run by a user with more groups than the value of max_groups in sudo.conf.
- Added an admin_flag sudoers option to make the use of the
~/.sudo_as_admin_successful
file configurable on systems where sudo is build with the--enable-admin-flag
configure option. This mostly affects Ubuntu and its derivatives.GitHub issue #56. - The max_groups setting in sudo.conf is now limited to 1024. This setting is obsolete and should no longer be needed.
- Fixed a bug in the tilde expansion of
CHROOT=dir
andCWD=dir
sudoers command options. A path~/foo
was expanded to/home/userfoo
instead of/home/user/foo
. This also affects the_runchroot_ and runcwd Defaults settings. - Fixed a bug on systems without a native getdelim(3) function where very long lines could cause parsing of the sudoers file to end prematurely.Bug #960.
- Fixed a potential integer overflow when converting the_timestamp_timeout_ and passwd_timeout sudoers settings to a timespec struct.
- The default for the group_source setting in sudo.conf is now_dynamic_ on macOS. Recent versions of macOS do not reliably return all of a user’s non-local groups via
getgroups(2)
, even when_DARWIN_UNLIMITED_GETGROUPS
is defined.Bug #946. - Fixed a potential use-after-free in the PAM conversation function.Bug #967.
- Fixed potential redefinition of
sys/stat.h
macros in sudo_compat.h.Bug #968.
Sudo 1.9.5p2
- Fixed sudo’s
setprogname(3)
emulation on systems that don’t provide it. - Fixed a problem with the sudoers log server client where a partial write to the server could result the sudo process consuming large amounts of CPU time due to a cycle in the buffer queue.Bug #954.
- Added a missing dependency on libsudo_util in libsudo_eventlog. Fixes a link error when building sudo statically.
- The user’s
KRB5CCNAME
environment variable is now preserved when performing PAM authentication. This fixes GSSAPI authentication when the user has a non-default ccache. - When invoked as
sudoedit
, the same set of command line options are now accepted as forsudo -e
. The -Hand -P options are now rejected forsudoedit
andsudo -e
which matches the sudo 1.7 behavior. This is part of the fix for CVE-2021-3156. - Fixed a potential buffer overflow when unescaping backslashes in the command’s arguments. Normally, sudo escapes special characters when running a command via a shell (
sudo -s
orsudo -i
). However, it was also possible to runsudoedit
with the -s or-i flags in which case no escaping had actually been done, making a buffer overflow possible. This fixes CVE-2021-3156.
Sudo 1.9.5p2 downloads 109
Sudo 1.9.5p1
- Fixed a regression introduced in sudo 1.9.5 where the editor run by sudoedit was set-user-ID root unless SELinux RBAC was in use. The editor is now run with the user’s real and effective user-IDs.
Sudo 1.9.5p1 downloads 109
Sudo 1.9.5
- Fixed a crash introduced in 1.9.4 when running
sudo -i
as an unknown user. This is related to but distinct fromBug #948. - If the lecture_file setting is enabled in sudoers, it must now refer to a regular file or a symbolic link to a regular file.
- Fixed a potential use-after-free bug in
sudo_logsrvd
when the server shuts down if there are existing connections from clients that are only logging events and not session I/O data. - Fixed a buffer size mismatch when serializing the list of IP addresses for configured network interfaces. This bug is not actually exploitable since the allocated buffer is large enough to hold the list of addresses.
- If sudo is executed with a name other than sudoor sudoedit, it will now fall back tosudo as the program name. This affects warning, help and usage messages as well as the matching of Debug lines in the
/etc/sudo.conf
file. Previously, it was possible for the invoking user to manipulate the program name by settingargv[0]
to an arbitrary value when executing sudo. - Sudo now checks for failure when setting the close-on-exec flag on open file descriptors. This should never fail but, if it were to, there is the possibility of a file descriptor leak to a child process (such as the command sudo runs).
- Fixed CVE-2021-23239, a potential information leak in sudoedit that could be used to test for the existence of directories not normally accessible to the user in certain circumstances. When creating a new file, sudoedit checks to make sure the parent directory of the new file exists before running the editor. However, a race condition exists if the invoking user can replace (or create) the parent directory. If a symbolic link is created in place of the parent directory, sudoedit will run the editor as long as the target of the link exists. If the target of the link does not exist, an error message will be displayed. The race condition can be used to test for the existence of an arbitrary directory. However, it cannot be used to write to an arbitrary location.
- Fixed CVE-2021-23240, a flaw in the temporary file handling of sudoedit’s SELinux RBAC support. On systems where SELinux is enabled, a user with sudoedit permissions may be able to set the owner of an arbitrary file to the user-ID of the target user. On Linux kernels that support protected symlinks setting
/proc/sys/fs/protected_symlinks
to 1 will prevent the bug from being exploited. For more information, seeSymbolic link attack in SELinux-enabled sudoedit. - Added writability checks for
sudoedit
when SELinux RBAC is in use. This makessudoedit
behavior consistent regardless of whether or not SELinux RBAC is in use. Previously, the sudoedit_checkdir setting had no effect for RBAC entries. - A new sudoers option selinux can be used to disable sudo’s SELinux RBAC support.
- Quieted warnings from PVS Studio, clang analyzer, and cppcheck. Added suppression annotations for PVS Studio false positives.
Sudo 1.9.5 downloads 1
Distribution filename | sha256 checksum |
---|---|
sudo-1.9.5.tar.gz | 3718b16de71fd6076858d5a1efe93a0d11d2f713fc51f24a314dfee78e4e83a5 |
Sudo 1.9.4p2
- Fixed a bug introduced in sudo 1.9.4p1 which could lead to a crash if the sudoers file contains a runas user-specific Defaults entry.Bug #951.
Sudo 1.9.4p2 downloads 109
Sudo 1.9.4p1
- Sudo on macOS now supports users with more than 16 groups without needing to set group_source to dynamic in
sudo.conf
. Previously, only the first 15 were used when matching group-based rules in sudoers.Bug #946. - Fixed a regression introduced in version 1.9.4 where sudo would not build when configured using the
--without-sendmail
option.Bug #947. - Fixed a problem where if I/O logging was disabled and sudo was unable to connect to sudo_logsrvd, the command would still be allowed to run even when the ignore_logfile_errors sudoers option was enabled.
- Fixed a crash introduced in version 1.9.4 when attempting to run a command as a non-existent user.Bug #948.
- The installed
sudo.conf
file now has the default sudoers Plugin lines commented out. This fixes a potential conflict when there is both a system-installed version of sudo and a user-installed version.GitHub Issue #75. - Fixed a regression introduced in sudo 1.9.4 where sudo would run the command as a child process even when a pseudo-terminal was not in use and the pam_session and pam_setcred options were disabled.GitHub Issue #76.
- Fixed a regression introduced in sudo 1.8.9 where the _closefrom_sudoers option could not be set to a value of 3.Bug #950.
Sudo 1.9.4p1 downloads 109
Sudo 1.9.4
- The sudoers parser will now detect when an upper-case reserved word is used when declaring an alias. Now instead of “syntax error, unexpected CHROOT, expecting ALIAS” the message will be_syntax error, reserved word CHROOT used as an alias name_.Bug #941.
- Better handling of sudoers files without a final newline. The parser now adds a newline at end-of-file automatically which removes the need for special cases in the parser.
- Fixed a regression introduced in sudo 1.9.1 in the sssd back-end where an uninitialized pointer could be freed on an error path.GitHub Issue #67.
- The core logging code is now shared between
sudo_logsrvd
and thesudoers
plugin. - JSON log entries sent to syslog now use minimal JSON which skips all non-essential whitespace.
- The sudoers plugin can now produce JSON-formatted logs. The_log_format_ sudoers option can be used to select sudo or json format logs. The default is sudo format logs.
- The sudoers plugin and visudo now display the column number in syntax error messages in addition to the line number.Bug #841.
- If I/O logging is not enabled but log_servers is set, the sudoers plugin will now log accept events to sudo_logsrvd. Previously, the accept event was only sent when I/O logging was enabled. The sudoers plugin now sends reject and alert events too.
- The sudo logsrv protocol has been extended to allow an_AlertMessage_ to contain an optional array of_InfoMessage_, as AcceptMessage and_RejectMessage_ already do.
- Fixed a bug in sudo_logsrvd where receipt of
SIGHUP
would result in duplicate entries in the debug log when debugging was enabled. - The visudo utility now supports
EDITOR
environment variables that use single or double quotes in the command arguments.Bug #942. - The PAM session modules now run when sudo is set-user-ID root, which allows a module to determine the original user-ID.Bug #944.
- Fixed a regression introduced in sudo 1.8.24 in the LDAP back-end where sudoNotBefore and sudoNotAfter were applied even when the
SUDOERS_TIMED
setting was not present inldap.conf
.Bug #945. - Sudo packages for macOS 11 now contain universal binaries that support both Intel and Apple Silicon CPUs.
- For sudo_logsrvd, an empty value for the pid_file setting in sudo_logsrvd.con will now disable the process ID file.
Sudo 1.9.3p1
- Fixed a regression introduced in sudo 1.9.3 where the configure script would not detect the
crypt
function if it was present in the C library, not an additional library. - Fixed a regression introduced in sudo 1.8.23 with shadow passwd file authentication on OpenBSD. BSD authentication was not affected.
- Sudo now logs when a user-specified command-line option is rejected by a sudoers rule. Previously, these conditions were written to the audit log, but the default sudo log file. Affected command line arguments include
-C
(--close-from
),-D
(--chdir)
,-R
(--chroot
),-g
(--group
) and-u
(--user
).
Sudo 1.9.3p1 downloads 113
Sudo 1.9.3
sudoedit
will now prompt the user before overwriting an existing file with one that is zero-length after editing.Bug #922.- Fixed building the Python plugin on systems with a compiler that doesn’t support symbol hiding.
- Sudo now uses a linker script to hide symbols even when the compiler has native symbol hiding support. This should make it easier to detect omissions in the symbol exports file, regardless of the platform.
- Fixed the libssl dependency in Debian packages for older releases that use
libssl1.0.0
. sudo
andvisudo
now provide more detailed messages when a syntax error is detected insudoers
. The offending line and token are now displayed. If the parser was generated by GNU bison, additional information about what token was expected is also displayed.Bug #841.- Sudoers rules must now end in either a newline or the end-of-file. Previously, it was possible to have multiple rules on a single line, separated by white space. The use of an end-of-line terminator makes it possible to display accurate error messages.
- Sudo no longer refuses to run if a syntax error in the sudoers file is encountered. The entry with the syntax error will be discarded and sudo will continue to parse the file. This makes recovery from a syntax error less painful on systems where sudo is the primary method of superuser access. The historic behavior can be restored by add
error_recovery=false
to the sudoers plugin’s optional arguments insudo.conf
.Bug #618. - Fixed the sample_approval plugin’s symbol exports file for systems where the compiler doesn’t support symbol hiding.
- Fixed a regression introduced in sudo 1.9.1 where arguments to the sudoers_policy plugin in
sudo.conf
were not being applied. The sudoers file is now parsed by the sudoers_audit plugin, which is loaded implicitly when sudoers_policy is listed insudo.conf
. Starting with sudo 1.9.3, if there are plugin arguments forsudoers_policy
butsudoers_audit
is not listed, those arguments will be applied tosudoers_audit
instead. - The user’s resource limits are now passed to sudo plugins in the
user_info[]
list. A plugin cannot determine the limits itself because sudo changes the limits while it runs to prevent resource starvation. - It is now possible to set the working directory or change the root directory on a per-command basis using the
CWD
andCHROOT
options. There are also new Defaults settings, runchroot and runcwd, that can be used to set the working directory or root directory on a more global basis. - New
-D
(--chdir
) and-R
(--chroot
) command line options can be used to set the working directory or root directory if the sudoers file allows it. This functionality is not enabled by default and must be explicitly enabled in the sudoers file.
Sudo 1.9.2
- Fixed package builds on RedHat Enterprise Linux 8.
- The configure script now uses pkg-config to find the openssl cflags and libs where possible.
- The contents of the log.json I/O log file is now documented in the sudoers manual.
- The sudoers plugin now properly exports the sudoers_audit symbol on systems where the compiler lacks symbol visibility controls. This caused a regression in 1.9.1 where a successful sudo command was not logged due to the missing audit plugin.Bug #931.
- Fixed a regression introduced in 1.9.1 that can result in crash when there is a syntax error in the sudoers file.Bug #934.
Sudo 1.9.1
- Fixed an AIX-specific problem when I/O logging was enabled. The terminal device was not being properly set to raw mode.Bug #927.
- 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 set. - 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
andsudo-python
macOS packages. - 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 complete. - The
sudoreplay
utility has a new -F(follow) command line option to allow replaying a session that is still in progress, similar totail -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 ofreboot
, 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 anALL
wildcard value. AsudoRole
with nosudoHost
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 fromtranslationproject.org.
- Fixed a regression introduced in sudo 1.9.0 where
sudoedit
did not remove its temporary files after installing them.Bug #929. - Fixed a regression introduced in sudo 1.9.0 where the_iolog_file_ setting in
sudoers
andsudo_logsrvd.conf
caused an error if the file name ended in six or more X’s.
Sudo 1.9.0
- 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.Bug #860.
- 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 thesudo_logsrvd,sudo_logsrvd.confandsudo_logsrv.protomanuals as well as the log_servers setting in thesudoersmanual.
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 plugin. - The new
sudo_sendlog
utility can be used to testsudo_logsrvd
or send existing sudo I/O logs to a centralized server. - 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’sexamples
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.Bug #917.
- It is now possible to use
Cmd_Alias
instead ofCmnd_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
andsudo_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 error.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.Bug #923andDebian 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 full.Bug #922.
- 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.Bug #924.