diff options
Diffstat (limited to 'INSTALL.md')
-rw-r--r-- | INSTALL.md | 1083 |
1 files changed, 1083 insertions, 0 deletions
diff --git a/INSTALL.md b/INSTALL.md new file mode 100644 index 0000000..add976b --- /dev/null +++ b/INSTALL.md @@ -0,0 +1,1083 @@ +Sudo installation instructions +============================== + +Sudo uses a `configure` script to probe the capabilities and type of the +system in question. Sudo's `configure` script has a large number of options +that control its behavior and enable or disable optional functionality. +Be sure to read this document fully before configuring and building sudo. +You may also wish to read the file INSTALL.configure which explains more +about the `configure` script itself. + +## System requirements + +To build sudo from the source distribution you will need a +POSIX-compliant operating system (any modern version of BSD, Linux, +or Unix should work), a C compiler that conforms to ISO C99 or +higher, and the ar, make, and ranlib utilities. + +If you wish to modify the parser then you will need flex version +2.5.2 or later and either bison or byacc (sudo comes with a parser +generated with GNU bison). You'll also have to run configure with +the --with-devel option or pass DEVEL=1 to make. You can get flex +from https://github.com/westes/flex/. You can get GNU bison from +https://ftp.gnu.org/pub/gnu/bison/ or any GNU mirror. + +Some systems will also require that development library packages be +installed. The sudo source distribution includes docker configurations +for common Linux distributions that are used for continuous integration +in the `docker` directory. See the appropriate OS-specific Dockerfile +for a list of packages required to build sudo. + +## Simple sudo installation + +1. If you are upgrading from a previous version of sudo, read + [docs/UPGRADE.md](docs/UPGRADE.md) before proceeding. + +2. Read the "OS dependent notes" section for any particular + "gotchas" relating to your operating system. + +3. `cd` to the source or build directory and type `./configure` + to generate a Makefile and config.h file suitable for building + sudo. Before you actually run configure you should read the + "Available configure options" section to see if there are + any special options you may want or need. + +4. Type `make` to compile sudo. If `configure` did its job properly (and + you have a supported configuration) there won't be any problems. If you + have a problem, check [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) + for tips on what might have gone wrong. If your problem is not covered, + you may file a bug report at https://bugzilla.sudo.ws/ or an issue at + https://github.com/sudo-project/sudo/issues/ (not both). + +5. Optionally, type `make check` to build and run the sudo unit and + regression tests. For more verbose output, use `make check-verbose`. + +6. Type `make install` (as root) to install sudo, visudo, the man + pages, and a skeleton sudoers file. The install will not overwrite + an existing sudoers file. You can also install various pieces of + the package via the install-binaries, install-doc, and install-sudoers + make targets. + +7. Edit the sudoers file with `visudo` as necessary for your + site. You will probably want to refer the example sudoers + file and sudoers man page included with the sudo package. + +8. If you want to use syslogd(8) to do the logging, you'll need to + update your `/etc/syslog.conf` file. See the examples/syslog.conf + file included in the distribution for an example. + +## Available configure options + +This section describes flags accepted by the sudo's `configure` script. +Defaults are listed in brackets after the description. + +### Configuration: + + --cache-file=FILE + Cache test results in FILE + + --config-cache, -C + Alias for --cache-file=config.cache + + --help, -h + Print the usage/help info + + --no-create, -n + Do not create output files + + --quiet, --silent, -q + Do not print "checking..." messages + + --srcdir=DIR + Find the sources in DIR [configure dir or ".."] + +### Directory and file names: + + --prefix=PREFIX + Install architecture-independent files in PREFIX. [/usr/local] + + --exec-prefix=EPREFIX + Install architecture-dependent files in EPREFIX. + This includes the executables and plugins. [same as PREFIX] + + --bindir=DIR + Install cvtsudoers, sudo, sudoedit, and sudoreplay in DIR. [EPREFIX/bin] + + --sbindir=DIR + Install sudo_logsrvd, sudo_sendlog, and visudo in DIR. [EPREFIX/sbin] + + --libexecdir=DIR + Install plugins and helper programs in DIR/sudo [PREFIX/libexec/sudo] + + --sysconfdir=DIR + Look for configuration files such as `sudo.conf` and `sudoers` + in DIR. [/etc] + + --includedir=DIR + Install sudo_plugin.h include file in DIR [PREFIX/include] + + --datarootdir=DIR + Root directory for platform-independent data files [PREFIX/share] + + --localedir=DIR + Install sudo and sudoers locale files in DIR [DATAROOTDIR/locale] + + --mandir=DIR + Install man pages in DIR [PREFIX/man] + + --docdir=DIR + Install other sudo documentation in DIR [DATAROOTDIR/doc/sudo] + + --with-exampledir=DIR + Install sudo example files in DIR [DATAROOTDIR/doc/sudo/examples] + + --with-plugindir=DIR + The directory that sudo looks in to find the policy and I/O + logging plugins. Defaults to the LIBEXEC/sudo. + + --with-rundir=DIR + The directory to be used for sudo-specific files that do + not survive a system reboot. This is typically where the + time stamp directory is located. By default, configure + will choose from the following list: /run/sudo /var/run/sudo, + /var/db/sudo, /var/lib/sudo, /var/adm/sudo, /usr/adm/sudo. + + This directory should be cleared when the system reboots. + On systems that lack /run or /var/run, the default rundir and + vardir may be the same. In this case, only the ts directory + inside the rundir needs to be cleared at boot time. + + --with-vardir=DIR + The directory to be used for sudo-specific files that survive + a system reboot. This is typically where the lecture status + directory is stored. By default, configure will choose + from the following list: /var/db/sudo, /var/lib/sudo, + /var/adm/sudo, /usr/adm/sudo. + + This directory should **not** be cleared when the system boots. + + --with-relaydir=DIR + The directory to be used for sudo_logsrvd relay temporary files. + When sudo_logsrvd is configured as a store-and-forward relay, + the journaled data is written to this directory before it is + forwarded to a relay server. + + --with-tzdir=DIR + The directory to the system's time zone data files. This + is only used when sanitizing the TZ environment variable + to allow for fully-qualified paths in TZ. By default, + configure will look for an existing "zoneinfo" directory + in the following locations: /usr/share, /usr/share/lib, + /usr/lib, /etc. + + If no zoneinfo directory is found, the TZ variable may not + contain a fully-qualified path. + +### Compilation options: + + --enable-sanitizer=[flags] + Enable the use of sanitizers such as AddressSanitizer and + UndefinedBehaviorSanitizer if supported by the compiler. + This can help detect common problems such as buffer overflows + and use after free bugs as well as behavior not defined by + the C standard. For more information see: + https://github.com/google/sanitizers/wiki + + If no flags are specified by the user, a default value of + "-fsanitize=address,undefined" will be used. + + This option should only be used for testing and not in a + production environment. Due to some sanitizers' unchecked + use of environment variables, it is trivial to exploit a + set-user-ID root executable such as sudo. + + --enable-fuzzer + Enable building sudo with the LLVM libFuzzer, see + https://www.llvm.org/docs/LibFuzzer.html for details. + The resulting binaries, beginning with "fuzz_" can be used + to test sudo. To run all the fuzzers for 8192 iterations, + "make fuzz" can be used. This option is generally used in + conjunction with --enable-sanitizer. + + Fuzzing currently requires the clang C compiler--it is not + supported by gcc. For best results, it is suggested to use + clang 11 or higher. Some of the fuzzers are known to hang + when used with earlier versions. + + This option should only be used for testing and not in a + production environment. + + --enable-fuzzer-engine=library + The library to use when linking fuzz targets instead of + LLVM's libFuzzer. It is intended to be set to the path to + an alternate fuzzing library, such as AFL++ or Honggfuzz. + + --enable-fuzzer-linker=command + An alternate linker command to use when building fuzz + targets, instead of clang. It may be necessary to set this + when using the --enable-fuzzer-engine option to link with + a fuzzer engine that requires C++ libraries. For oss-fuzz, + this option is used to cause fuzz targets to be linked with + clang++. + + --disable-hardening + Disable the use of compiler/linker exploit mitigation options + which are enabled by default. This includes compiling with + _FORTIFY_SOURCE defined to 2, building with -fstack-protector, + -fstack-clash-protection, -fcf-protection and linking with + -zrelro, -znow, and -znoexecstack where supported. + + --disable-largefile + Disable support for large (64-bit) files on 32-bit systems + where the maximum file size is normally 4GB. By default, + configure will enable support for 64-bit file sizes if + supported by the operating system. + + --disable-leaks + Avoid leaking memory even when we are headed for exit, + which helps reduce the noise from static and active analyzers. + This option should only be used for testing and not in a + production environment. + + --enable-pie + Build sudo and related programs as as a position independent + executables (PIE). This improves the effectiveness of address + space layout randomization (ASLR) on systems that support it. + Sudo will create PIE binaries by default on Linux systems. + + --disable-pie + Disable the creation of position independent executables (PIE), + even if the compiler creates PIE binaries by default. This + option may be needed on some Linux systems where PIE binaries + are not fully supported. + + --disable-poll + Use select() instead of poll() in the event loop. By default, + sudo will use poll() on systems that support it. Some systems + have a broken poll() implementation and need to use select instead. + On macOS, select() is always used since its poll() doesn't + support character devices. + + --disable-rpath + By default, configure will use -Rpath in addition to -Lpath + when passing library paths to the loader. This option will + disable the use of -Rpath. + + --disable-shared + Disable dynamic shared object support. By default, sudo + is built with a plugin API capable of loading arbitrary + policy and I/O logging plugins. If the --disable-shared + option is specified, this support is disabled and the default + sudoers policy and I/O plugins are embedded in the sudo + binary itself. This will also disable the intercept and noexec + options as they also rely on dynamic shared object support. + + --disable-shared-libutil + Disable the use of the dynamic libsudo_util library. By + default, sudo, the sudoers plugin and the associated sudo + utilities are linked against a shared version of libsudo_util. + If the --disable-shared-libutil option is specified, a + static version of the libsudo_util library will be used + instead. This option may only be used in conjunction with + the --enable-static-sudoers option. + + --disable-ssp + Disable use of the -fstack-protector compiler option. + This does not affect the other hardening options. + + --enable-static-sudoers + By default, the sudoers plugin is built and installed as a + dynamic shared object. When the --enable-static-sudoers + option is specified, the sudoers plugin is compiled directly + into the sudo binary. Unlike --disable-shared, this does + not prevent other plugins from being used and the intercept + and noexec options will continue to function. + + --enable-tmpfiles.d=DIR + Set the directory to be used when installing the sudo + tmpfiles.d file. This is used to create (or clear) the + sudo time stamp directory on operating systems that use + systemd. If this option is not specified, configure will + use the /usr/lib/tmpfiles.d directory if the file + /usr/lib/tmpfiles.d/systemd.conf exists. + + --disable-year2038 + Disable support for dates after January 2038. By default, + configure will enable support for 64-bit time_t values if + supported by the operating system. + + --enable-zlib[=location] + Enable the use of the zlib compress library when storing + I/O log files. If specified, location is the base directory + containing the zlib include and lib directories. The special + values "system", "builtin", "shared", and "static" can be + used to indicate that the system version of zlib should be + used or that the version of zlib shipped with sudo should + be used instead. If "static" is specified, sudo will + statically link the builtin zlib and not install it. If + this option is not specified, configure will use the system + zlib if it is present, falling back on the sudo version. + + --with-incpath=DIR + Adds the specified directory (or directories) to CPPFLAGS + so configure and the compiler will look there for include + files. Multiple directories may be specified as long as + they are space separated. + E.g. --with-incpath="/usr/local/include /opt/include" + + --with-libpath=DIR + Adds the specified directory (or directories) to LDFLAGS + so configure and the compiler will look there for libraries. + Multiple directories may be specified as with --with-incpath. + + --with-libraries=LIBRARY + Adds the specified library (or libraries) to SUDO_LIBS and + and VISUDO_LIBS so sudo will link against them. If the + library doesn't start with "-l" or end in ".a" or ".o" a + "-l" will be prepended to it. Multiple libraries may be + specified as long as they are space separated. + + --with-libtool=PATH + By default, sudo will use the included version of libtool + to build shared libraries. The --with-libtool option can + be used to specify a different version of libtool to use. + The special values "system" and "builtin" can be used in + place of a path to denote the default system libtool (obtained + via the user's PATH) and the default libtool that comes + with sudo. + + --with-aix-soname=svr4 + Starting with version 1.9.13, sudo will build 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. To restore + the old, pre-1.9.13 behavior, run configure using the + --with-aix-soname=svr4 option. + +### Optional features: + + --enable-adminconf=[DIR] + Search for configuration files in adminconfdir (PREFIX/etc + by default) in preference to configuration files in sysconfdir + (/etc by default). This can be used on systems where + sysconfdir is located on a read-only filesystem. When this + option is enabled, the visudo utility will store edited + sudoers files in adminconfdir if the original was located + in sysconfdir. + + --disable-root-mailer + By default sudo will run the mailer as root when tattling + on a user so as to prevent that user from killing the mailer. + With this option, sudo will run the mailer as the invoking + user which some people consider to be safer. + + --enable-nls[=location] + Enable natural language support using the gettext() family + of functions. If specified, location is the base directory + containing the libintl include and lib directories. If + this option is not specified, configure will look for the + gettext() family of functions in the standard C library + first, then check for a standalone libintl (linking with + libiconv as needed). + + --disable-nls + Disable natural language support. By default, sudo will + use the gettext() family of functions, if available, to + implement messages in the invoking user's native language. + Translations do not exist for all languages. + + --with-ldap[=DIR] + Enable LDAP support. If specified, DIR is the base directory + containing the LDAP include and lib directories. See + [README.LDAP.md](README.LDAP.md) for more information. + + --with-ldap-conf-file=PATH + Path to LDAP configuration file. If specified, sudo reads + this file instead of `/etc/ldap.conf` to locate the LDAP server. + + --with-ldap-secret-file=PATH + Path to LDAP secret password file. If specified, sudo uses + this file instead of `/etc/ldap.secret` to read the secret password + when rootbinddn is specified in the ldap config file. + + --disable-sasl + Disable SASL authentication for LDAP. By default, sudo + will compile in support for SASL authentication if the + ldap_sasl_interactive_bind_s() function is present in the + LDAP libraries. + + --with-apparmor + Enable support for the AppArmor Linux Security Module (LSM) on + supported systems. + + --with-logincap + This adds support for login classes specified in `/etc/login.conf`. + It is enabled by default on BSD/OS, Darwin, FreeBSD, OpenBSD, and + NetBSD (where available). By default, a login class is not applied + unless the "use_loginclass" option is defined in sudoers or the user + specifies a class on the command line. + + --with-interfaces=no, --without-interfaces + This option keeps sudo from trying to glean the ip address + from each attached network interface. It is only useful + on a machine where sudo's interface reading support does + not work, which may be the case on some SysV-based OS's + using STREAMS. + + --enable-intercept[=PATH] + Enable support for the "intercept" functionality which + allows sudo to perform a policy check when a dynamically-linked + program run by sudo attempts to execute another program. + This is also used to support the "log_subcmds" sudoers + setting. For example, this means that for a shell run + through sudo, the individual commands run by the shell are + also subject to rules in the sudoers file. See the "Preventing + Shell Escapes" section in the sudoers man page for details. + If specified, PATH should either be a fully-qualified path + name such as /usr/local/libexec/sudo/sudo_intercept.so, or, + for AIX and Solaris systems, it may optionally be set to a + 32-bit shared library followed by a 64-bit shared library, + separated by a colon. If PATH is "no", intercept support + will not be compiled in. The default is to compile intercept + support if libtool supports building shared objects on your + system. + + --with-noexec[=PATH] + Enable support for the "noexec" functionality which prevents + a dynamically-linked program being run by sudo from executing + another program (think shell escapes). See the "Preventing + Shell Escapes" section in the sudoers man page for details. + If specified, PATH should either be a fully-qualified path + name such as /usr/local/libexec/sudo/sudo_noexec.so, or, + for AIX and Solaris systems, it may optionally be set to a + 32-bit shared library followed by a 64-bit shared library, + separated by a colon. If PATH is "no", noexec support + will not be compiled in. The default is to compile noexec + support if libtool supports building shared objects on your + system. + + --with-selinux + Enable support for role based access control (RBAC) on systems + that support SELinux. + + --with-sssd + Enable support for using the System Security Services Daemon + (SSSD) as a sudoers data source. For more information on + SSD, see https://fedoraproject.org/wiki/Features/SSSD. + + --with-sssd-conf=PATH + Specify the path to the SSSD configuration file, if different + from the default value of `/etc/sssd/sssd.conf`. + + --with-sssd-lib=PATH + Specify the path to the SSSD shared library, which is loaded + at run-time. + + --enable-offensive-insults + Enable potentially offensive sudo insults from the classic + version of sudo. + + --enable-pvs-studio + Generate a sample PVS-Studio.cfg file based on the compiler and + platform type. The "pvs-studio" Makefile target can then be + used if PVS-Studio is installed. + + --enable-python + Enable support for sudo plugins written in Python 3. + This requires a Python 3 development environment (including + Python 3 header files). + + --disable-log-server + Disable building the sudo_logsrvd log server. + + --disable-log-client + Disable sudoers support for using the sudo_logsrvd log server. + +### Operating system-specific options: + + --disable-setreuid + Disable use of the setreuid() function for operating systems + where it is broken. For instance, 4.4BSD has setreuid() that + is not fully functional. + + --disable-setresuid + Disable use of the setresuid() function for operating systems + where it is broken (none currently known). + + --enable-admin-flag[=PATH] + Enable the creation of an Ubuntu-style admin flag file the + first time sudo is run. If PATH is not specified, the + default value is: + ~/.sudo_as_admin_successful + + --enable-devsearch=PATH + Set a system-specific search path of directories to look in + for device nodes. Sudo uses this when mapping the process's + tty device number to a device name. The default value is: + /dev/pts:/dev/vt:/dev/term:/dev/zcons:/dev/pty:/dev + + --with-bsm-audit + Enable support for sudo BSM audit logs on systems that support it. + This includes recent versions of FreeBSD, macOS and Solaris. + + --with-linux-audit + Enable audit support for Linux systems. Audits attempts + to run a command as well as SELinux role changes. + + --with-man + Use the "man" macros for manual pages. By default, mdoc versions + of the manuals are installed if supported. This can be used to + override configure's test for "nroff -mdoc" support. + + --with-mdoc + Use the "mdoc" macros for manual pages. By default, mdoc versions + of the manuals are installed if supported. This can be used to + override configure's test for "nroff -mdoc" support. + + --with-netsvc[=PATH] + Path to netsvc.conf or "no" to disable netsvc.conf support. + If specified, sudo uses this file instead of /etc/netsvc.conf + on AIX systems. If netsvc support is disabled but LDAP is + enabled, sudo will check LDAP first, then the sudoers file. + + --with-nsswitch[=PATH] + Path to nsswitch.conf or "no" to disable nsswitch support. + If specified, sudo uses this file instead of /etc/nsswitch.conf. + If nsswitch support is disabled but LDAP is enabled, sudo will + check LDAP first, then the sudoers file. + + --with-project + Enable support for Solaris project resource limits. + This option is only available on Solaris 9 and above. + +### Authentication options: + + --with-AFS + Enable AFS support with Kerberos authentication. Should work under + AFS 3.3. If your AFS doesn't have -laudit you should be able to + link without it. + + --with-aixauth + Enable support for the AIX general authentication function. + This will use the authentication scheme specified for the + user on the machine. By default, sudo will use either AIX + authentication or PAM depending on the value of the auth_type + setting in the `/etc/security/login.cfg` file. + + --with-bsdauth + Enable support for BSD authentication. This is the default + for BSD/OS and OpenBSD systems that support it. + It is not possible to mix BSD authentication with other + authentication methods (and there really should be no need + to do so). Only the newer BSD authentication API is + supported. If you don't have /usr/include/bsd_auth.h then + you cannot use this. + + --with-DCE + Enable DCE support for systems without PAM. Known to work on + HP-UX 9.X, 10.X, and 11.0; other systems may require source + code and/or `configure` changes. On systems with PAM support + (such as HP-UX 11.0 and higher, Solaris, FreeBSD, and Linux), the + DCE PAM module (usually libpam_dce) should be used instead. + + --with-fwtk[=DIR] + Enable TIS Firewall Toolkit (FWTK) "authsrv" support. If specified, + DIR is the base directory containing the compiled FWTK package + (or at least the library and header files). + + --with-kerb5[=DIR] + Enable Kerberos V support. If specified, DIR is the base + directory containing the Kerberos V include and lib dirs. + This uses Kerberos pass phrases for authentication but + does not use the Kerberos cookie scheme. Will not work for + Kerberos V older than version 1.1. + + --enable-kerb5-instance=string + By default, the user name is used as the principal name + when authenticating via Kerberos V. If this option is + enabled, the specified instance string will be appended to + the user name (separated by a slash) when creating the + principal name. + + --with-solaris-audit + Enable audit support for Solaris 11 and above. + For older versions of Solaris, use --with-bsm-audit + + --with-opie[=DIR] + Enable NRL OPIE OTP (One Time Password) support. If specified, + DIR should contain include and lib directories with opie.h + and libopie.a respectively. + + --with-otp-only + This option is now just an alias for --without-passwd. + + --with-pam + Enable PAM support. This is on by default for Darwin, FreeBSD, + Linux, NetBSD, Solaris, and HP-UX (version 11 and higher). + + On RedHat Linux and Fedora you **must** have an `/etc/pam.d/sudo` + file installed. You may either use the example pam.conf file included + with sudo or use `/etc/pam.d/su` as a reference. The pam.conf file + included with sudo may or may not work with other Linux distributions. + On Solaris and HP-UX 11 systems you should check (and understand) + the contents of `/etc/pam.conf`. Do a `man pam.conf` for more + information and consider using the "debug" option, if available, + with your PAM libraries in `/etc/pam.conf` to obtain syslog output + for debugging purposes. + + --with-pam-login + Enable a specific PAM session when sudo is given the -i option. + This changes the PAM service name when sudo is run with the -i + option from "sudo" to "sudo-i", allowing for a separate pam + configuration for sudo's initial login mode. + + --disable-pam-session + Disable sudo's PAM session support. This may be needed on + older PAM implementations or on operating systems where + opening a PAM session changes the utmp or wtmp files. If + PAM session support is disabled, resource limits may not + be updated for the command being run. + + --with-passwd=no, --without-passwd + This option excludes authentication via the passwd (or + shadow) file. It should only be used when another, alternative, + authentication scheme is in use. + + --with-SecurID[=DIR] + Enable SecurID support. If specified, DIR is directory containing + libaceclnt.a, acexport.h, and sdacmvls.h. + + --with-skey[=DIR] + Enable S/Key OTP (One Time Password) support. If specified, + DIR should contain include and lib directories with skey.h + and libskey.a respectively. + + --disable-sia + Disable SIA support. This is the "Security Integration + Architecture" on Digital UNIX. If you disable SIA sudo will + use its own authentication routines. + + --disable-shadow + Disable shadow password support. Normally, sudo will compile + in shadow password support and use a shadow password if it + exists. + + --enable-gss-krb5-ccache-name + Use the gss_krb5_ccache_name() function to set the Kerberos + V credential cache file name. By default, sudo will use + the KRB5CCNAME environment variable to set this. While + gss_krb5_ccache_name() provides a better API to do this it + is not supported by all Kerberos V and SASL combinations. + + --enable-gcrypt[=DIR] + Use GNU crypt's SHA-2 message digest functions instead of + OpenSSL or the ones bundled with sudo (or in the system's + C library). If specified, DIR should contain the GNU crypt + include and lib directories. This option only has an effect + when OpenSSL 1.0.1 or higher is not present on the system + or the --disable-openssl option is also specified. + + --enable-openssl[=DIR] + Use OpenSSL's TLS and SHA-2 message digest functions. If + it is detected, OpenSSL will be used by default unless the + sudo log client and server are disabled via the + --disable-log-client and --disable-log-server options. To + explicitly disable the use of OpenSSL, the --disable-openssl + option can be used. OpenSSL versions prior to 1.0.1 will + not be used as they do not support TLS 1.2. If specified, + DIR should contain the OpenSSL include and lib directories. + + --enable-openssl-pkgconfig-template=template + A printf-style template used to construct the name of the + openssl and libcrypto pkg-config files. For example, a + template of "e%s30" would cause "eopenssl30" and "libecrypto30" + to be used instead. This makes it possible to link with + the OpenSSL 3.0 package on OpenBSD. Defaults to "%s". + + --enable-wolfssl[=DIR] + Use wolfSSL's TLS and SHA-2 message digest functions. If + specified, DIR should contain the OpenSSL include and lib + directories. + +### Development options: + + --enable-env-debug + Enable debugging of the environment setting functions. This + enables extra checks to make sure the environment does not + become corrupted. + + --enable-postinstall=PATH + Enable the use of a postinstall script that is run after + the "install" target but before packages as built as part + of the "package" target. + + --enable-warnings + Enable compiler warnings when building sudo with gcc or clang. + + --enable-werror + Enable the -Werror compiler option when building sudo with + gcc or clang. + + --with-devel + Configure development options. This will enable compiler warnings + and set up the Makefile to be able to regenerate the sudoers parser + as well as the manual pages. + +### Options that set runtime-changeable default values: + + --disable-authentication + By default, sudo requires the user to authenticate via a + password or similar means. This options causes sudo to + **not** require authentication. It is possible to turn + authentication back on in sudoers via the PASSWD attribute. + Sudoers option: !authenticate + + --disable-env-reset + Disable environment resetting. This sets the default value + of the "env_reset" Defaults option in sudoers to false. + Sudoers option: !env_reset + + --disable-path-info + Normally, sudo will tell the user when a command could not be found + in their $PATH. Some sites may wish to disable this as it could + be used to gather information on the location of executables that + the normal user does not have access to. The disadvantage is that + if the executable is simply not in the user's path, sudo will tell + the user that they are not allowed to run it, which can be confusing. + Sudoers option: path_info + + --disable-root-sudo + Don't let root run sudo. This can be used to prevent people from + "chaining" sudo commands to get a root shell by doing something + like `sudo sudo /bin/sh`. + Sudoers option: !root_sudo + + --disable-zlib + Disable the use of the zlib compress library when storing + I/O log files. + Sudoers option: !compress_io + + --enable-log-host + Log the hostname in the log file. + Sudoers option: log_host + + --enable-noargs-shell + If sudo is invoked with no arguments it acts as if the "-s" flag had + been given. That is, it runs a shell as root (the shell is determined + by the SHELL environment variable, falling back on the shell listed + in the invoking user's `/etc/passwd` entry). + Sudoers option: shell_noargs + + --enable-shell-sets-home + If sudo is invoked with the "-s" flag the HOME environment variable + will be set to the home directory of the target user (which is root + unless the "-u" option is used). This option effectively makes the + "-s" flag imply "-H". + Sudoers option: set_home + + --enable-timestamp-type=TYPE + Set the default time stamp record type. The TYPE may be "global" + (a single record per user), "ppid" (a single record for process + with the same parent process), or "tty" (a separate record for + each login session). The default is "tty". + Sudoers option: timestamp_type + + --with-all-insults + Include all the insult sets listed below. You must either specify + --with-insults or enable insults in the sudoers file for this to + have any effect. + + --with-askpass=PATH + Set PATH as the "askpass" program to use when no tty is + available. Typically, this is a graphical password prompter, + similar to the one used by ssh. The program must take a + prompt as an argument and print the received password to + the standard output. This value may overridden at run-time + in the sudo.conf file. + + --with-badpass-message="MESSAGE" + Message that is displayed if a user enters an incorrect password. + The default is "Sorry, try again." unless insults are turned on. + Sudoers option: badpass_message + + --with-badpri=PRIORITY + Determines which syslog priority to log unauthenticated + commands and errors. The following priorities are supported: + alert, crit, debug, emerg, err, info, notice, and warning. + Sudoers option: syslog_badpri + + --with-classic-insults + Uses insults from sudo "classic." If you just specify --with-insults + you will get the classic and CSOps insults. This is on by default if + --with-insults is given. + + --with-csops-insults + Insults the user with an extra set of insults (some quotes, some + original) from a sysadmin group at CU (CSOps). You must specify + --with-insults as well for this to have any effect. This is on by + default if --with-insults is given. + + --with-editor=PATH + Specify the default editor path for use by visudo. This may be a + single path name or a colon-separated list of editors. In the latter + case, visudo will choose the editor that matches the user's SUDO_EDITOR, + VISUAL or EDITOR environment variable, or the first editor in the list + that exists. The default is the path to vi on your system. + Sudoers option: editor + + --with-env-editor=no, --without-env-editor + By default, visudo will consult the SUDO_EDITOR, VISUAL, and EDITOR + environment variables before falling back on the default editor list + (as specified by --with-editor). visudo is typically run as root so + this option may allow a user with visudo privileges to run arbitrary + commands as root without logging. Some sites may with to disable this + and use a colon-separated list of "safe" editors with the --with-editor + option. visudo will then only use the SUDO_EDITOR, VISUAL, or EDITOR + variables if they match a value specified via --with-editor. + Sudoers option: env_editor + + --with-exempt=GROUP + Users in the specified group don't need to enter a password when + running sudo. This may be useful for sites that don't want their + "core" sysadmins to have to enter a password but where Jr. sysadmins + need to. You should probably use NOPASSWD in sudoers instead. + Sudoers option: exempt_group + + --with-fqdn + Define this if you want to put fully-qualified host names in the sudoers + file. Ie: instead of myhost you would use myhost.mydomain.edu. You may + still use the short form if you wish (and even mix the two). Beware + that turning FQDN on requires sudo to make DNS lookups which may make + sudo unusable if your DNS is totally hosed. You must use the host's + official name as DNS knows it. That is, you may not use a host alias + (CNAME entry) due to performance issues and the fact that there is no + way to get all aliases from DNS. + Sudoers option: fqdn + + --with-goodpri=PRIORITY + Determines which syslog priority to log successfully authenticated + commands. The following priorities are supported: alert, crit, debug, + emerg, err, info, notice, and warning. + Sudoers option: syslog_goodpri + + --with-python-insults + Insults the user with lines from "Monty Python's Flying Circus" when an + incorrect password is entered. You must either specify --with-insults or + enable insults in the sudoers file for this to have any effect. + + --with-goons-insults + Insults the user with lines from the "Goon Show" when an incorrect + password is entered. You must either specify --with-insults or + enable insults in the sudoers file for this to have any effect. + + --with-hal-insults + Uses 2001-like insults when an incorrect password is entered. + You must either specify --with-insults or enable insults in the + sudoers file for this to have any effect. + + --with-ignore-dot + If set, sudo will ignore "." or "" (current dir) in $PATH. + The $PATH itself is not modified. + Sudoers option: ignore_dot + + --with-insults + Define this if you want to be insulted for typing an incorrect password + just like the original sudo(8). This is off by default. + Sudoers option: insults + + --with-insults=disabled + Include support for insults but disable them unless explicitly + enabled in sudoers. + Sudoers option: !insults + + --with-iologdir[=DIR] + By default, sudo stores I/O log files in either /var/log/sudo-io, + /var/adm/sudo-io, or /usr/log/sudo-io. If this option is specified, + I/O logs will be stored in the indicated directory instead. + Sudoers option: iolog_dir + + --with-lecture=no, --without-lecture + Don't print the lecture the first time a user runs sudo. + Sudoers option: !lecture + + --with-logfac=FACILITY + Determines which syslog facility to log to. This requires + a 4.3BSD or later version of syslog. You can still set + this for ancient syslogs but it will have no effect. The + following facilities are supported: authpriv (if your OS + supports it), auth, daemon, user, local0, local1, local2, + local3, local4, local5, local6, and local7. + Sudoers option: syslog + + --with-logging=TYPE + How you want to do your logging. You may choose "syslog", + "file", or "both". Setting this to "syslog" is nice because + you can keep all of your sudo logs in one place (see the + example syslog.conf file). The default is "syslog". + Sudoers options: syslog and logfile + + --with-loglen=NUMBER + Number of characters per line for the file log. This is only used if + you are to "file" or "both". This value is used to decide when to wrap + lines for nicer log files. The default is 80. Setting this to 0 + will disable the wrapping. + Sudoers options: loglinelen + + --with-logpath=PATH + Override the default location of the sudo log file and use + "path" instead. By default will use /var/log/sudo.log if + there is a /var/log dir, falling back to /var/adm/sudo.log + or /usr/adm/sudo.log if not. + Sudoers option: logfile + + --with-long-otp-prompt + When validating with a One Time Password scheme (S/Key or + OPIE), a two-line prompt is used to make it easier to cut + and paste the challenge to a local window. It's not as + pretty as the default but some people find it more convenient. + Sudoers option: long_otp_prompt + + --with-mail-if-no-user=no, --without-mail-if-no-user + Normally, sudo will mail to the "alertmail" user if the user invoking + sudo is not in the sudoers file. This option disables that behavior. + Sudoers option: mail_no_user + + --with-mail-if-no-host + Send mail to the "alermail" user if the user exists in the sudoers + file, but is not allowed to run commands on the current host. + Sudoers option: mail_no_host + + --with-mail-if-noperms + Send mail to the "alermail" user if the user is allowed to use sudo but + the command they are trying is not listed in their sudoers file entry. + Sudoers option: mail_no_perms + + --with-mailsubject="SUBJECT" + Subject of the mail sent to the "mailto" user. The token "%h" + will expand to the hostname of the machine. + The default value is "*** SECURITY information for %h ***". + Sudoers option: mailsub + + --with-mailto=USER|MAIL_ALIAS + User (or mail alias) that mail from sudo is sent to. + This should go to a sysadmin at your site. The default value is "root". + Sudoers option: mailto + + --with-passprompt="PROMPT" + Default prompt to use when asking for a password; can be overridden + via the -p option and the SUDO_PROMPT environment variable. Supports + the "%H", "%h", "%U", and "%u" escapes as documented in the sudo + manual page. The default value is "Password:". + Sudoers option: passprompt + + --with-password-timeout=NUMBER + Number of minutes before the sudo password prompt times out. + The default is 5, set this to 0 for no password timeout. + Sudoers option: passwd_timeout + + --with-passwd-tries=NUMBER + Number of tries a user gets to enter his/her password before sudo logs + the failure and exits. The default is 3. + Sudoers option: passwd_tries + + --with-runas-default=USER + The default user to run commands as if the -u flag is not specified + on the command line. This defaults to "root". + Sudoers option: runas_default + + --with-secure-path[=PATH] + Path used for every command run from sudo(8). If you don't trust + users to have a reasonable PATH environment variable you may want + to use this. Another use is if you want to have the "root path" + be separate from the "user path." You will need to customize the + path for your site. This is not applied to users in the group + specified by --with-exemptgroup. If you do not specify a path, + "/bin:/usr/ucb:/usr/bin:/usr/sbin:/sbin:/usr/etc:/etc" is used. + Sudoers option: secure_path + + --with-sendmail=PATH + Override configure's guess as to the location of sendmail. + Sudoers option: mailerpath + + --with-sendmail=no, --without-sendmail + Do not use sendmail to mail messages to the "mailto" user. + Use only if you don't run sendmail or the equivalent. + Sudoers options: !mailerpath or !mailto + + --with-sudoers-mode=MODE + File mode for the sudoers file (octal). If you wish to + NFS-mount the sudoers file this must be group readable. + This value may overridden at run-time in the sudo.conf file. + The default mode is 0440. + + --with-sudoers-uid=UID + User id that "owns" the sudoers file. This is the numeric + id, **not** the symbolic name. This value may overridden + at run-time in the sudo.conf file. The default is 0. + + --with-sudoers-gid=GID + Group id that "owns" the sudoers file. This is the numeric + id, **not** the symbolic name. This value may overridden + at run-time in the sudo.conf file. The default is 0. + + --with-timeout=NUMBER + Number of minutes that can elapse before sudo will ask for a passwd + again. The default is 5, set it to 0 to always prompt for a password. + Sudoers option: timestamp_timeout + + --with-umask=MASK + Umask to use when running the root command. The default is 0022. + Sudoers option: umask + + --with-umask=no, --without-umask + Preserves the umask of the user invoking sudo. + Sudoers option: !umask + + --with-umask-override + Use the umask specified in sudoers even if it is less restrictive + than the user's. The default is to use the intersection of the + user's umask and the umask specified in sudoers. + Sudoers option: umask_override + +## OS dependent notes + +#### HP-UX + +The default C compiler shipped with HP-UX is not an ANSI compiler. +You must use either the HP ANSI C compiler or gcc to build sudo. +Binary packages of gcc are available from http://hpux.connect.org.uk/. + +To prevent PAM from overriding the value of umask on HP-UX 11, +you will need to add a line like the following to /etc/pam.conf: + + sudo session required libpam_hpsec.so.1 bypass_umask + +#### Linux + +PAM and LDAP headers are not installed by default on most Linux +systems. You will need to install the "pam-dev" (rpm) or libpam0g-dev +(deb) package if `/usr/include/security/pam_appl.h` is not present +on your system. If you wish to build with LDAP support you will +also need the "openldap-devel" (rpm) or "libldap2-dev" (deb) package. + +#### macOS + +The pseudo-tty support in the Darwin kernel has bugs related to +its handling of the SIGTSTP, SIGTTIN, and SIGTTOU signals. It does +not restart reads and writes when those signals are delivered. This +may cause problems for some commands when I/O logging is enabled. +The issue has been reported to Apple and is bug id #7952709. + +#### Solaris + +You need to have a C compiler in order to build sudo. Since Solaris +does not come with one by default this means that you either need +to either install the Solaris Studio compiler suite, available for +free from www.oracle.com, or install the GNU C compiler (gcc) which +is can be installed via the pkg utility on Solaris 11 and higher +and is distributed on the Solaris Companion CD for older Solaris +releases. You can also download gcc packages from +https://www.opencsw.org/packages/CSWgcc4core/. |