summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2019-10-23 13:46:57 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2019-10-23 13:47:06 +0000
commit0e6a2ddb7552d0ae58363bb93a1cc9322f30dd95 (patch)
tree364316ebd4eafe4b66ba557b0e9ae314559cf364
parentReleasing progress-linux version 1.8.27-1.1~progress5+u1. (diff)
downloadsudo-0e6a2ddb7552d0ae58363bb93a1cc9322f30dd95.tar.xz
sudo-0e6a2ddb7552d0ae58363bb93a1cc9322f30dd95.zip
Merging upstream version 1.8.28p1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
-rw-r--r--ChangeLog1172
-rw-r--r--INSTALL45
-rw-r--r--MANIFEST24
-rw-r--r--Makefile.in4
-rw-r--r--NEWS88
-rw-r--r--aclocal.m4114
-rw-r--r--config.h.in19
-rwxr-xr-xconfigure350
-rw-r--r--configure.ac235
-rw-r--r--doc/CONTRIBUTORS3
-rw-r--r--doc/Makefile.in80
-rw-r--r--doc/TROUBLESHOOTING75
-rw-r--r--doc/UPGRADE12
-rw-r--r--doc/cvtsudoers.cat282
-rw-r--r--doc/cvtsudoers.man.in2
-rw-r--r--doc/cvtsudoers.mdoc.in2
-rwxr-xr-xdoc/fixman.sh2
-rw-r--r--doc/sudo.cat741
-rw-r--r--doc/sudo.conf.cat434
-rw-r--r--doc/sudo.conf.man.in23
-rw-r--r--doc/sudo.conf.man.in.sed15
-rw-r--r--doc/sudo.conf.mdoc.in23
-rw-r--r--doc/sudo.man.in31
-rw-r--r--doc/sudo.mdoc.in30
-rw-r--r--doc/sudo_plugin.cat1683
-rw-r--r--doc/sudo_plugin.man.in68
-rw-r--r--doc/sudo_plugin.mdoc.in68
-rw-r--r--doc/sudoers.cat2931
-rw-r--r--doc/sudoers.ldap.cat1033
-rw-r--r--doc/sudoers.ldap.man.in8
-rw-r--r--doc/sudoers.ldap.mdoc.in8
-rw-r--r--doc/sudoers.man.in311
-rw-r--r--doc/sudoers.mdoc.in299
-rw-r--r--doc/sudoers_timestamp.cat201
-rw-r--r--doc/sudoers_timestamp.man.in2
-rw-r--r--doc/sudoers_timestamp.mdoc.in2
-rw-r--r--doc/sudoreplay.cat303
-rw-r--r--doc/sudoreplay.man.in19
-rw-r--r--doc/sudoreplay.mdoc.in19
-rw-r--r--doc/visudo.cat226
-rw-r--r--doc/visudo.man.in42
-rw-r--r--doc/visudo.mdoc.in42
-rw-r--r--examples/Makefile.in2
-rw-r--r--include/Makefile.in2
-rw-r--r--include/compat/charclass.h2
-rw-r--r--include/compat/endian.h2
-rw-r--r--include/compat/fnmatch.h2
-rw-r--r--include/compat/getopt.h2
-rw-r--r--include/compat/glob.h2
-rw-r--r--include/compat/nss_dbdefs.h2
-rw-r--r--include/compat/sha2.h2
-rw-r--r--include/sudo_compat.h20
-rw-r--r--include/sudo_conf.h2
-rw-r--r--include/sudo_debug.h2
-rw-r--r--include/sudo_digest.h2
-rw-r--r--include/sudo_dso.h2
-rw-r--r--include/sudo_event.h2
-rw-r--r--include/sudo_fatal.h2
-rw-r--r--include/sudo_gettext.h2
-rw-r--r--include/sudo_lbuf.h2
-rw-r--r--include/sudo_plugin.h4
-rw-r--r--include/sudo_queue.h2
-rw-r--r--include/sudo_rand.h2
-rw-r--r--include/sudo_util.h5
-rw-r--r--lib/util/Makefile.in84
-rw-r--r--lib/util/aix.c2
-rw-r--r--lib/util/arc4random.c7
-rw-r--r--lib/util/arc4random.h2
-rw-r--r--lib/util/arc4random_uniform.c2
-rw-r--r--lib/util/closefrom.c13
-rw-r--r--lib/util/digest.c2
-rw-r--r--lib/util/digest_gcrypt.c2
-rw-r--r--lib/util/digest_openssl.c2
-rw-r--r--lib/util/event.c32
-rw-r--r--lib/util/event_poll.c2
-rw-r--r--lib/util/event_select.c2
-rw-r--r--lib/util/fatal.c4
-rw-r--r--lib/util/fnmatch.c7
-rw-r--r--lib/util/getcwd.c2
-rw-r--r--lib/util/getdelim.c (renamed from lib/util/getline.c)95
-rw-r--r--lib/util/getentropy.c2
-rw-r--r--lib/util/getgrouplist.c3
-rw-r--r--lib/util/gethostname.c2
-rw-r--r--lib/util/getopt_long.c2
-rw-r--r--lib/util/gettime.c2
-rw-r--r--lib/util/gidlist.c2
-rw-r--r--lib/util/glob.c2
-rw-r--r--lib/util/inet_ntop.c7
-rw-r--r--lib/util/inet_pton.c5
-rw-r--r--lib/util/isblank.c2
-rw-r--r--lib/util/key_val.c2
-rw-r--r--lib/util/lbuf.c2
-rw-r--r--lib/util/locking.c2
-rw-r--r--lib/util/memrchr.c2
-rw-r--r--lib/util/memset_s.c3
-rw-r--r--lib/util/mksiglist.c2
-rw-r--r--lib/util/mksigname.c2
-rw-r--r--lib/util/mktemp.c2
-rw-r--r--lib/util/nanosleep.c2
-rw-r--r--lib/util/parseln.c6
-rw-r--r--lib/util/pipe2.c2
-rw-r--r--lib/util/progname.c2
-rw-r--r--lib/util/pw_dup.c2
-rw-r--r--lib/util/reallocarray.c2
-rw-r--r--lib/util/regress/atofoo/atofoo_test.c40
-rw-r--r--lib/util/regress/getdelim/getdelim_test.c149
-rw-r--r--lib/util/regress/getgrouplist/getgrouplist_test.c2
-rw-r--r--lib/util/regress/parse_gids/parse_gids_test.c2
-rw-r--r--lib/util/regress/progname/progname_test.c2
-rw-r--r--lib/util/regress/strsig/strsig_test.c312
-rw-r--r--lib/util/regress/strsplit/strsplit_test.c2
-rw-r--r--lib/util/regress/sudo_conf/conf_test.c2
-rw-r--r--lib/util/regress/sudo_parseln/parseln_test.c2
-rw-r--r--lib/util/regress/tailq/hltq_test.c2
-rw-r--r--lib/util/regress/vsyslog/vsyslog_test.c18
-rw-r--r--lib/util/secure_path.c2
-rw-r--r--lib/util/setgroups.c2
-rw-r--r--lib/util/sha2.c2
-rw-r--r--lib/util/sig2str.c28
-rw-r--r--lib/util/snprintf.c4
-rw-r--r--lib/util/str2sig.c168
-rw-r--r--lib/util/strlcat.c2
-rw-r--r--lib/util/strlcpy.c2
-rw-r--r--lib/util/strndup.c2
-rw-r--r--lib/util/strnlen.c2
-rw-r--r--lib/util/strsignal.c2
-rw-r--r--lib/util/strsplit.c2
-rw-r--r--lib/util/strtobool.c2
-rw-r--r--lib/util/strtoid.c102
-rw-r--r--lib/util/strtomode.c2
-rw-r--r--lib/util/strtonum.c2
-rw-r--r--lib/util/sudo_conf.c2
-rw-r--r--lib/util/sudo_debug.c23
-rw-r--r--lib/util/sudo_dso.c2
-rw-r--r--lib/util/term.c10
-rw-r--r--lib/util/ttyname_dev.c2
-rw-r--r--lib/util/ttysize.c2
-rw-r--r--lib/util/util.exp.in1
-rw-r--r--lib/util/utimens.c2
-rw-r--r--lib/util/vsyslog.c2
-rw-r--r--lib/zlib/Makefile.in2
-rwxr-xr-xlog2cl.pl2
-rw-r--r--m4/sudo.m414
-rwxr-xr-xmkdep.pl11
-rwxr-xr-xmkpkg35
-rw-r--r--pathnames.h.in2
-rw-r--r--plugins/group_file/Makefile.in4
-rw-r--r--plugins/group_file/getgrent.c2
-rw-r--r--plugins/group_file/group_file.c2
-rw-r--r--plugins/group_file/plugin_test.c8
-rw-r--r--plugins/sample/Makefile.in4
-rw-r--r--plugins/sample/sample_plugin.c2
-rw-r--r--plugins/sudoers/Makefile.in111
-rw-r--r--plugins/sudoers/alias.c10
-rw-r--r--plugins/sudoers/audit.c2
-rw-r--r--plugins/sudoers/auth/afs.c2
-rw-r--r--plugins/sudoers/auth/aix_auth.c233
-rw-r--r--plugins/sudoers/auth/bsdauth.c2
-rw-r--r--plugins/sudoers/auth/dce.c11
-rw-r--r--plugins/sudoers/auth/fwtk.c4
-rw-r--r--plugins/sudoers/auth/kerb5.c2
-rw-r--r--plugins/sudoers/auth/pam.c339
-rw-r--r--plugins/sudoers/auth/passwd.c2
-rw-r--r--plugins/sudoers/auth/rfc1938.c2
-rw-r--r--plugins/sudoers/auth/secureware.c2
-rw-r--r--plugins/sudoers/auth/securid5.c6
-rw-r--r--plugins/sudoers/auth/sia.c2
-rw-r--r--plugins/sudoers/auth/sudo_auth.c4
-rw-r--r--plugins/sudoers/auth/sudo_auth.h2
-rw-r--r--plugins/sudoers/base64.c2
-rw-r--r--plugins/sudoers/boottime.c4
-rw-r--r--plugins/sudoers/bsm_audit.c2
-rw-r--r--plugins/sudoers/bsm_audit.h2
-rw-r--r--plugins/sudoers/check.c6
-rw-r--r--plugins/sudoers/check.h2
-rw-r--r--plugins/sudoers/cvtsudoers.c3
-rw-r--r--plugins/sudoers/cvtsudoers.h2
-rw-r--r--plugins/sudoers/cvtsudoers_json.c2
-rw-r--r--plugins/sudoers/cvtsudoers_ldif.c2
-rw-r--r--plugins/sudoers/cvtsudoers_pwutil.c18
-rw-r--r--plugins/sudoers/def_data.c4
-rw-r--r--plugins/sudoers/def_data.h50
-rw-r--r--plugins/sudoers/def_data.in3
-rw-r--r--plugins/sudoers/defaults.c5
-rw-r--r--plugins/sudoers/defaults.h3
-rw-r--r--plugins/sudoers/digestname.c2
-rw-r--r--plugins/sudoers/editor.c2
-rw-r--r--plugins/sudoers/env.c183
-rw-r--r--plugins/sudoers/env_pattern.c2
-rw-r--r--plugins/sudoers/file.c4
-rw-r--r--plugins/sudoers/filedigest.c2
-rw-r--r--plugins/sudoers/find_path.c8
-rw-r--r--plugins/sudoers/fmtsudoers.c18
-rw-r--r--plugins/sudoers/gc.c2
-rw-r--r--plugins/sudoers/gentime.c2
-rw-r--r--plugins/sudoers/getspwuid.c2
-rw-r--r--plugins/sudoers/gmtoff.c2
-rw-r--r--plugins/sudoers/goodpath.c2
-rw-r--r--plugins/sudoers/gram.c235
-rw-r--r--plugins/sudoers/gram.h4
-rw-r--r--plugins/sudoers/gram.y21
-rw-r--r--plugins/sudoers/group_plugin.c6
-rw-r--r--plugins/sudoers/hexchar.c2
-rw-r--r--plugins/sudoers/ins_2001.h2
-rw-r--r--plugins/sudoers/ins_classic.h2
-rw-r--r--plugins/sudoers/ins_csops.h2
-rw-r--r--plugins/sudoers/ins_goons.h2
-rw-r--r--plugins/sudoers/ins_python.h2
-rw-r--r--plugins/sudoers/insults.h2
-rw-r--r--plugins/sudoers/interfaces.c2
-rw-r--r--plugins/sudoers/interfaces.h2
-rw-r--r--plugins/sudoers/iolog.c21
-rw-r--r--plugins/sudoers/iolog.h2
-rw-r--r--plugins/sudoers/iolog_files.h2
-rw-r--r--plugins/sudoers/iolog_path.c2
-rw-r--r--plugins/sudoers/iolog_util.c16
-rw-r--r--plugins/sudoers/ldap.c34
-rw-r--r--plugins/sudoers/ldap_conf.c8
-rw-r--r--plugins/sudoers/ldap_util.c7
-rw-r--r--plugins/sudoers/linux_audit.c2
-rw-r--r--plugins/sudoers/linux_audit.h2
-rw-r--r--plugins/sudoers/locale.c2
-rw-r--r--plugins/sudoers/logging.c188
-rw-r--r--plugins/sudoers/logging.h2
-rw-r--r--plugins/sudoers/logwrap.c2
-rw-r--r--plugins/sudoers/match.c643
-rw-r--r--plugins/sudoers/match_addr.c2
-rw-r--r--plugins/sudoers/match_command.c542
-rw-r--r--plugins/sudoers/match_digest.c109
-rw-r--r--plugins/sudoers/mkdir_parents.c2
-rw-r--r--plugins/sudoers/parse.c29
-rw-r--r--plugins/sudoers/parse.h25
-rw-r--r--plugins/sudoers/parse_ldif.c4
-rw-r--r--plugins/sudoers/po/ast.mobin0 -> 34264 bytes
-rw-r--r--plugins/sudoers/po/ast.po2343
-rw-r--r--plugins/sudoers/po/ca.mobin43748 -> 43707 bytes
-rw-r--r--plugins/sudoers/po/cs.mobin49130 -> 49780 bytes
-rw-r--r--plugins/sudoers/po/cs.po1223
-rw-r--r--plugins/sudoers/po/da.mobin46545 -> 46504 bytes
-rw-r--r--plugins/sudoers/po/de.mobin51907 -> 52479 bytes
-rw-r--r--plugins/sudoers/po/de.po1204
-rw-r--r--plugins/sudoers/po/el.mobin51050 -> 51009 bytes
-rw-r--r--plugins/sudoers/po/eo.mobin46893 -> 48087 bytes
-rw-r--r--plugins/sudoers/po/eo.po1373
-rw-r--r--plugins/sudoers/po/eu.mobin6445 -> 6404 bytes
-rw-r--r--plugins/sudoers/po/fi.mobin45911 -> 45870 bytes
-rw-r--r--plugins/sudoers/po/fr.mobin44799 -> 55859 bytes
-rw-r--r--plugins/sudoers/po/fr.po2110
-rw-r--r--plugins/sudoers/po/fur.mobin9526 -> 9485 bytes
-rw-r--r--plugins/sudoers/po/hr.mobin49993 -> 49952 bytes
-rw-r--r--plugins/sudoers/po/hu.mobin26114 -> 26073 bytes
-rw-r--r--plugins/sudoers/po/it.mobin49417 -> 50037 bytes
-rw-r--r--plugins/sudoers/po/it.po1255
-rw-r--r--plugins/sudoers/po/ja.mobin56302 -> 56925 bytes
-rw-r--r--plugins/sudoers/po/ja.po1205
-rw-r--r--plugins/sudoers/po/ko.mobin45799 -> 51270 bytes
-rw-r--r--plugins/sudoers/po/ko.po1745
-rw-r--r--plugins/sudoers/po/lt.mobin2035 -> 1994 bytes
-rw-r--r--plugins/sudoers/po/nb.mobin48349 -> 48881 bytes
-rw-r--r--plugins/sudoers/po/nb.po1207
-rw-r--r--plugins/sudoers/po/nl.mobin39137 -> 39096 bytes
-rw-r--r--plugins/sudoers/po/pl.mobin50114 -> 50709 bytes
-rw-r--r--plugins/sudoers/po/pl.po1221
-rw-r--r--plugins/sudoers/po/pt.mobin48637 -> 49218 bytes
-rw-r--r--plugins/sudoers/po/pt.po1203
-rw-r--r--plugins/sudoers/po/pt_BR.mobin50337 -> 50955 bytes
-rw-r--r--plugins/sudoers/po/pt_BR.po1227
-rw-r--r--plugins/sudoers/po/ru.mobin11596 -> 11555 bytes
-rw-r--r--plugins/sudoers/po/sk.mobin4968 -> 4927 bytes
-rw-r--r--plugins/sudoers/po/sl.mobin36454 -> 36413 bytes
-rw-r--r--plugins/sudoers/po/sr.mobin57820 -> 57779 bytes
-rw-r--r--plugins/sudoers/po/sudoers.pot1178
-rw-r--r--plugins/sudoers/po/sv.mobin48105 -> 48682 bytes
-rw-r--r--plugins/sudoers/po/sv.po1207
-rw-r--r--plugins/sudoers/po/tr.mobin14020 -> 13979 bytes
-rw-r--r--plugins/sudoers/po/uk.mobin67174 -> 67966 bytes
-rw-r--r--plugins/sudoers/po/uk.po1207
-rw-r--r--plugins/sudoers/po/vi.mobin54737 -> 54696 bytes
-rw-r--r--plugins/sudoers/po/zh_CN.mobin44917 -> 44876 bytes
-rw-r--r--plugins/sudoers/po/zh_TW.mobin0 -> 46336 bytes
-rw-r--r--plugins/sudoers/po/zh_TW.po2361
-rw-r--r--plugins/sudoers/policy.c6
-rw-r--r--plugins/sudoers/prompt.c2
-rw-r--r--plugins/sudoers/pwutil.c20
-rw-r--r--plugins/sudoers/pwutil.h2
-rw-r--r--plugins/sudoers/pwutil_impl.c3
-rw-r--r--plugins/sudoers/rcstr.c2
-rw-r--r--plugins/sudoers/redblack.c2
-rw-r--r--plugins/sudoers/redblack.h2
-rw-r--r--plugins/sudoers/regress/check_symbols/check_symbols.c2
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test1.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test10.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test11.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test12.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test13.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test14.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test15.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test16.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test17.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test18.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test19.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test2.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test20.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test21.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test22.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test23.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test24.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test25.sh1
-rw-r--r--plugins/sudoers/regress/cvtsudoers/test26.err.ok3
-rw-r--r--plugins/sudoers/regress/cvtsudoers/test26.out.ok3
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test26.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test27.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test28.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test29.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test3.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test30.sh1
-rw-r--r--plugins/sudoers/regress/cvtsudoers/test31.sh1
-rw-r--r--plugins/sudoers/regress/cvtsudoers/test32.err.ok1
-rw-r--r--plugins/sudoers/regress/cvtsudoers/test32.out.ok1
-rw-r--r--plugins/sudoers/regress/cvtsudoers/test32.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test33.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test4.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test5.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test6.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test7.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test8.sh1
-rwxr-xr-xplugins/sudoers/regress/cvtsudoers/test9.sh1
-rw-r--r--plugins/sudoers/regress/env_match/check_env_pattern.c2
-rw-r--r--plugins/sudoers/regress/iolog_path/check_iolog_path.c2
-rw-r--r--plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c2
-rw-r--r--plugins/sudoers/regress/iolog_util/check_iolog_util.c2
-rw-r--r--plugins/sudoers/regress/logging/check_wrap.c2
-rw-r--r--plugins/sudoers/regress/parser/check_addr.c2
-rw-r--r--plugins/sudoers/regress/parser/check_base64.c2
-rw-r--r--plugins/sudoers/regress/parser/check_digest.c2
-rw-r--r--plugins/sudoers/regress/parser/check_fill.c2
-rw-r--r--plugins/sudoers/regress/parser/check_gentime.c2
-rw-r--r--plugins/sudoers/regress/parser/check_hexchar.c2
-rw-r--r--plugins/sudoers/regress/starttime/check_starttime.c2
-rw-r--r--plugins/sudoers/regress/sudoers/test2.json.ok6
-rw-r--r--plugins/sudoers/regress/sudoers/test2.toke.ok6
-rw-r--r--plugins/sudoers/regress/testsudoers/test3.d/root1
-rwxr-xr-xplugins/sudoers/regress/testsudoers/test3.sh26
-rw-r--r--plugins/sudoers/regress/testsudoers/test5.out.ok2
-rwxr-xr-xplugins/sudoers/regress/testsudoers/test5.sh2
-rw-r--r--plugins/sudoers/set_perms.c105
-rw-r--r--plugins/sudoers/solaris_audit.c2
-rw-r--r--plugins/sudoers/solaris_audit.h2
-rw-r--r--plugins/sudoers/sssd.c11
-rw-r--r--plugins/sudoers/starttime.c13
-rw-r--r--plugins/sudoers/strlist.c4
-rw-r--r--plugins/sudoers/strlist.h2
-rw-r--r--plugins/sudoers/stubs.c2
-rw-r--r--plugins/sudoers/sudo_ldap.h2
-rw-r--r--plugins/sudoers/sudo_ldap_conf.h2
-rw-r--r--plugins/sudoers/sudo_nss.c3
-rw-r--r--plugins/sudoers/sudo_nss.h2
-rw-r--r--plugins/sudoers/sudo_printf.c25
-rw-r--r--plugins/sudoers/sudoers.c45
-rw-r--r--plugins/sudoers/sudoers.h14
-rw-r--r--plugins/sudoers/sudoers_debug.c2
-rw-r--r--plugins/sudoers/sudoers_debug.h2
-rw-r--r--plugins/sudoers/sudoers_version.h2
-rw-r--r--plugins/sudoers/sudoreplay.c28
-rw-r--r--plugins/sudoers/testsudoers.c2
-rw-r--r--plugins/sudoers/timeout.c2
-rw-r--r--plugins/sudoers/timestamp.c8
-rw-r--r--plugins/sudoers/timestr.c2
-rw-r--r--plugins/sudoers/toke.c3356
-rw-r--r--plugins/sudoers/toke.h2
-rw-r--r--plugins/sudoers/toke.l32
-rw-r--r--plugins/sudoers/toke_util.c2
-rw-r--r--plugins/sudoers/tsdump.c6
-rw-r--r--plugins/sudoers/tsgetgrpw.c2
-rw-r--r--plugins/sudoers/tsgetgrpw.h2
-rw-r--r--plugins/sudoers/visudo.c2
-rw-r--r--plugins/system_group/Makefile.in4
-rw-r--r--plugins/system_group/system_group.c2
-rw-r--r--po/ast.mobin19664 -> 19623 bytes
-rw-r--r--po/ca.mobin19183 -> 19142 bytes
-rw-r--r--po/cs.mobin19346 -> 19548 bytes
-rw-r--r--po/cs.po541
-rw-r--r--po/da.mobin18394 -> 18722 bytes
-rw-r--r--po/da.po576
-rw-r--r--po/de.mobin19908 -> 20998 bytes
-rw-r--r--po/de.po609
-rw-r--r--po/eo.mobin18439 -> 19026 bytes
-rw-r--r--po/eo.po553
-rw-r--r--po/es.mobin19231 -> 19418 bytes
-rw-r--r--po/es.po536
-rw-r--r--po/eu.mobin6812 -> 6771 bytes
-rw-r--r--po/fi.mobin19870 -> 19829 bytes
-rw-r--r--po/fr.mobin20512 -> 20749 bytes
-rw-r--r--po/fr.po543
-rw-r--r--po/fur.mobin18376 -> 18335 bytes
-rw-r--r--po/gl.mobin17653 -> 17612 bytes
-rw-r--r--po/hr.mobin19504 -> 19463 bytes
-rw-r--r--po/hu.mobin20167 -> 20126 bytes
-rw-r--r--po/it.mobin19967 -> 20155 bytes
-rw-r--r--po/it.po553
-rw-r--r--po/ja.mobin22906 -> 23111 bytes
-rw-r--r--po/ja.po543
-rw-r--r--po/ko.mobin20165 -> 20933 bytes
-rw-r--r--po/ko.po599
-rw-r--r--po/nb.mobin19332 -> 19515 bytes
-rw-r--r--po/nb.po543
-rw-r--r--po/nl.mobin17756 -> 17715 bytes
-rw-r--r--po/nn.mobin3058 -> 3017 bytes
-rw-r--r--po/pl.mobin19896 -> 20100 bytes
-rw-r--r--po/pl.po538
-rw-r--r--po/pt.mobin19367 -> 19569 bytes
-rw-r--r--po/pt.po543
-rw-r--r--po/pt_BR.mobin20037 -> 20215 bytes
-rw-r--r--po/pt_BR.po543
-rw-r--r--po/ru.mobin24561 -> 24520 bytes
-rw-r--r--po/sk.mobin15536 -> 15495 bytes
-rw-r--r--po/sl.mobin16504 -> 16463 bytes
-rw-r--r--po/sr.mobin24607 -> 24566 bytes
-rw-r--r--po/sudo.pot552
-rw-r--r--po/sv.mobin19080 -> 19274 bytes
-rw-r--r--po/sv.po545
-rw-r--r--po/tr.mobin19231 -> 19438 bytes
-rw-r--r--po/tr.po545
-rw-r--r--po/uk.mobin26643 -> 26984 bytes
-rw-r--r--po/uk.po545
-rw-r--r--po/vi.mobin22016 -> 21975 bytes
-rw-r--r--po/zh_CN.mobin17614 -> 17573 bytes
-rw-r--r--po/zh_TW.mobin18739 -> 18752 bytes
-rw-r--r--po/zh_TW.po830
-rwxr-xr-xpp439
-rw-r--r--src/Makefile.in2
-rw-r--r--src/conversation.c24
-rw-r--r--src/env_hooks.c2
-rw-r--r--src/exec.c27
-rw-r--r--src/exec_common.c2
-rw-r--r--src/exec_monitor.c28
-rw-r--r--src/exec_nopty.c21
-rw-r--r--src/exec_pty.c33
-rw-r--r--src/get_pty.c2
-rw-r--r--src/hooks.c2
-rw-r--r--src/load_plugins.c14
-rw-r--r--src/net_ifs.c17
-rw-r--r--src/openbsd.c2
-rw-r--r--src/parse_args.c24
-rw-r--r--src/preload.c2
-rw-r--r--src/preserve_fds.c2
-rw-r--r--src/regress/noexec/check_noexec.c2
-rw-r--r--src/regress/ttyname/check_ttyname.c2
-rw-r--r--src/selinux.c105
-rw-r--r--src/sesh.c2
-rw-r--r--src/signal.c2
-rw-r--r--src/solaris.c2
-rw-r--r--src/sudo.c9
-rw-r--r--src/sudo.h10
-rw-r--r--src/sudo_edit.c5
-rw-r--r--src/sudo_exec.h2
-rw-r--r--src/sudo_noexec.c2
-rw-r--r--src/sudo_plugin_int.h2
-rw-r--r--src/sudo_usage.h.in2
-rw-r--r--src/tcsetpgrp_nobg.c2
-rw-r--r--src/tgetpass.c61
-rw-r--r--src/ttyname.c11
-rw-r--r--src/utmp.c10
-rw-r--r--sudo.pp2
464 files changed, 27918 insertions, 25765 deletions
diff --git a/ChangeLog b/ChangeLog
index b7744ea..c92b337 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,1175 @@
+2019-10-16 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * NEWS, configure, configure.ac:
+ Sudo 1.8.28p1
+ [09ceaddc94f9]
+
+2019-10-15 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/parse.c:
+ The fix for bug #869 broke "sudo -v" when verifypw=all (the default)
+ [aac35bcd8584]
+
+2019-10-10 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/po/ca.mo, plugins/sudoers/po/da.mo,
+ plugins/sudoers/po/el.mo, plugins/sudoers/po/eu.mo,
+ plugins/sudoers/po/fi.mo, plugins/sudoers/po/fur.mo,
+ plugins/sudoers/po/hr.mo, plugins/sudoers/po/hu.mo,
+ plugins/sudoers/po/ko.mo, plugins/sudoers/po/lt.mo,
+ plugins/sudoers/po/nl.mo, plugins/sudoers/po/ru.mo,
+ plugins/sudoers/po/sk.mo, plugins/sudoers/po/sl.mo,
+ plugins/sudoers/po/sr.mo, plugins/sudoers/po/tr.mo,
+ plugins/sudoers/po/zh_CN.mo, po/ast.mo, po/ca.mo, po/es.mo,
+ po/eu.mo, po/fi.mo, po/fur.mo, po/gl.mo, po/hr.mo, po/hu.mo,
+ po/ko.mo, po/nl.mo, po/nn.mo, po/ru.mo, po/sk.mo, po/sl.mo,
+ po/sr.mo, po/sudo.pot, po/vi.mo, po/zh_CN.mo:
+ regen
+ [362645d256b7]
+
+ * lib/util/regress/atofoo/atofoo_test.c,
+ plugins/sudoers/regress/testsudoers/test5.out.ok,
+ plugins/sudoers/regress/testsudoers/test5.sh:
+ Add sudo_strtoid() tests for -1 and range errors. Also adjust
+ testsudoers/test5 which relied upon gid -1 parsing.
+ [db06a8336c09]
+
+ * NEWS, lib/util/strtoid.c:
+ Treat an ID of -1 as invalid since that means "no change". Fixes
+ CVE-2019-14287. Found by Joe Vennix from Apple Information Security.
+ [83db8dba09e7]
+
+2019-10-06 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * INSTALL, configure, configure.ac:
+ Back out compiler override for now.
+ [f03f7fd7ff8b]
+
+ * configure, configure.ac:
+ Only prefer clang over gcc on BSD systems.
+ [2309baa23a00]
+
+2019-10-05 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * Makefile.in:
+ Fix "make pvs-studio" run in a build dir
+ [a49635de3777]
+
+2019-09-27 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/po/sudoers.pot, po/sudo.pot:
+ regen
+ [430d45f3b461]
+
+ * NEWS:
+ Bug #898
+ [3d07895888e8]
+
+ * src/exec.c, src/exec_monitor.c, src/exec_nopty.c, src/exec_pty.c,
+ src/selinux.c, src/sudo.c, src/sudo.h:
+ Fix restoring the file context of the user's tty with SELinux. Also
+ fix broken tty labeling when running a command in a pty. Includes a
+ fix for a typo introduced in the last change set.
+ [eb3f547b08f8]
+
+ * lib/util/arc4random.c:
+ _rs_random_buf is currently unused
+ [e384fc3625e8]
+
+ * src/selinux.c:
+ Add some debugging around context setting and tty labeling Also be
+ more extact with error return values
+ [ed66480282c7]
+
+2019-09-21 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * lib/util/sudo_debug.c:
+ Better error message when debug log file cannot be opened.
+ [09e0cdff0c49]
+
+2019-09-20 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * .hgignore:
+ Ignore in-tree build directory.
+ [66577c63f097]
+
+ * configure, configure.ac:
+ Set CC before AC_USE_SYSTEM_EXTENSIONS to get our preferred
+ compiler.
+ [6a318eeffb30]
+
+2019-09-19 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * pp:
+ Update Polypkg to the latest version from git.
+ [68bbecc25007]
+
+ * configure, configure.ac:
+ If no mandoc or nroff is present, install mdoc format manuals. If
+ there is no installed nroff/mandoc they will need to install groff
+ or heirloom doctools to format the manual pages.
+ [6dd386c1a378]
+
+2019-09-18 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * doc/sudoers.man.in, doc/sudoers.mdoc.in, include/sudo_plugin.h:
+ Refer to number of terminal lines, not rows, for consistency.
+ [566e3e38058f]
+
+2019-09-17 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * INSTALL, configure, configure.ac:
+ Prefer clang over gcc. We want to use clang on systems where clang
+ is the system compiler. It is less common to have clang installed on
+ systems where gcc is the system compiler.
+ [d29d764a4938]
+
+ * INSTALL:
+ No longer need bypass_last_login on HP-UX, warnings work with clang.
+ Also add deb package names for pam and ldap devel on Linux.
+ [6aff480b1f4b]
+
+ * src/parse_args.c:
+ Silence a warning from clang about string concatenation.
+ [cadba1a4d86d]
+
+2019-09-14 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * NEWS, doc/UPGRADE:
+ sudoedit umask fix
+ [4bfc0e393e2a]
+
+2019-09-13 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * lib/util/event.c:
+ Fix sorting of the time-based event queue.
+ [f12e5a877c8a]
+
+ * lib/util/event.c:
+ Support default base in got_exit, got_break, loopexit, loopbreak,
+ loopcontinue
+ [da02194b5ba9]
+
+2019-09-11 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * src/sudo_edit.c:
+ Create new files with the umask specified in sudoers.
+ [4d0b6152834b]
+
+2019-08-30 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * src/sudo.h:
+ Enable asserts for Coverity too.
+ [b830f200a8bd]
+
+ * src/parse_args.c, src/sudo.h:
+ Add asserts() to avoid static analyzer false positives.
+ [860aca50028d]
+
+ * plugins/sudoers/gram.c, plugins/sudoers/gram.y:
+ Plug memory leak on malloc failure.
+ [1b35743703d4]
+
+ * plugins/sudoers/ldap_util.c:
+ Plug memory leak on malloc failure.
+ [c2257637d659]
+
+2019-08-29 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/auth/pam.c:
+ Add sudo_pam_strerror(), like pam_strerror() but never returns NULL.
+ It also uses strerror(errno) for PAM_SYSTEM_ERR.
+ [b070d1702112]
+
+ * plugins/sudoers/auth/pam.c:
+ If pam_start() fails, display the PAM error using pam_strerror(). It
+ is legal to pass pam_strerror() a NULL handle.
+ [6403fa1479d8]
+
+2019-08-27 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * doc/sudoreplay.man.in, doc/sudoreplay.mdoc.in,
+ plugins/sudoers/sudoreplay.c:
+ If the sudoreplay ID option is a fully-qualified path, use it
+ directly. Previously, one had to use the -d option to override the
+ I/O log directory.
+ [9fddb3ffc760]
+
+ * plugins/sudoers/Makefile.in:
+ regen
+ [f70579d2972b]
+
+ * MANIFEST, doc/sudo.conf.man.in.sed:
+ Add conditional for sesh path in sudo.conf manual.
+ [93b5c6fcf8f4]
+
+2019-08-26 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * NEWS:
+ Bug #895
+ [d69984bccd0e]
+
+ * plugins/sudoers/auth/aix_auth.c, plugins/sudoers/auth/dce.c,
+ plugins/sudoers/auth/fwtk.c, plugins/sudoers/auth/pam.c,
+ plugins/sudoers/auth/securid5.c, plugins/sudoers/auth/sudo_auth.c,
+ plugins/sudoers/check.c, plugins/sudoers/sudo_printf.c,
+ src/conversation.c:
+ Use the SUDO_CONV_PREFER_TTY flag during authentication. This
+ prevents the password and PAM prompts from being redirected. Bug
+ #895
+ [546082c674b7]
+
+2019-08-23 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * mkpkg:
+ Fix typo that prevented a missing linux audit lib from being
+ detected.
+ [b9412151615d]
+
+2019-08-20 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/sudoreplay.c:
+ Use fputs(), not printf() for plain strings.
+ [b102ae1cb6da]
+
+ * NEWS:
+ Recent fixes.
+ [8249e98a05c8]
+
+ * plugins/sudoers/ldap.c:
+ Add user ID to the search filter when matching sudoUser. We already
+ support group IDs but the user ID was missing. From
+ sudo-1.8.23-ldapsearchuidfix.patch in RHEL 7.
+ [3da7b9f990be]
+
+ * plugins/sudoers/regress/sudoers/test2.json.ok,
+ plugins/sudoers/regress/sudoers/test2.toke.ok,
+ plugins/sudoers/toke.c, plugins/sudoers/toke.l:
+ Fix parsing of double-quoted Defaults bindings that start with % or
+ +. From sudo-1.8.23-fix-double-quote-parsing-for-Defaults-
+ values.patch in RHEL 7.
+ [df613e67ef45]
+
+ * src/exec.c:
+ Restore core dump resource limit before the PAM session module is
+ run. Otherwise, we may override the limits set by PAM. Bug #894
+ [f35441098234]
+
+2019-08-19 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * lib/util/sig2str.c, lib/util/str2sig.c:
+ sys_signame on macOS contains lower-cases names
+ [d7af71311b3d]
+
+ * MANIFEST, configure, configure.ac, lib/util/Makefile.in,
+ lib/util/regress/strsig/strsig_test.c:
+ Add regress tests for str2sig() and sig2str().
+ [fb73303699fb]
+
+ * lib/util/str2sig.c:
+ SIGIOT and SIGABRT are aliases on BSD systems.
+ [d35f75aba04a]
+
+ * lib/util/sig2str.c, lib/util/str2sig.c:
+ Fix handling of real-time signals.
+ [39066a5eabcb]
+
+2019-08-16 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * NEWS:
+ ipa_hostname fix
+ [54245ed09830]
+
+2019-08-15 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/file.c, plugins/sudoers/gram.c,
+ plugins/sudoers/gram.y, plugins/sudoers/ldap.c,
+ plugins/sudoers/match.c, plugins/sudoers/parse.h,
+ plugins/sudoers/sssd.c:
+ Fix special handling of ipa_hostname that was lost in sudo 1.8.24.
+ We now include the long and short hostname in sudo parser container.
+ [b4f31dbe3109]
+
+2019-08-14 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/iolog_event.h:
+ Remove unused include file.
+ [0731078e72b1]
+
+2019-08-05 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * NEWS, doc/UPGRADE:
+ Mention I/O log signal change in NEWS and UPGRADE files.
+ [ac7969640146]
+
+ * MANIFEST, NEWS, plugins/sudoers/po/ast.mo,
+ plugins/sudoers/po/ast.po:
+ Asturian translation for sudoers from translationproject.org.
+ [4f011f10129e]
+
+ * mkdep.pl:
+ Check source dir if source file is not listed in MANIFEST.
+ Previously, we just used the file name without $(srcdir).
+ [cd17ca929217]
+
+ * MANIFEST, config.h.in, configure, configure.ac, doc/sudoers.man.in,
+ doc/sudoers.mdoc.in, include/sudo_compat.h, lib/util/Makefile.in,
+ lib/util/str2sig.c, plugins/sudoers/iolog.c,
+ plugins/sudoers/iolog_util.c:
+ Store signal name, not number in I/O log timing file. The "SIG"
+ prefix is not used so, e.g. SIGTERM -> "TERM". This makes the I/O
+ log files portable from one system to another. Older I/O log files
+ with signal numbers can still be replayed.
+ [5652f831b715]
+
+2019-07-30 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * src/utmp.c:
+ Disable stringop-truncation false positive warnings on gcc 8.
+ Strings in struct utmp/utmpx are not guaranteed to be NUL-
+ terminated.
+ [644b97bba318]
+
+ * plugins/group_file/plugin_test.c, src/net_ifs.c:
+ Replace non-essential strncpy() calls.
+ [2377cad6e155]
+
+2019-07-26 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * configure, configure.ac:
+ Revert version back to 1.8.28
+ [4e2deb0b4925]
+
+ * lib/util/Makefile.in:
+ Link util functions being tested directly with the test harness.
+ Otherwise we may get the version from the installed libsudo_util.so.
+ [46c833080d13]
+
+2019-07-23 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/po/cs.mo, plugins/sudoers/po/cs.po,
+ plugins/sudoers/po/de.mo, plugins/sudoers/po/de.po,
+ plugins/sudoers/po/eo.mo, plugins/sudoers/po/eo.po,
+ plugins/sudoers/po/fr.mo, plugins/sudoers/po/fr.po,
+ plugins/sudoers/po/it.mo, plugins/sudoers/po/it.po,
+ plugins/sudoers/po/ja.mo, plugins/sudoers/po/ja.po,
+ plugins/sudoers/po/nb.mo, plugins/sudoers/po/nb.po,
+ plugins/sudoers/po/pl.mo, plugins/sudoers/po/pl.po,
+ plugins/sudoers/po/pt.mo, plugins/sudoers/po/pt.po,
+ plugins/sudoers/po/pt_BR.mo, plugins/sudoers/po/pt_BR.po,
+ plugins/sudoers/po/sv.mo, plugins/sudoers/po/sv.po,
+ plugins/sudoers/po/uk.mo, plugins/sudoers/po/uk.po,
+ plugins/sudoers/po/vi.mo, plugins/sudoers/po/zh_TW.mo,
+ plugins/sudoers/po/zh_TW.po, po/cs.mo, po/cs.po, po/da.mo, po/da.po,
+ po/de.mo, po/de.po, po/eo.mo, po/eo.po, po/fr.mo, po/fr.po,
+ po/it.mo, po/it.po, po/ja.mo, po/ja.po, po/nb.mo, po/nb.po,
+ po/pl.mo, po/pl.po, po/pt.mo, po/pt.po, po/pt_BR.mo, po/pt_BR.po,
+ po/sv.mo, po/sv.po, po/tr.mo, po/tr.po, po/uk.mo, po/uk.po,
+ po/zh_TW.mo, po/zh_TW.po:
+ Updated translations from translationproject.org
+ [a5aa41ab05cb]
+
+2019-07-19 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * configure, configure.ac, plugins/sudoers/fmtsudoers.c,
+ plugins/sudoers/parse.c:
+ Use strftime(3) instead of formatting struct tm by hand. Fixes a
+ warning on newer versions of gcc.
+ [4a2fdb51bbe5]
+
+ * doc/sudo.man.in, doc/sudo.mdoc.in:
+ Update error message when the password cannot be read from the
+ terminal.
+ [9b329f92e8a0]
+
+ * NEWS:
+ Fix for Bug #888
+ [d64fc43adfdd]
+
+ * plugins/sudoers/match_command.c, plugins/sudoers/match_digest.c:
+ If the command in sudoers does not exist on the file system, match
+ by name. We still want to match the command even if it doesn't exist
+ so that the NOPASSWD flag on sudoers entries with non-existant paths
+ works as expected. Bug #888.
+ [0879054870be]
+
+ * NEWS, doc/TROUBLESHOOTING, po/sudo.pot, src/tgetpass.c:
+ More verbose error message when a password is required and no
+ terminal is present. Bug #828.
+ [f15ffeffff32]
+
+ * plugins/sudoers/po/sudoers.pot, po/sudo.pot:
+ regen
+ [8e0fdf8e4cd5]
+
+ * doc/sudoers.man.in, doc/sudoers.mdoc.in:
+ Document that PAM session modules are now run with the silent flag.
+ [b67b769a0532]
+
+2019-07-14 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/sudoers.c:
+ Simpler change to retry sudo_secure_file() as root as needed.
+ [feb0c2309366]
+
+ * plugins/sudoers/sudoers.c:
+ If we are unable to stat() sudoers as non-root, try again as root.
+ By default, sudo relies soley on group permissions to read sudoers
+ to make it possible to store sudoers on NFS. However, if
+ /etc/sudoers is not accessible to non-root uids for some reason,
+ sudo will fail. Bug #880.
+ [6a50adb25f2e]
+
+2019-07-12 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * doc/sudoers.man.in, doc/sudoers.mdoc.in:
+ Clarify that ttyin contains raw terminal input.
+ [eea9d33f85bd]
+
+2019-07-11 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * doc/sudoers.man.in, doc/sudoers.mdoc.in:
+ Expand the description of the I/O log files.
+ [f15cefc9bbd8]
+
+ * doc/sudo.conf.mdoc.in:
+ Remove trailing whitespace.
+ [421e9f481c1d]
+
+2019-07-03 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * configure, configure.ac, doc/sudo.conf.man.in,
+ doc/sudo.conf.mdoc.in, doc/sudoers.man.in, doc/sudoers.mdoc.in,
+ plugins/group_file/Makefile.in, plugins/sample/Makefile.in,
+ plugins/sudoers/Makefile.in, plugins/system_group/Makefile.in:
+ Rename PLUGINDIR -> plugindir
+ [75cc43534ee1]
+
+ * configure, configure.ac:
+ Use $libexecdir in default settings used by the documentation. The
+ web and pdf pages will substitute /usr/local/libexec for
+ $noexec_file. Also do substitution of variables using exec_prefix
+ even if we don't use them in the Makefile since the documentation
+ may reference them.
+ [b7a37b03b6db]
+
+ * doc/Makefile.in, doc/sudo.conf.man.in, doc/sudo.conf.mdoc.in:
+ Add conditional for sesh path in sudo.conf manual.
+ [ec1f8f559bad]
+
+ * configure, configure.ac:
+ Update plugindir even when --disable-shared is specified. Otherwise,
+ the default value is substituted into the Makefiles and
+ documentation which may not match --prefix. Bug #886
+ [0f6c9a4af739]
+
+2019-06-25 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * include/sudo_util.h, lib/util/fatal.c, lib/util/inet_ntop.c,
+ lib/util/regress/vsyslog/vsyslog_test.c, lib/util/sudo_debug.c,
+ plugins/sudoers/find_path.c, plugins/sudoers/group_plugin.c,
+ plugins/sudoers/iolog.c, plugins/sudoers/ldap.c,
+ plugins/sudoers/ldap_conf.c, plugins/sudoers/logging.c,
+ plugins/sudoers/sudoers.c, plugins/sudoers/sudoreplay.c,
+ plugins/sudoers/timestamp.c, src/load_plugins.c, src/net_ifs.c,
+ src/sudo.c:
+ Add ssizeof macro that returns ssize_t. We can use this instead of
+ casting the result of size_t to int. Also change checks for
+ snprintf() returning <=0 to <0.
+ [da4a95a5d8ec]
+
+2019-06-21 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * doc/TROUBLESHOOTING, doc/sudoers.man.in, doc/sudoers.mdoc.in:
+ sudoedit should be used for editing files instead of "sudo editor"
+ That way the user's editor config files are used by the editor.
+ [24bb1e6326ee]
+
+ * doc/TROUBLESHOOTING:
+ Move the section on HOME to be after the environment section. Also
+ strongly discourage the disabling of env_reset.
+ [7a41bddf5fde]
+
+2019-06-20 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * doc/TROUBLESHOOTING:
+ Remove the Solaris last login question, add one about HOME. The PAM
+ session is opened with PAM_SILENT so last login info is not printed.
+ It is dangerous to preserve HOME from the user's environment.
+ [99be2cd98556]
+
+ * doc/sudo.conf.man.in, doc/sudo.conf.mdoc.in, doc/sudo_plugin.man.in,
+ doc/sudo_plugin.mdoc.in, doc/sudoers.man.in, doc/sudoers.mdoc.in:
+ Use the term pseudo-terminal more consistently.
+ [129a0d2e5a33]
+
+ * doc/sudoers.man.in, doc/sudoers.mdoc.in:
+ Document why HOME should not be preserved from the user's
+ environment. Text was adapted from what is already present in the
+ UPGRADE file. Also mark set_home and always_set_home as obsolete.
+ [3cddca2f78de]
+
+ * doc/sudo_plugin.man.in, doc/sudo_plugin.mdoc.in:
+ Refer to command line options, not flags.
+ [5caa383e1f9b]
+
+ * NEWS:
+ sync
+ [fd7e952e3e43]
+
+ * doc/TROUBLESHOOTING:
+ sudo will now prompt for a password as long as /dev/tty is
+ available.
+ [a4241d432e63]
+
+ * MANIFEST, configure, configure.ac, doc/Makefile.in,
+ doc/cvtsudoers.cat, doc/sudo.cat, doc/sudo.conf.cat,
+ doc/sudo_plugin.cat, doc/sudoers.cat, doc/sudoers.ldap.cat,
+ doc/sudoers_timestamp.cat, doc/sudoreplay.cat, doc/visudo.cat:
+ Remove .cat pages, there is no need for them in the modern world.
+ Sudo only shipped .cat pages for Irix, which lacked nroff. Irix is
+ long dead and there are multiple open source nroff options.
+ [b7a48dc22bdb]
+
+ * INSTALL, configure.ac, doc/sudoers.cat, doc/visudo.cat:
+ Make env_editor the default. It is already the default in the
+ package script.
+ [a4f0c46ef5d6]
+
+ * INSTALL, doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in,
+ doc/visudo.cat, doc/visudo.man.in, doc/visudo.mdoc.in:
+ Don't describe env_editor as a security hole. Users that are able to
+ edit sudoers can grant themselves permissions so the fact that
+ visudo runs the editor as root is not a security issue.
+ [627f0a96ccc9]
+
+ * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in,
+ doc/visudo.cat, doc/visudo.man.in, doc/visudo.mdoc.in:
+ Fix details of how EDITOR, VISUAL and SUDO_EDITOR are (or are not)
+ preserved. The description in the editor option was incorrect and
+ didn't mention env_keep. Reported by Sander Bos
+ [1b498d610672]
+
+ * doc/visudo.cat, doc/visudo.man.in, doc/visudo.mdoc.in:
+ Modern visudo locks the actual sudoers file, not the sudoers.tmp
+ file. Refer to sudoers.tmp as a temporary file, not a lock file.
+ Reported by Sander Bos
+ [3a449f316304]
+
+2019-06-19 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/sudoers.c:
+ In tty_present(), check for /dev/tty if sudo was unable to get the
+ tty name. For requiretty it is enough to check that /dev/tty is
+ available. If sudo can't get the tty from the kernel (missing
+ /proc?) that is OK.
+ [2102ffa0fa7e]
+
+ * src/tgetpass.c:
+ Don't refuse to use the tty unless /dev/tty is unavailable. We don't
+ care whether sudo was able to get the tty name from the kernel. All
+ that really matters is whether we are able to disable echo as
+ needed.
+ [a3376277883f]
+
+ * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in:
+ Use of "they" was ambiguous.
+ [a39f42aa21ca]
+
+ * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in:
+ Better description of secure_path. The secure_path option affects
+ the resolution of unqualified commands as well as the environment
+ that commands run with.
+ [e0534efa8271]
+
+ * doc/CONTRIBUTORS:
+ Add Sander Bos
+ [75f6f90c2f24]
+
+ * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in:
+ Fix a few typos and awkward wording. Use the singular "they" instead
+ of he/she. Add back missing text in description of variables
+ starting with (). Based on changes from Sander Bos.
+ [d6b5068ae2ca]
+
+2019-06-15 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in:
+ Clarify which environment variables are set based on the target
+ user.
+ [1e6ac7e5ef32]
+
+2019-06-10 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * lib/util/Makefile.in:
+ libsudo_util depends on LT_DEP_LIBS even when building a static lib
+ [232370d6af88]
+
+ * aclocal.m4, config.h.in, configure, configure.ac,
+ lib/util/arc4random.c:
+ Solaris getentropy() requires that sys/random.h be included.
+ [f1ec0a7290a6]
+
+2019-05-29 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/parse.c:
+ Use the runhost for "User foo is not allowed to run sudo on bar."
+ Otherwise, if the -h option is specified sudo will print the local
+ host name instead of the host specified via -h.
+ [8e6836ff952c]
+
+2019-05-28 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * doc/TROUBLESHOOTING:
+ Document that "no tty present and no askpass program specified" may
+ happen when /proc is not accessible.
+ [b551c47e55aa]
+
+2019-05-27 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * doc/CONTRIBUTORS:
+ Add Sangamesh Mallayya and Michael Spradling
+ [73b3acddc973]
+
+ * doc/sudo.cat, doc/sudo.man.in, doc/sudo.mdoc.in, src/parse_args.c,
+ src/sudo.h, src/tgetpass.c:
+ Add -B option to ring the bell before the password prompt.
+ [b2181b069809]
+
+ * plugins/sudoers/auth/aix_auth.c:
+ Allow the user to change their password if expired on AIX. Bug #883
+ [b1def2572198]
+
+2019-05-26 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/auth/aix_auth.c:
+ When using AIX auth, don't display the AIX password incorrect
+ message. Avoids a "3004-300 You entered an invalid login name or
+ password" message in addition to sudo's own "Sorry, try again"
+ message.
+ [ee606cfc3c8c]
+
+2019-05-24 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * mkpkg:
+ AIX packages were not being build with optimization enabled.
+ [41563464b897]
+
+2019-05-22 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/parse.c, plugins/sudoers/parse.h:
+ Fix a typo.
+ [6cd3fdc40b13]
+
+ * mkpkg:
+ Support using macOS SDKs from
+ /Library/Developer/CommandLineTools/SDKs
+ [98399af73e06]
+
+2019-05-16 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * lib/util/term.c:
+ It is safe to assume _POSIX_VDISABLE is defined. The old compat
+ defines were to support pre-termios systems.
+ [82153896cede]
+
+2019-05-06 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/auth/pam.c:
+ Remove second catopen() which is never called.
+ [8a3db9d71297]
+
+2019-05-01 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * doc/TROUBLESHOOTING:
+ Sudo's conversation functions now filters out the last login
+ information.
+ [ac21b18ba6bf]
+
+2019-04-29 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in,
+ plugins/sudoers/auth/pam.c, plugins/sudoers/def_data.c,
+ plugins/sudoers/def_data.h, plugins/sudoers/def_data.in,
+ plugins/sudoers/defaults.c:
+ Add pam_acct_mgmt setting to enable/disable PAM account validation.
+ [ec657af6eeb8]
+
+ * doc/cvtsudoers.cat, doc/sudo.cat, doc/sudo.conf.cat,
+ doc/sudo_plugin.cat, doc/sudoers.cat, doc/sudoers.ldap.cat,
+ doc/sudoers_timestamp.cat, doc/sudoreplay.cat, doc/visudo.cat:
+ regen
+ [d39b0636806f]
+
+ * NEWS, configure, configure.ac:
+ Sudo 1.8.28
+ [dd02af1b71e1]
+
+ * Makefile.in, configure.ac, doc/Makefile.in, doc/cvtsudoers.man.in,
+ doc/cvtsudoers.mdoc.in, doc/fixman.sh, doc/sudo.conf.man.in,
+ doc/sudo.conf.mdoc.in, doc/sudo.man.in, doc/sudo.mdoc.in,
+ doc/sudo_plugin.man.in, doc/sudo_plugin.mdoc.in,
+ doc/sudoers.ldap.man.in, doc/sudoers.ldap.mdoc.in,
+ doc/sudoers.man.in, doc/sudoers.mdoc.in,
+ doc/sudoers_timestamp.man.in, doc/sudoers_timestamp.mdoc.in,
+ doc/sudoreplay.man.in, doc/sudoreplay.mdoc.in, doc/visudo.man.in,
+ doc/visudo.mdoc.in, examples/Makefile.in, include/Makefile.in,
+ include/compat/charclass.h, include/compat/endian.h,
+ include/compat/fnmatch.h, include/compat/getopt.h,
+ include/compat/glob.h, include/compat/nss_dbdefs.h,
+ include/compat/sha2.h, include/sudo_compat.h, include/sudo_conf.h,
+ include/sudo_debug.h, include/sudo_digest.h, include/sudo_dso.h,
+ include/sudo_event.h, include/sudo_fatal.h, include/sudo_gettext.h,
+ include/sudo_lbuf.h, include/sudo_plugin.h, include/sudo_queue.h,
+ include/sudo_rand.h, include/sudo_util.h, lib/util/Makefile.in,
+ lib/util/aix.c, lib/util/arc4random.c, lib/util/arc4random.h,
+ lib/util/arc4random_uniform.c, lib/util/closefrom.c,
+ lib/util/digest.c, lib/util/digest_gcrypt.c,
+ lib/util/digest_openssl.c, lib/util/event.c, lib/util/event_poll.c,
+ lib/util/event_select.c, lib/util/fatal.c, lib/util/fnmatch.c,
+ lib/util/getcwd.c, lib/util/getdelim.c, lib/util/getentropy.c,
+ lib/util/getgrouplist.c, lib/util/gethostname.c,
+ lib/util/getopt_long.c, lib/util/gettime.c, lib/util/gidlist.c,
+ lib/util/glob.c, lib/util/inet_ntop.c, lib/util/inet_pton.c,
+ lib/util/isblank.c, lib/util/key_val.c, lib/util/lbuf.c,
+ lib/util/locking.c, lib/util/memrchr.c, lib/util/memset_s.c,
+ lib/util/mksiglist.c, lib/util/mksigname.c, lib/util/mktemp.c,
+ lib/util/nanosleep.c, lib/util/parseln.c, lib/util/pipe2.c,
+ lib/util/progname.c, lib/util/pw_dup.c, lib/util/reallocarray.c,
+ lib/util/regress/atofoo/atofoo_test.c,
+ lib/util/regress/getdelim/getdelim_test.c,
+ lib/util/regress/getgrouplist/getgrouplist_test.c,
+ lib/util/regress/parse_gids/parse_gids_test.c,
+ lib/util/regress/progname/progname_test.c,
+ lib/util/regress/strsplit/strsplit_test.c,
+ lib/util/regress/sudo_conf/conf_test.c,
+ lib/util/regress/sudo_parseln/parseln_test.c,
+ lib/util/regress/tailq/hltq_test.c,
+ lib/util/regress/vsyslog/vsyslog_test.c, lib/util/secure_path.c,
+ lib/util/setgroups.c, lib/util/sha2.c, lib/util/sig2str.c,
+ lib/util/snprintf.c, lib/util/strlcat.c, lib/util/strlcpy.c,
+ lib/util/strndup.c, lib/util/strnlen.c, lib/util/strsignal.c,
+ lib/util/strsplit.c, lib/util/strtobool.c, lib/util/strtoid.c,
+ lib/util/strtomode.c, lib/util/strtonum.c, lib/util/sudo_conf.c,
+ lib/util/sudo_debug.c, lib/util/sudo_dso.c, lib/util/term.c,
+ lib/util/ttyname_dev.c, lib/util/ttysize.c, lib/util/utimens.c,
+ lib/util/vsyslog.c, lib/zlib/Makefile.in, log2cl.pl, m4/sudo.m4,
+ mkdep.pl, mkpkg, pathnames.h.in, plugins/group_file/Makefile.in,
+ plugins/group_file/getgrent.c, plugins/group_file/group_file.c,
+ plugins/group_file/plugin_test.c, plugins/sample/Makefile.in,
+ plugins/sample/sample_plugin.c, plugins/sudoers/Makefile.in,
+ plugins/sudoers/alias.c, plugins/sudoers/audit.c,
+ plugins/sudoers/auth/afs.c, plugins/sudoers/auth/aix_auth.c,
+ plugins/sudoers/auth/bsdauth.c, plugins/sudoers/auth/dce.c,
+ plugins/sudoers/auth/fwtk.c, plugins/sudoers/auth/kerb5.c,
+ plugins/sudoers/auth/pam.c, plugins/sudoers/auth/passwd.c,
+ plugins/sudoers/auth/rfc1938.c, plugins/sudoers/auth/secureware.c,
+ plugins/sudoers/auth/securid5.c, plugins/sudoers/auth/sia.c,
+ plugins/sudoers/auth/sudo_auth.c, plugins/sudoers/auth/sudo_auth.h,
+ plugins/sudoers/base64.c, plugins/sudoers/boottime.c,
+ plugins/sudoers/bsm_audit.c, plugins/sudoers/bsm_audit.h,
+ plugins/sudoers/check.c, plugins/sudoers/check.h,
+ plugins/sudoers/cvtsudoers.c, plugins/sudoers/cvtsudoers.h,
+ plugins/sudoers/cvtsudoers_json.c,
+ plugins/sudoers/cvtsudoers_ldif.c,
+ plugins/sudoers/cvtsudoers_pwutil.c, plugins/sudoers/defaults.c,
+ plugins/sudoers/defaults.h, plugins/sudoers/digestname.c,
+ plugins/sudoers/editor.c, plugins/sudoers/env.c,
+ plugins/sudoers/env_pattern.c, plugins/sudoers/file.c,
+ plugins/sudoers/filedigest.c, plugins/sudoers/find_path.c,
+ plugins/sudoers/fmtsudoers.c, plugins/sudoers/gc.c,
+ plugins/sudoers/gentime.c, plugins/sudoers/getspwuid.c,
+ plugins/sudoers/gmtoff.c, plugins/sudoers/goodpath.c,
+ plugins/sudoers/gram.c, plugins/sudoers/gram.y,
+ plugins/sudoers/group_plugin.c, plugins/sudoers/hexchar.c,
+ plugins/sudoers/ins_2001.h, plugins/sudoers/ins_classic.h,
+ plugins/sudoers/ins_csops.h, plugins/sudoers/ins_goons.h,
+ plugins/sudoers/ins_python.h, plugins/sudoers/insults.h,
+ plugins/sudoers/interfaces.c, plugins/sudoers/interfaces.h,
+ plugins/sudoers/iolog.c, plugins/sudoers/iolog.h,
+ plugins/sudoers/iolog_event.h, plugins/sudoers/iolog_files.h,
+ plugins/sudoers/iolog_path.c, plugins/sudoers/iolog_util.c,
+ plugins/sudoers/ldap.c, plugins/sudoers/ldap_conf.c,
+ plugins/sudoers/ldap_util.c, plugins/sudoers/linux_audit.c,
+ plugins/sudoers/linux_audit.h, plugins/sudoers/locale.c,
+ plugins/sudoers/logging.c, plugins/sudoers/logging.h,
+ plugins/sudoers/logwrap.c, plugins/sudoers/match.c,
+ plugins/sudoers/match_addr.c, plugins/sudoers/match_command.c,
+ plugins/sudoers/match_digest.c, plugins/sudoers/mkdir_parents.c,
+ plugins/sudoers/parse.c, plugins/sudoers/parse.h,
+ plugins/sudoers/parse_ldif.c, plugins/sudoers/policy.c,
+ plugins/sudoers/prompt.c, plugins/sudoers/pwutil.c,
+ plugins/sudoers/pwutil.h, plugins/sudoers/pwutil_impl.c,
+ plugins/sudoers/rcstr.c, plugins/sudoers/redblack.c,
+ plugins/sudoers/redblack.h,
+ plugins/sudoers/regress/check_symbols/check_symbols.c,
+ plugins/sudoers/regress/env_match/check_env_pattern.c,
+ plugins/sudoers/regress/iolog_path/check_iolog_path.c,
+ plugins/sudoers/regress/iolog_plugin/check_iolog_plugin.c,
+ plugins/sudoers/regress/iolog_util/check_iolog_util.c,
+ plugins/sudoers/regress/logging/check_wrap.c,
+ plugins/sudoers/regress/parser/check_addr.c,
+ plugins/sudoers/regress/parser/check_base64.c,
+ plugins/sudoers/regress/parser/check_digest.c,
+ plugins/sudoers/regress/parser/check_fill.c,
+ plugins/sudoers/regress/parser/check_gentime.c,
+ plugins/sudoers/regress/parser/check_hexchar.c,
+ plugins/sudoers/regress/starttime/check_starttime.c,
+ plugins/sudoers/set_perms.c, plugins/sudoers/solaris_audit.c,
+ plugins/sudoers/solaris_audit.h, plugins/sudoers/sssd.c,
+ plugins/sudoers/starttime.c, plugins/sudoers/strlist.c,
+ plugins/sudoers/strlist.h, plugins/sudoers/stubs.c,
+ plugins/sudoers/sudo_ldap.h, plugins/sudoers/sudo_ldap_conf.h,
+ plugins/sudoers/sudo_nss.c, plugins/sudoers/sudo_nss.h,
+ plugins/sudoers/sudo_printf.c, plugins/sudoers/sudoers.c,
+ plugins/sudoers/sudoers.h, plugins/sudoers/sudoers_debug.c,
+ plugins/sudoers/sudoers_debug.h, plugins/sudoers/sudoers_version.h,
+ plugins/sudoers/sudoreplay.c, plugins/sudoers/testsudoers.c,
+ plugins/sudoers/timeout.c, plugins/sudoers/timestamp.c,
+ plugins/sudoers/timestr.c, plugins/sudoers/toke.c,
+ plugins/sudoers/toke.h, plugins/sudoers/toke.l,
+ plugins/sudoers/toke_util.c, plugins/sudoers/tsdump.c,
+ plugins/sudoers/tsgetgrpw.c, plugins/sudoers/tsgetgrpw.h,
+ plugins/sudoers/visudo.c, plugins/system_group/Makefile.in,
+ plugins/system_group/system_group.c, src/Makefile.in,
+ src/conversation.c, src/env_hooks.c, src/exec.c, src/exec_common.c,
+ src/exec_monitor.c, src/exec_nopty.c, src/exec_pty.c, src/get_pty.c,
+ src/hooks.c, src/load_plugins.c, src/net_ifs.c, src/openbsd.c,
+ src/parse_args.c, src/preload.c, src/preserve_fds.c,
+ src/regress/noexec/check_noexec.c,
+ src/regress/ttyname/check_ttyname.c, src/selinux.c, src/sesh.c,
+ src/signal.c, src/solaris.c, src/sudo.c, src/sudo.h,
+ src/sudo_edit.c, src/sudo_exec.h, src/sudo_noexec.c,
+ src/sudo_plugin_int.h, src/sudo_usage.h.in, src/tcsetpgrp_nobg.c,
+ src/tgetpass.c, src/ttyname.c, src/utmp.c:
+ Add SPDX-License-Identifier to files.
+ [db66decfad24]
+
+2019-04-28 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/auth/pam.c:
+ Filter out last login messages on HP-UX unless running a shell. HP-
+ UX in trusted mode will display last login messages as part of the
+ PAM account management module by libpam_comsec. There is no way to
+ suppress these messages from the PAM configuration in trusted mode
+ so we need to filter them in the conversation function. In regular
+ mode, similar (but different) messages may be produced by
+ libpam_hpsec.
+ [5bbb02c69b46]
+
+2019-04-26 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * lib/util/closefrom.c:
+ FreeBSD's /dev/fd only contains fds 0-2 unless fdescfs is mounted.
+ In practice this doesn't matter since FreeBSD >= 8 has a native
+ closefrom
+ [bbeeb52550f1]
+
+2019-04-20 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/logging.c:
+ Keep debug fds open in send_mail() to aid in debugging. Adds
+ closefrom_nodebug() which acts like closefrom(3) but doesn't close
+ debug fds for use by send_mail(). Also moves the code to exec the
+ mailer to its own function.
+ [b1892425667a]
+
+2019-04-19 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/defaults.c:
+ Set def_mailerflags even if sendmail was not found at configure
+ time. Fixes a NULL dereference when mailerpath is set but
+ mailerflags is not. Bug #878
+ [6c57f5ddca54]
+
+2019-04-08 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * MANIFEST, config.h.in, configure, configure.ac,
+ include/sudo_compat.h, lib/util/Makefile.in, lib/util/getdelim.c,
+ lib/util/getline.c, lib/util/parseln.c,
+ lib/util/regress/getdelim/getdelim_test.c, mkdep.pl,
+ plugins/sudoers/auth/aix_auth.c, plugins/sudoers/boottime.c,
+ plugins/sudoers/iolog_util.c, plugins/sudoers/ldap_conf.c,
+ plugins/sudoers/parse_ldif.c, plugins/sudoers/sssd.c:
+ Add a proper getdelim(3) replacement and use it instead of
+ getline(3).
+ [2e06e45ffbd6]
+
+ * plugins/sudoers/auth/pam.c:
+ Restrict the PAM_TTY kludge to Solaris and Linux-PAM. Setting
+ PAM_TTY to the empty string causes problems with some modules on HP-
+ UX so restrict it to systems where it is fixes known issues.
+ [d61f4e20dc67]
+
+2019-03-18 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * lib/util/getgrouplist.c:
+ Fix the counting of supplementary groups on AIX. We should not
+ assume that basegid will be present in the list of gids returned by
+ getgrset().
+ [6b5fa2805840]
+
+2019-03-14 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/pwutil.c:
+ Plug a memory leak on user/group lookup failure found by ASAN.
+ [aff673f310d0]
+
+2019-03-08 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * MANIFEST, plugins/sudoers/regress/testsudoers/test3.d/root,
+ plugins/sudoers/regress/testsudoers/test3.sh:
+ Fix test failure when run by a user other than the file owner.
+ [c41ea7cfedf8]
+
+ * MANIFEST, plugins/sudoers/po/eo.mo, plugins/sudoers/po/eo.po,
+ plugins/sudoers/po/ko.mo, plugins/sudoers/po/ko.po,
+ plugins/sudoers/po/zh_TW.mo, plugins/sudoers/po/zh_TW.po, po/da.mo,
+ po/da.po, po/eo.mo, po/eo.po, po/es.mo, po/es.po, po/zh_TW.mo,
+ po/zh_TW.po:
+ Updated translations from translationproject.org
+ [484d7b28bdd6]
+
+ * MANIFEST, plugins/sudoers/regress/cvtsudoers/test1.sh,
+ plugins/sudoers/regress/cvtsudoers/test10.sh,
+ plugins/sudoers/regress/cvtsudoers/test11.sh,
+ plugins/sudoers/regress/cvtsudoers/test12.sh,
+ plugins/sudoers/regress/cvtsudoers/test13.sh,
+ plugins/sudoers/regress/cvtsudoers/test14.sh,
+ plugins/sudoers/regress/cvtsudoers/test15.sh,
+ plugins/sudoers/regress/cvtsudoers/test16.sh,
+ plugins/sudoers/regress/cvtsudoers/test17.sh,
+ plugins/sudoers/regress/cvtsudoers/test18.sh,
+ plugins/sudoers/regress/cvtsudoers/test19.sh,
+ plugins/sudoers/regress/cvtsudoers/test2.sh,
+ plugins/sudoers/regress/cvtsudoers/test20.sh,
+ plugins/sudoers/regress/cvtsudoers/test21.sh,
+ plugins/sudoers/regress/cvtsudoers/test22.sh,
+ plugins/sudoers/regress/cvtsudoers/test23.sh,
+ plugins/sudoers/regress/cvtsudoers/test24.sh,
+ plugins/sudoers/regress/cvtsudoers/test25.sh,
+ plugins/sudoers/regress/cvtsudoers/test26.err.ok,
+ plugins/sudoers/regress/cvtsudoers/test26.out.ok,
+ plugins/sudoers/regress/cvtsudoers/test26.sh,
+ plugins/sudoers/regress/cvtsudoers/test27.sh,
+ plugins/sudoers/regress/cvtsudoers/test28.sh,
+ plugins/sudoers/regress/cvtsudoers/test29.sh,
+ plugins/sudoers/regress/cvtsudoers/test3.sh,
+ plugins/sudoers/regress/cvtsudoers/test30.sh,
+ plugins/sudoers/regress/cvtsudoers/test31.sh,
+ plugins/sudoers/regress/cvtsudoers/test32.err.ok,
+ plugins/sudoers/regress/cvtsudoers/test32.out.ok,
+ plugins/sudoers/regress/cvtsudoers/test32.sh,
+ plugins/sudoers/regress/cvtsudoers/test33.sh,
+ plugins/sudoers/regress/cvtsudoers/test4.sh,
+ plugins/sudoers/regress/cvtsudoers/test5.sh,
+ plugins/sudoers/regress/cvtsudoers/test6.sh,
+ plugins/sudoers/regress/cvtsudoers/test7.sh,
+ plugins/sudoers/regress/cvtsudoers/test8.sh,
+ plugins/sudoers/regress/cvtsudoers/test9.sh:
+ Test cvtsudoers stdout and stderr separately. Fixes a test failure
+ on systems with musl libc. Bug #873
+ [e82a381f4f3d]
+
+2019-03-06 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/starttime.c, src/ttyname.c:
+ Better comment about EOVERFLOW and pstat_getproc(). Also remove some
+ useless casts.
+ [09a915110812]
+
+ * lib/util/closefrom.c:
+ Ignore EOVERFLOW from pstat_getproc(), it is not a fatal error. It
+ just means that one of the fields in pstat lacks the precision to
+ store a value. That's not an issue for pst_highestfd.
+ [bb7ed18e360b]
+
+ * sudo.pp:
+ update copyright year
+ [cff8184aeb11]
+
+2019-03-05 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * src/load_plugins.c:
+ Fix error message when a fully-qualified plugin path does not exist.
+ [318f7511c9bc]
+
+2019-03-04 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in:
+ Fix unescaped '\' and remove an extra '[' in the definition of
+ digest.
+ [9ea1a400ebc9]
+
+2019-03-03 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/toke.c, plugins/sudoers/toke.l:
+ Ignore carriage return before a linefeed. This allows sudo to parse
+ files with DOS-style line endings.
+ [65882b63a84d]
+
+2019-02-26 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in,
+ doc/sudoers.ldap.mdoc.in:
+ For sssd, the nsswitch.conf setting should be "sss" not "sssd". From
+ Johnathan Smith.
+ [5c07130d1bbc]
+
+2019-02-20 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/env.c, plugins/sudoers/sudoers.h:
+ Add simple API for to allow reading environment data from different
+ sources. Currently, this is used to read a file like
+ /etc/environment.
+ [ce9161899719]
+
+2019-02-19 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/sudoers.c:
+ Fix pasto; the unrestricted env file was read when we want the
+ restricted one.
+ [23b0b3c473db]
+
+ * plugins/sudoers/cvtsudoers.c, plugins/sudoers/defaults.h,
+ plugins/sudoers/parse.h, plugins/sudoers/strlist.c, src/sudo.h:
+ Be sure to include sudo_queue.h where needed instead of relying on
+ other headers.
+ [fe9418a9b378]
+
+2019-02-18 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * lib/util/util.exp.in:
+ Only export sudo_arc4random_uniform() if arc4random_uniform() is
+ missing.
+ [e32a7243976d]
+
+ * lib/util/regress/vsyslog/vsyslog_test.c:
+ Quiet a warning on gcc 8
+ [fe8cad6564e2]
+
+ * include/sudo_compat.h:
+ AIX 7.1 defines O_CLOEXEC but it can't be used outside the kernel.
+ Redefine O_CLOEXEC if it doesn't fit in an int and pipe2() is
+ missing.
+ [3ef0220351ca]
+
+ * MANIFEST, plugins/sudoers/Makefile.in, plugins/sudoers/match.c,
+ plugins/sudoers/match_command.c, plugins/sudoers/match_digest.c,
+ plugins/sudoers/parse.h:
+ Split command match code out into match_command.c. Also remove
+ unused SUDOERS_NAME_MATCH code.
+ [2a7adb93a65e]
+
+2019-02-17 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/match_digest.c:
+ Split out digest matching into its own file.
+ [93863918f934]
+
+ * plugins/sudoers/Makefile.in, plugins/sudoers/match.c,
+ plugins/sudoers/parse.h:
+ Split out digest matching into its own file.
+ [aafdc9b976ed]
+
+2019-02-12 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/gram.c, plugins/sudoers/gram.h,
+ plugins/sudoers/gram.y, plugins/sudoers/toke.c,
+ plugins/sudoers/toke.l:
+ Rename FOLLOW and NOFOLLOW tokens FOLLOWLNK and NOFOLLOWLNK. Fixes a
+ namespace collision on Solaris when bison is used.
+ [707b94b7c1e9]
+
+2019-02-06 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/match.c:
+ Add stub definition of digest_matches() for SUDOERS_NAME_MATCH
+ [a322e57c85e0]
+
+ * plugins/sudoers/sudo_nss.c:
+ No longer need to include sudo_lbuf.h
+ [db110422b24c]
+
+ * mkpkg:
+ On RedHat/CentOS get the OS major version from /etc/redhat-release.
+ We cannot determine this from the output of "pp --probe" since it
+ doesn't contain a period to separate the major and minor numbers.
+ [78a27d62de0c]
+
+2019-02-05 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/policy.c:
+ Use SET macro instead of bitwise OR.
+ [b523937e8da8]
+
+ * plugins/sudoers/pwutil_impl.c:
+ In sudo_make_grlist_item() the calculation of total did not include
+ space for pointers to the group names.
+ [7c438dd62f45]
+
+ * plugins/sudoers/cvtsudoers_pwutil.c:
+ Use correct debug_decl() names.
+ [d0f02db8be20]
+
+ * plugins/sudoers/sudoers.h:
+ Add fallback values for sudoers uid, gid and mode if not set in
+ Makefile.
+ [21e41ed7a06c]
+
+2019-02-04 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * lib/util/memset_s.c:
+ include stddef.h to make sure we get NULL
+ [d42b4c325c0c]
+
+2019-02-02 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * src/net_ifs.c:
+ Fix memory leak when there are no network interfaces or an error
+ occurs.
+ [7ba525ee9233]
+
+2019-01-25 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * configure, configure.ac:
+ Use $ac_cv_search_FUNCTION instead of $ac_lib and $ac_res. Fixes a
+ problem where libcrypt is not used with autoconf caching. Adapted
+ from a diff from Adam Labbe.
+ [5cfcade6ce3e]
+
+2019-01-24 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * po/de.mo, po/de.po, po/ko.mo, po/ko.po:
+ Updated translations from translationproject.org
+ [4995f6542a2c]
+
+2019-01-22 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * plugins/sudoers/parse.c:
+ Fix listpw=never and verifypw=never. Bug #869
+ [ecb89088a884]
+
+2019-01-20 Todd C. Miller <Todd.Miller@sudo.ws>
+
+ * lib/util/regress/vsyslog/vsyslog_test.c, lib/util/sig2str.c,
+ plugins/sudoers/alias.c, plugins/sudoers/cvtsudoers_pwutil.c,
+ plugins/sudoers/env.c, plugins/sudoers/find_path.c,
+ plugins/sudoers/fmtsudoers.c, plugins/sudoers/group_plugin.c,
+ plugins/sudoers/iolog.c, plugins/sudoers/ldap.c,
+ plugins/sudoers/ldap_conf.c, plugins/sudoers/ldap_util.c,
+ plugins/sudoers/logging.c, plugins/sudoers/match.c,
+ plugins/sudoers/parse.c, plugins/sudoers/set_perms.c,
+ plugins/sudoers/starttime.c, plugins/sudoers/sudoers.c,
+ plugins/sudoers/sudoreplay.c, plugins/sudoers/timestamp.c,
+ plugins/sudoers/tsdump.c, src/exec_monitor.c, src/exec_nopty.c,
+ src/exec_pty.c, src/sudo.c, src/ttyname.c:
+ Minor snprintf() usage tweaks: 1) don't assume snprintf() returns -1
+ on error, check for <0 2) when comparing return value of
+ sizeof(foo), cast the sizeof, not the len 3) cast return value to
+ void in cases where snprintf cannot fail
+ [2af6dfb31a49]
+
2019-01-07 Todd C. Miller <Todd.Miller@sudo.ws>
* NEWS:
diff --git a/INSTALL b/INSTALL
index b8f9be6..c282a72 100644
--- a/INSTALL
+++ b/INSTALL
@@ -28,7 +28,7 @@ Simple sudo installation
For most systems and configurations it is possible simply to:
0) If you are upgrading from a previous version of sudo
- please read the info in the UPGRADE file before proceeding.
+ please read the info in the doc/UPGRADE file before proceeding.
1) Read the `OS dependent notes' section for any particular
"gotchas" relating to your operating system.
@@ -561,10 +561,11 @@ Development options:
become corrupted.
--enable-warnings
- Enable compiler warnings when building sudo with gcc.
+ Enable compiler warnings when building sudo with gcc or clang.
--enable-werror
- Enable the -Werror compiler option when building sudo with gcc.
+ Enable the -Werror compiler option when building sudo with
+ gcc or clang.
--with-devel
Configure development options. This will enable compiler warnings
@@ -670,19 +671,20 @@ Options that set runtime-changeable default values:
--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 VISUAL
- or EDITOR environment variables or the first editor in the list that
- exists. The default is the path to vi on your system.
+ 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
- Makes visudo consult the VISUAL and EDITOR environment variables before
- falling back on the default editor list (as specified by --with-editor).
- Note that this may create a security hole as it allows the user to
- run any arbitrary command as root without logging. A safer alternative
- is to use a colon-separated list of editors with the --with-editor
- option. visudo will then only use the VISUAL or EDITOR variables
- if they match a value specified via --with-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
@@ -905,18 +907,13 @@ HP-UX:
sudo session required libpam_hpsec.so.1 bypass_umask
- If every command run via sudo displays information about the last
- successful login and the last authentication failure you should
- make use an /etc/pam.conf line like:
-
- sudo session required libpam_hpsec.so.1 bypass_umask bypass_last_login
-
Linux:
PAM and LDAP headers are not installed by default on most Linux
- systems. You will need to install the "pam-dev" 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 package.
+ 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.
Mac OS X:
The pseudo-tty support in the Mac OS X kernel has bugs related
diff --git a/MANIFEST b/MANIFEST
index 08d7f25..e9b8ff2 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -20,7 +20,6 @@ doc/LICENSE
doc/Makefile.in
doc/TROUBLESHOOTING
doc/UPGRADE
-doc/cvtsudoers.cat
doc/cvtsudoers.man.in
doc/cvtsudoers.mdoc.in
doc/fixman.sh
@@ -29,30 +28,23 @@ doc/schema.ActiveDirectory
doc/schema.OpenLDAP
doc/schema.iPlanet
doc/schema.olcSudo
-doc/sudo.cat
-doc/sudo.conf.cat
doc/sudo.conf.man.in
+doc/sudo.conf.man.in.sed
doc/sudo.conf.mdoc.in
doc/sudo.man.in
doc/sudo.man.in.sed
doc/sudo.mdoc.in
-doc/sudo_plugin.cat
doc/sudo_plugin.man.in
doc/sudo_plugin.mdoc.in
-doc/sudoers.cat
-doc/sudoers.ldap.cat
doc/sudoers.ldap.man.in
doc/sudoers.ldap.mdoc.in
doc/sudoers.man.in
doc/sudoers.man.in.sed
doc/sudoers.mdoc.in
-doc/sudoers_timestamp.cat
doc/sudoers_timestamp.man.in
doc/sudoers_timestamp.mdoc.in
-doc/sudoreplay.cat
doc/sudoreplay.man.in
doc/sudoreplay.mdoc.in
-doc/visudo.cat
doc/visudo.man.in
doc/visudo.mdoc.in
examples/Makefile.in
@@ -105,10 +97,10 @@ lib/util/fatal.c
lib/util/fnmatch.c
lib/util/getaddrinfo.c
lib/util/getcwd.c
+lib/util/getdelim.c
lib/util/getentropy.c
lib/util/getgrouplist.c
lib/util/gethostname.c
-lib/util/getline.c
lib/util/getopt_long.c
lib/util/gettime.c
lib/util/gidlist.c
@@ -135,6 +127,7 @@ lib/util/reallocarray.c
lib/util/regress/atofoo/atofoo_test.c
lib/util/regress/fnmatch/fnm_test.c
lib/util/regress/fnmatch/fnm_test.in
+lib/util/regress/getdelim/getdelim_test.c
lib/util/regress/getgrouplist/getgrouplist_test.c
lib/util/regress/glob/files
lib/util/regress/glob/globtest.c
@@ -142,6 +135,7 @@ lib/util/regress/glob/globtest.in
lib/util/regress/mktemp/mktemp_test.c
lib/util/regress/parse_gids/parse_gids_test.c
lib/util/regress/progname/progname_test.c
+lib/util/regress/strsig/strsig_test.c
lib/util/regress/strsplit/strsplit_test.c
lib/util/regress/sudo_conf/conf_test.c
lib/util/regress/sudo_conf/test1.in
@@ -181,6 +175,7 @@ lib/util/sha2.c
lib/util/sig2str.c
lib/util/siglist.in
lib/util/snprintf.c
+lib/util/str2sig.c
lib/util/strlcat.c
lib/util/strlcpy.c
lib/util/strndup.c
@@ -332,12 +327,16 @@ plugins/sudoers/logging.h
plugins/sudoers/logwrap.c
plugins/sudoers/match.c
plugins/sudoers/match_addr.c
+plugins/sudoers/match_command.c
+plugins/sudoers/match_digest.c
plugins/sudoers/mkdefaults
plugins/sudoers/mkdir_parents.c
plugins/sudoers/parse.c
plugins/sudoers/parse.h
plugins/sudoers/parse_ldif.c
plugins/sudoers/po/README
+plugins/sudoers/po/ast.mo
+plugins/sudoers/po/ast.po
plugins/sudoers/po/ca.mo
plugins/sudoers/po/ca.po
plugins/sudoers/po/cs.mo
@@ -399,6 +398,8 @@ plugins/sudoers/po/vi.mo
plugins/sudoers/po/vi.po
plugins/sudoers/po/zh_CN.mo
plugins/sudoers/po/zh_CN.po
+plugins/sudoers/po/zh_TW.mo
+plugins/sudoers/po/zh_TW.po
plugins/sudoers/policy.c
plugins/sudoers/prompt.c
plugins/sudoers/pwutil.c
@@ -448,6 +449,7 @@ plugins/sudoers/regress/cvtsudoers/test24.out.ok
plugins/sudoers/regress/cvtsudoers/test24.sh
plugins/sudoers/regress/cvtsudoers/test25.out.ok
plugins/sudoers/regress/cvtsudoers/test25.sh
+plugins/sudoers/regress/cvtsudoers/test26.err.ok
plugins/sudoers/regress/cvtsudoers/test26.out.ok
plugins/sudoers/regress/cvtsudoers/test26.sh
plugins/sudoers/regress/cvtsudoers/test27.out.ok
@@ -463,6 +465,7 @@ plugins/sudoers/regress/cvtsudoers/test30.sh
plugins/sudoers/regress/cvtsudoers/test31.conf
plugins/sudoers/regress/cvtsudoers/test31.out.ok
plugins/sudoers/regress/cvtsudoers/test31.sh
+plugins/sudoers/regress/cvtsudoers/test32.err.ok
plugins/sudoers/regress/cvtsudoers/test32.out.ok
plugins/sudoers/regress/cvtsudoers/test32.sh
plugins/sudoers/regress/cvtsudoers/test33.out.ok
@@ -626,7 +629,6 @@ plugins/sudoers/regress/testsudoers/test1.sh
plugins/sudoers/regress/testsudoers/test2.inc
plugins/sudoers/regress/testsudoers/test2.out.ok
plugins/sudoers/regress/testsudoers/test2.sh
-plugins/sudoers/regress/testsudoers/test3.d/root
plugins/sudoers/regress/testsudoers/test3.out.ok
plugins/sudoers/regress/testsudoers/test3.sh
plugins/sudoers/regress/testsudoers/test4.out.ok
diff --git a/Makefile.in b/Makefile.in
index 4e11e58..b6babf7 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,4 +1,6 @@
#
+# SPDX-License-Identifier: ISC
+#
# Copyright (c) 2010-2015, 2017-2018 Todd C. Miller <Todd.Miller@sudo.ws>
#
# Permission to use, copy, modify, and distribute this software for any
@@ -89,7 +91,7 @@ CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=c
SPLINT_OPTS = -D__restrict= -checks
# Default PVS-studio options when run from the top-level Makefile
-PVS_CFG = $(top_srcdir)/PVS-Studio.cfg
+PVS_CFG = $(top_builddir)/PVS-Studio.cfg
PVS_IGNORE = 'V707,V011,V002,V536'
PVS_LOG_OPTS = -a 'GA:1,2' -e -t errorfile -d $(PVS_IGNORE)
diff --git a/NEWS b/NEWS
index 0c458b7..9694e9b 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,91 @@
+What's new in Sudo 1.8.28p1
+
+ * The fix for Bug #869 caused "sudo -v" to prompt for a password
+ when "verifypw" is set to "all" (the default) and all of the
+ user's sudoers entries are marked with NOPASSWD. Bug #901.
+
+What's new in Sudo 1.8.28
+
+ * Sudo will now only set PAM_TTY to the empty string when no
+ terminal is present on Solaris and Linux. This workaround is
+ only needed on those systems which may have PAM modules that
+ misbehave when PAM_TTY is not set.
+
+ * The mailerflags sudoers option now has a default value even if
+ sendmail support was disabled at configure time. Fixes a crash
+ when the mailerpath sudoers option is set but mailerflags is not.
+ Bug #878.
+
+ * Sudo will now filter out last login messages on HP-UX unless it
+ a shell is being run via "sudo -s" or "sudo -i". Otherwise,
+ when trusted mode is enabled, these messages will be displayed
+ for each command.
+
+ * On AIX, when the user's password has expired and PAM is not in use,
+ sudo will now allow the user to change their password.
+ Bug #883.
+
+ * Sudo has a new -B command line option that will ring the terminal
+ bell when prompting for a password.
+
+ * Sudo no longer refuses to prompt for a password when it cannot
+ determine the user's terminal as long as it can open /dev/tty.
+ This allows sudo to function on systems where /proc is unavailable,
+ such as when running in a chroot environment.
+
+ * The "env_editor" sudoers flag is now on by default. This makes
+ source builds more consistent with the packages generated by
+ sudo's mkpkg script.
+
+ * Sudo no longer ships with pre-formatted copies of the manual pages.
+ These were included for systems like IRIX that don't ship with an
+ nroff utility. There are now multiple Open Source nroff replacements
+ so this should no longer be an issue.
+
+ * Fixed a bad interaction with configure's --prefix and
+ --disable-shared options. Bug #886.
+
+ * More verbose error message when a password is required and no terminal
+ is present. Bug #828.
+
+ * Command tags, such as NOPASSWD, are honored when a user tries to run a
+ command that is allowed by sudoers but which does not actually
+ exist on the file system. Bug #888.
+
+ * Asturian translation for sudoers from translationproject.org.
+
+ * I/O log timing files now store signal suspend and resume information
+ in the form of a signal name instead of a number.
+
+ * Fixed a bug introduced in 1.8.24 that prevented sudo from honoring
+ the value of "ipa_hostname" from sssd.conf, if specified, when
+ matching the host name.
+
+ * Fixed a bug introduced in 1.8.21 that prevented the core dump
+ resource limit set in the pam_limits module from taking effect.
+ Bug #894.
+
+ * Fixed parsing of double-quoted Defaults group and netgroup bindings.
+
+ * The user ID is now used when matching sudoUser attributes in LDAP.
+ Previously, the user name, group name and group IDs were used
+ when matching but not the user ID.
+
+ * Sudo now writes PAM messages to the user's terminal, if available,
+ instead of the standard output or standard error. This prevents
+ PAM output from being intermixed with that of the command when
+ output is sent to a file or pipe. Bug #895.
+
+ * Sudoedit now honors the umask and umask_override settings in sudoers.
+ Previously, the user's umask was used as-is.
+
+ * Fixed a bug where the terminal's file context was not restored
+ when using SELinux RBAC. Bug #898.
+
+ * Fixed CVE-2019-14287, a bug where a sudo user may be able to
+ run a command as root when the Runas specification explicitly
+ disallows root access as long as the ALL keyword is listed first.
+
What's new in Sudo 1.8.27
* On HP-UX, sudo will now update the utmps file when running a command
diff --git a/aclocal.m4 b/aclocal.m4
index 4bc9f8c..07cfad5 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -12,120 +12,6 @@
# PARTICULAR PURPOSE.
m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
-# longlong.m4 serial 17
-dnl Copyright (C) 1999-2007, 2009-2016 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paul Eggert.
-
-# Define HAVE_LONG_LONG_INT if 'long long int' works.
-# This fixes a bug in Autoconf 2.61, and can be faster
-# than what's in Autoconf 2.62 through 2.68.
-
-# Note: If the type 'long long int' exists but is only 32 bits large
-# (as on some very old compilers), HAVE_LONG_LONG_INT will not be
-# defined. In this case you can treat 'long long int' like 'long int'.
-
-AC_DEFUN([AC_TYPE_LONG_LONG_INT],
-[
- AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
- AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
- [ac_cv_type_long_long_int=yes
- if test "x${ac_cv_prog_cc_c99-no}" = xno; then
- ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
- if test $ac_cv_type_long_long_int = yes; then
- dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
- dnl If cross compiling, assume the bug is not important, since
- dnl nobody cross compiles for this platform as far as we know.
- AC_RUN_IFELSE(
- [AC_LANG_PROGRAM(
- [[@%:@include <limits.h>
- @%:@ifndef LLONG_MAX
- @%:@ define HALF \
- (1LL << (sizeof (long long int) * CHAR_BIT - 2))
- @%:@ define LLONG_MAX (HALF - 1 + HALF)
- @%:@endif]],
- [[long long int n = 1;
- int i;
- for (i = 0; ; i++)
- {
- long long int m = n << i;
- if (m >> i != n)
- return 1;
- if (LLONG_MAX / 2 < m)
- break;
- }
- return 0;]])],
- [],
- [ac_cv_type_long_long_int=no],
- [:])
- fi
- fi])
- if test $ac_cv_type_long_long_int = yes; then
- AC_DEFINE([HAVE_LONG_LONG_INT], [1],
- [Define to 1 if the system has the type 'long long int'.])
- fi
-])
-
-# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
-# This fixes a bug in Autoconf 2.61, and can be faster
-# than what's in Autoconf 2.62 through 2.68.
-
-# Note: If the type 'unsigned long long int' exists but is only 32 bits
-# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
-# will not be defined. In this case you can treat 'unsigned long long int'
-# like 'unsigned long int'.
-
-AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
-[
- AC_CACHE_CHECK([for unsigned long long int],
- [ac_cv_type_unsigned_long_long_int],
- [ac_cv_type_unsigned_long_long_int=yes
- if test "x${ac_cv_prog_cc_c99-no}" = xno; then
- AC_LINK_IFELSE(
- [_AC_TYPE_LONG_LONG_SNIPPET],
- [],
- [ac_cv_type_unsigned_long_long_int=no])
- fi])
- if test $ac_cv_type_unsigned_long_long_int = yes; then
- AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1],
- [Define to 1 if the system has the type 'unsigned long long int'.])
- fi
-])
-
-# Expands to a C program that can be used to test for simultaneous support
-# of 'long long' and 'unsigned long long'. We don't want to say that
-# 'long long' is available if 'unsigned long long' is not, or vice versa,
-# because too many programs rely on the symmetry between signed and unsigned
-# integer types (excluding 'bool').
-AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
-[
- AC_LANG_PROGRAM(
- [[/* For now, do not test the preprocessor; as of 2007 there are too many
- implementations with broken preprocessors. Perhaps this can
- be revisited in 2012. In the meantime, code should not expect
- #if to work with literals wider than 32 bits. */
- /* Test literals. */
- long long int ll = 9223372036854775807ll;
- long long int nll = -9223372036854775807LL;
- unsigned long long int ull = 18446744073709551615ULL;
- /* Test constant expressions. */
- typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
- ? 1 : -1)];
- typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
- ? 1 : -1)];
- int i = 63;]],
- [[/* Test availability of runtime routines for shift and division. */
- long long int llmax = 9223372036854775807ll;
- unsigned long long int ullmax = 18446744073709551615ull;
- return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
- | (llmax / ll) | (llmax % ll)
- | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
- | (ullmax / ull) | (ullmax % ull));]])
-])
-
m4_include([m4/ax_append_flag.m4])
m4_include([m4/ax_check_compile_flag.m4])
m4_include([m4/ax_check_link_flag.m4])
diff --git a/config.h.in b/config.h.in
index 9b83b12..2ffb3c2 100644
--- a/config.h.in
+++ b/config.h.in
@@ -248,9 +248,6 @@
/* Define to 1 if you have the `fexecve' function. */
#undef HAVE_FEXECVE
-/* Define to 1 if you have the `fgetln' function. */
-#undef HAVE_FGETLN
-
/* Define to 1 if you have the `fnmatch' function. */
#undef HAVE_FNMATCH
@@ -284,6 +281,9 @@
/* Define to 1 if you have the `getauxval' function. */
#undef HAVE_GETAUXVAL
+/* Define to 1 if you have the `getdelim' function. */
+#undef HAVE_GETDELIM
+
/* Define to 1 if you have the `getdomainname' function. */
#undef HAVE_GETDOMAINNAME
@@ -308,9 +308,6 @@
/* Define to 1 if you have the `getifaddrs' function. */
#undef HAVE_GETIFADDRS
-/* Define to 1 if you have the `getline' function. */
-#undef HAVE_GETLINE
-
/* Define to 1 if you have the `getopt_long' function. */
#undef HAVE_GETOPT_LONG
@@ -483,7 +480,7 @@
/* Define to 1 if you have the <login_cap.h> header file. */
#undef HAVE_LOGIN_CAP_H
-/* Define to 1 if the system has the type 'long long int'. */
+/* Define to 1 if the system has the type `long long int'. */
#undef HAVE_LONG_LONG_INT
/* Define to 1 if you have the `lrand48' function. */
@@ -721,6 +718,9 @@
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
+/* Define to 1 if you have the `str2sig' function. */
+#undef HAVE_STR2SIG
+
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
@@ -825,6 +825,9 @@
/* Define to 1 if you have the <sys/procfs.h> header file. */
#undef HAVE_SYS_PROCFS_H
+/* Define to 1 if you have the <sys/random.h> header file. */
+#undef HAVE_SYS_RANDOM_H
+
/* Define to 1 if you have the <sys/select.h> header file. */
#undef HAVE_SYS_SELECT_H
@@ -864,7 +867,7 @@
/* Define to 1 if you have the `unsetenv' function. */
#undef HAVE_UNSETENV
-/* Define to 1 if the system has the type 'unsigned long long int'. */
+/* Define to 1 if the system has the type `unsigned long long int'. */
#undef HAVE_UNSIGNED_LONG_LONG_INT
/* Define to 1 if you have the <util.h> header file. */
diff --git a/configure b/configure
index e1b5dbb..c0bb851 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for sudo 1.8.27.
+# Generated by GNU Autoconf 2.69 for sudo 1.8.28p1.
#
# Report bugs to <https://bugzilla.sudo.ws/>.
#
@@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='sudo'
PACKAGE_TARNAME='sudo'
-PACKAGE_VERSION='1.8.27'
-PACKAGE_STRING='sudo 1.8.27'
+PACKAGE_VERSION='1.8.28p1'
+PACKAGE_STRING='sudo 1.8.28p1'
PACKAGE_BUGREPORT='https://bugzilla.sudo.ws/'
PACKAGE_URL=''
@@ -682,7 +682,7 @@ OBJEXT
EXEEXT
ac_ct_CC
CC
-PLUGINDIR
+plugindir
pam_login_service
pam_session
editor
@@ -722,6 +722,7 @@ timeout
vardir
rundir
iolog_dir
+SIGNAME
devsearch
DIGEST
exampledir
@@ -1543,7 +1544,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures sudo 1.8.27 to adapt to many kinds of systems.
+\`configure' configures sudo 1.8.28p1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1608,7 +1609,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of sudo 1.8.27:";;
+ short | recursive ) echo "Configuration of sudo 1.8.28p1:";;
esac
cat <<\_ACEOF
@@ -1874,7 +1875,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-sudo configure 1.8.27
+sudo configure 1.8.28p1
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2583,7 +2584,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by sudo $as_me 1.8.27, which was
+It was created by sudo $as_me 1.8.28p1, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3080,6 +3081,7 @@ $as_echo "$as_me: Configuring Sudo version $PACKAGE_VERSION" >&6;}
+
#
# Begin initial values for man page substitution
#
@@ -3106,7 +3108,7 @@ mailsub="*** SECURITY information for %h ***"
badpass_message="Sorry, try again."
fqdn=off
runas_default=root
-env_editor=off
+env_editor=on
env_reset=on
editor=vi
passwd_tries=3
@@ -3117,13 +3119,13 @@ path_info=on
ldap_conf=/etc/ldap.conf
ldap_secret=/etc/ldap.secret
netsvc_conf=/etc/netsvc.conf
-noexec_file=/usr/local/libexec/sudo/sudo_noexec.so
-sesh_file=/usr/local/libexec/sudo/sesh
+noexec_file="$libexecdir/sudo/sudo_noexec.so"
+sesh_file="$libexecdir/sudo/sesh"
nsswitch_conf=/etc/nsswitch.conf
secure_path="not set"
pam_session=on
pam_login_service=sudo
-PLUGINDIR=/usr/local/libexec/sudo
+plugindir="$libexecdir/sudo"
DIGEST=digest.lo
devsearch="/dev/pts:/dev/vt:/dev/term:/dev/zcons:/dev/pty:/dev"
#
@@ -3165,6 +3167,7 @@ INIT_SCRIPT=
INIT_DIR=
RC_LINK=
COMPAT_EXP=
+SIGNAME=
WEAK_ALIAS=no
CHECKSHADOW=true
shadow_funcs=
@@ -6031,12 +6034,13 @@ fi
# Check whether --with-plugindir was given.
if test "${with_plugindir+set}" = set; then :
withval=$with_plugindir; case $with_plugindir in
- no) as_fn_error $? "\"illegal argument: --without-plugindir.\"" "$LINENO" 5
+ yes) as_fn_error $? "\"must give --with-plugindir an argument.\"" "$LINENO" 5
+ ;;
+ no) as_fn_error $? "\"--without-plugindir not supported.\"" "$LINENO" 5
+ ;;
+ *) plugindir="$with_plugindir"
;;
- *) ;;
esac
-else
- with_plugindir="$libexecdir/sudo"
fi
@@ -15189,19 +15193,19 @@ $as_echo_n "checking path to sudo_noexec.so... " >&6; }
# Check whether --with-noexec was given.
if test "${with_noexec+set}" = set; then :
withval=$with_noexec; case $with_noexec in
- yes) with_noexec="$libexecdir/sudo/sudo_noexec.so"
- ;;
+ yes) ;;
no) ;;
- *) ;;
+ *) noexec_file="$with_noexec"
+ ;;
esac
else
- with_noexec="$libexecdir/sudo/sudo_noexec.so"
+ with_noexec="$noexec_file"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_noexec" >&5
$as_echo "$with_noexec" >&6; }
NOEXECFILE="sudo_noexec.so"
-NOEXECDIR="`echo $with_noexec|sed -e 's:^${\([^}]*\)}:$(\1):' -e 's:^\(.*\)/[^/]*:\1:'`"
+NOEXECDIR="`echo $noexec_file|sed -e 's:^${\([^}]*\)}:$(\1):' -e 's:^\(.*\)/[^/]*:\1:'`"
# Extract the first word of "uname", so it can be a program name with args.
set dummy uname; ac_word=$2
@@ -15394,9 +15398,7 @@ fi
$as_echo "$sudo_cv_var_mantype" >&6; }
MANTYPE="$sudo_cv_var_mantype"
else
- MANTYPE=cat
- MANDIRTYPE=cat
- mansrcdir='$(srcdir)'
+ : ${MANTYPE='mdoc'}
fi
fi
@@ -15510,11 +15512,11 @@ fi
ac_cv_func_strnlen=no
fi
- # getline() may or may ont be present on AIX <= 6.1.
- # bos610 is missing getline/getdelim but bos61J has it.
+ # getdelim() may or may not be present on AIX <= 6.1.
+ # bos610 is missing getdelim but bos61J has it.
if test "$enable_package_build" = "yes"; then
if test $OSMAJOR -le 6; then
- ac_cv_func_getline=no
+ ac_cv_func_getdelim=no
fi
fi
@@ -15731,8 +15733,6 @@ $as_echo "$sudo_cv_var_daportable" >&6; }
hpux10.*)
shadow_funcs="getprpwnam iscomsec"
shadow_libs="-lsec"
- # HP-UX 10.20 libc has an incompatible getline
- ac_cv_func_getline="no"
# HP-UX 10.x doesn't support LD_PRELOAD
with_noexec=no
;;
@@ -15869,24 +15869,11 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
*-*-irix*)
$as_echo "#define _BSD_TYPES 1" >>confdefs.h
- if test -z "$NROFFPROG"; then
- if test "$prefix" = "/usr/local" -a "$mandir" = '${datarootdir}/man'; then
- if test -d /usr/share/catman/local; then
- mandir="/usr/share/catman/local"
- else
- mandir="/usr/catman/local"
- fi
- fi
- # Compress cat pages with pack
- MANCOMPRESS='pack'
- MANCOMPRESSEXT='.z'
- else
- if test "$prefix" = "/usr/local" -a "$mandir" = '${datarootdir}/man'; then
- if test -d "/usr/share/man/local"; then
- mandir="/usr/share/man/local"
- else
- mandir="/usr/man/local"
- fi
+ if test "$prefix" = "/usr/local" -a "$mandir" = '${datarootdir}/man'; then
+ if test -d "/usr/share/man/local"; then
+ mandir="/usr/share/man/local"
+ else
+ mandir="/usr/man/local"
fi
fi
# IRIX <= 4 needs -lsun
@@ -16473,7 +16460,7 @@ if test X"$enable_pvs_studio" = X"yes"; then
EOF
fi
-if test -n "$with_noexec"; then
+if test X"$with_noexec" != X"no"; then
cat >>confdefs.h <<EOF
#define RTLD_PRELOAD_VAR "$RTLD_PRELOAD_VAR"
EOF
@@ -18323,18 +18310,18 @@ else
/* end confdefs.h. */
/* For now, do not test the preprocessor; as of 2007 there are too many
- implementations with broken preprocessors. Perhaps this can
- be revisited in 2012. In the meantime, code should not expect
- #if to work with literals wider than 32 bits. */
+ implementations with broken preprocessors. Perhaps this can
+ be revisited in 2012. In the meantime, code should not expect
+ #if to work with literals wider than 32 bits. */
/* Test literals. */
long long int ll = 9223372036854775807ll;
long long int nll = -9223372036854775807LL;
unsigned long long int ull = 18446744073709551615ULL;
/* Test constant expressions. */
typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
- ? 1 : -1)];
+ ? 1 : -1)];
typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
- ? 1 : -1)];
+ ? 1 : -1)];
int i = 63;
int
main ()
@@ -18343,9 +18330,9 @@ main ()
long long int llmax = 9223372036854775807ll;
unsigned long long int ullmax = 18446744073709551615ull;
return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
- | (llmax / ll) | (llmax % ll)
- | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
- | (ullmax / ull) | (ullmax % ull));
+ | (llmax / ll) | (llmax % ll)
+ | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+ | (ullmax / ull) | (ullmax % ull));
;
return 0;
}
@@ -18377,33 +18364,33 @@ if ${ac_cv_type_long_long_int+:} false; then :
else
ac_cv_type_long_long_int=yes
if test "x${ac_cv_prog_cc_c99-no}" = xno; then
- ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
- if test $ac_cv_type_long_long_int = yes; then
- if test "$cross_compiling" = yes; then :
+ ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
+ if test $ac_cv_type_long_long_int = yes; then
+ if test "$cross_compiling" = yes; then :
:
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <limits.h>
- #ifndef LLONG_MAX
- # define HALF \
- (1LL << (sizeof (long long int) * CHAR_BIT - 2))
- # define LLONG_MAX (HALF - 1 + HALF)
- #endif
+ #ifndef LLONG_MAX
+ # define HALF \
+ (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+ # define LLONG_MAX (HALF - 1 + HALF)
+ #endif
int
main ()
{
long long int n = 1;
- int i;
- for (i = 0; ; i++)
- {
- long long int m = n << i;
- if (m >> i != n)
- return 1;
- if (LLONG_MAX / 2 < m)
- break;
- }
- return 0;
+ int i;
+ for (i = 0; ; i++)
+ {
+ long long int m = n << i;
+ if (m >> i != n)
+ return 1;
+ if (LLONG_MAX / 2 < m)
+ break;
+ }
+ return 0;
;
return 0;
}
@@ -18417,7 +18404,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
- fi
+ fi
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5
@@ -19381,39 +19368,29 @@ fi
fi
done
-for ac_func in getline
+for ac_func in getdelim
do :
- ac_fn_c_check_func "$LINENO" "getline" "ac_cv_func_getline"
-if test "x$ac_cv_func_getline" = xyes; then :
+ ac_fn_c_check_func "$LINENO" "getdelim" "ac_cv_func_getdelim"
+if test "x$ac_cv_func_getdelim" = xyes; then :
cat >>confdefs.h <<_ACEOF
-#define HAVE_GETLINE 1
+#define HAVE_GETDELIM 1
_ACEOF
else
case " $LIBOBJS " in
- *" getline.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS getline.$ac_objext"
+ *" getdelim.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS getdelim.$ac_objext"
;;
esac
- for _sym in sudo_getline; do
+ for _sym in sudo_getdelim; do
COMPAT_EXP="${COMPAT_EXP}${_sym}
"
done
- for ac_func in fgetln
-do :
- ac_fn_c_check_func "$LINENO" "fgetln" "ac_cv_func_fgetln"
-if test "x$ac_cv_func_fgetln" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_FGETLN 1
-_ACEOF
-
-fi
-done
-
+ COMPAT_TEST_PROGS="${COMPAT_TEST_PROGS}${COMPAT_TEST_PROGS+ }getdelim_test"
fi
done
@@ -19497,6 +19474,19 @@ if test "x$ac_cv_func_getentropy" = xyes; then :
#define HAVE_GETENTROPY 1
_ACEOF
+ for ac_header in sys/random.h
+do :
+ ac_fn_c_check_header_mongrel "$LINENO" "sys/random.h" "ac_cv_header_sys_random_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_random_h" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SYS_RANDOM_H 1
+_ACEOF
+
+fi
+
+done
+
+
else
case " $LIBOBJS " in
@@ -22743,7 +22733,6 @@ _ACEOF
if test $ac_have_decl = 1; then :
HAVE_SIGLIST="true"
- break
fi
ac_fn_c_check_decl "$LINENO" "_sys_siglist" "ac_cv_have_decl__sys_siglist" "
@@ -22763,7 +22752,6 @@ _ACEOF
if test $ac_have_decl = 1; then :
HAVE_SIGLIST="true"
- break
fi
@@ -22816,6 +22804,39 @@ esac
"
done
+
+fi
+done
+
+for ac_func in str2sig
+do :
+ ac_fn_c_check_func "$LINENO" "str2sig" "ac_cv_func_str2sig"
+if test "x$ac_cv_func_str2sig" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_STR2SIG 1
+_ACEOF
+
+else
+
+ case " $LIBOBJS " in
+ *" str2sig.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS str2sig.$ac_objext"
+ ;;
+esac
+
+
+ for _sym in sudo_str2sig; do
+ COMPAT_EXP="${COMPAT_EXP}${_sym}
+"
+ done
+
+
+fi
+done
+
+
+if test x"${ac_cv_func_sig2str}${ac_cv_func_str2sig}" != x"yesyes"; then
+ COMPAT_TEST_PROGS="${COMPAT_TEST_PROGS}${COMPAT_TEST_PROGS+ }strsig_test"
HAVE_SIGNAME="false"
ac_fn_c_check_decl "$LINENO" "sys_signame" "ac_cv_have_decl_sys_signame" "
$ac_includes_default
@@ -22834,7 +22855,6 @@ _ACEOF
if test $ac_have_decl = 1; then :
HAVE_SIGNAME="true"
- break
fi
ac_fn_c_check_decl "$LINENO" "_sys_signame" "ac_cv_have_decl__sys_signame" "
@@ -22854,7 +22874,6 @@ _ACEOF
if test $ac_have_decl = 1; then :
HAVE_SIGNAME="true"
- break
fi
ac_fn_c_check_decl "$LINENO" "sys_sigabbrev" "ac_cv_have_decl_sys_sigabbrev" "
@@ -22874,7 +22893,6 @@ _ACEOF
if test $ac_have_decl = 1; then :
HAVE_SIGNAME="true"
- break
fi
@@ -22918,12 +22936,10 @@ $as_echo "$sudo_cv_var_sys_sigabbrev" >&6; }
;;
esac
+ SIGNAME=signame.lo
fi
fi
-
fi
-done
-
OLIBS="$LIBS"
LIBS="$LIBS $lt_cv_dlopen_libs"
@@ -24618,7 +24634,9 @@ $as_echo "$ac_cv_search_crypt" >&6; }
ac_res=$ac_cv_search_crypt
if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
- test -n "$ac_lib" && shadow_libs="${shadow_libs} $ac_res"
+
+ test "${ac_cv_search_crypt}" != "none required" && shadow_libs="${shadow_libs} ${ac_cv_search_crypt}"
+
fi
LIBS="$_LIBS"
@@ -24704,8 +24722,12 @@ $as_echo "$ac_cv_search_getspnam" >&6; }
ac_res=$ac_cv_search_getspnam
if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
- $as_echo "#define HAVE_GETSPNAM 1" >>confdefs.h
- CHECKSHADOW=false; test -n "$ac_lib" && shadow_libs="${shadow_libs} $ac_res"
+
+ $as_echo "#define HAVE_GETSPNAM 1" >>confdefs.h
+
+ test "${ac_cv_search_getspnam}" != "none required" && shadow_libs="${shadow_libs} ${ac_cv_search_getspnam}"
+ CHECKSHADOW=false
+
fi
fi
@@ -24763,8 +24785,13 @@ $as_echo "$ac_cv_search_getprpwnam" >&6; }
ac_res=$ac_cv_search_getprpwnam
if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
- $as_echo "#define HAVE_GETPRPWNAM 1" >>confdefs.h
- CHECKSHADOW=false; SECUREWARE=1; test -n "$ac_lib" && shadow_libs="${shadow_libs} $ac_res"
+
+ $as_echo "#define HAVE_GETPRPWNAM 1" >>confdefs.h
+
+ test "${ac_cv_search_getprpwnam}" != "none required" && shadow_libs="${shadow_libs} ${ac_cv_search_getprpwnam}"
+ SECUREWARE=1
+ CHECKSHADOW=false
+
fi
fi
@@ -25100,7 +25127,7 @@ ac_res=$ac_cv_search_ldap_init
if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
- test "$ac_res" != "none required" && LDAP_LIBS="$ac_res"
+ test "${ac_cv_search_ldap_init}" != "none required" && LDAP_LIBS="${ac_cv_search_ldap_init}"
found=yes
fi
@@ -26894,77 +26921,76 @@ CROSS_COMPILING="$cross_compiling"
test "$exec_prefix" = "NONE" && exec_prefix='$(prefix)'
-if test X"$with_noexec" != X"no" -o X"$with_selinux" != X"no" -o "$enabled_shared" != X"no"; then
- oexec_prefix="$exec_prefix"
- if test "$exec_prefix" = '$(prefix)'; then
- if test "$prefix" = "NONE"; then
- exec_prefix="$ac_default_prefix"
- else
- exec_prefix="$prefix"
- fi
+oexec_prefix="$exec_prefix"
+if test "$exec_prefix" = '$(prefix)'; then
+ if test "$prefix" = "NONE"; then
+ exec_prefix="$ac_default_prefix"
+ else
+ exec_prefix="$prefix"
fi
- if test X"$with_noexec" != X"no"; then
- PROGS="${PROGS} sudo_noexec.la"
- INSTALL_NOEXEC="install-noexec"
+fi
- # Can't use asan with LD_PRELOAD
- if test "$enable_asan" != "yes"; then
- CHECK_NOEXEC=check_noexec
- fi
+# Update exec_prefix in noexec_file
+_noexec_file=
+while test X"$noexec_file" != X"$_noexec_file"; do
+ _noexec_file="$noexec_file"
+ eval noexec_file="$_noexec_file"
+done
- noexec_file="$with_noexec"
- _noexec_file=
- while test X"$noexec_file" != X"$_noexec_file"; do
- _noexec_file="$noexec_file"
- eval noexec_file="$_noexec_file"
- done
- cat >>confdefs.h <<EOF
-#define _PATH_SUDO_NOEXEC "$noexec_file"
-EOF
+# Update exec_prefix in sesh_file
+_sesh_file=
+while test X"$sesh_file" != X"$_sesh_file"; do
+ _sesh_file="$sesh_file"
+ eval sesh_file="$_sesh_file"
+done
- fi
- if test X"$with_selinux" != X"no"; then
- sesh_file="$libexecdir/sudo/sesh"
- _sesh_file=
- while test X"$sesh_file" != X"$_sesh_file"; do
- _sesh_file="$sesh_file"
- eval sesh_file="$_sesh_file"
- done
- cat >>confdefs.h <<EOF
-#define _PATH_SUDO_SESH "$sesh_file"
-EOF
+# Update exec_prefix in plugindir
+_plugindir=
+while test X"$plugindir" != X"$_plugindir"; do
+ _plugindir="$plugindir"
+ eval plugindir="$_plugindir"
+done
+exec_prefix="$oexec_prefix"
- fi
- if test X"$enable_shared" != X"no"; then
- PLUGINDIR="$with_plugindir"
- _PLUGINDIR=
- while test X"$PLUGINDIR" != X"$_PLUGINDIR"; do
- _PLUGINDIR="$PLUGINDIR"
- eval PLUGINDIR="$_PLUGINDIR"
- done
- cat >>confdefs.h <<EOF
-#define _PATH_SUDO_PLUGIN_DIR "$PLUGINDIR/"
-EOF
+if test X"$with_noexec" != X"no"; then
+ PROGS="${PROGS} sudo_noexec.la"
+ INSTALL_NOEXEC="install-noexec"
+ # Can't use asan with LD_PRELOAD
+ if test "$enable_asan" != "yes"; then
+ CHECK_NOEXEC=check_noexec
+ fi
-$as_echo "#define ENABLE_SUDO_PLUGIN_API 1" >>confdefs.h
+ cat >>confdefs.h <<EOF
+#define _PATH_SUDO_NOEXEC "$noexec_file"
+EOF
- fi
- exec_prefix="$oexec_prefix"
-fi
-if test X"$with_noexec" = X"no"; then
+else
cat >>confdefs.h <<EOF
#define _PATH_SUDO_NOEXEC NULL
EOF
fi
-if test X"$with_selinux" = X"no"; then
+if test X"$with_selinux" != X"no"; then
+ cat >>confdefs.h <<EOF
+#define _PATH_SUDO_SESH "$sesh_file"
+EOF
+
+else
cat >>confdefs.h <<EOF
#define _PATH_SUDO_SESH NULL
EOF
fi
-if test X"$enable_shared" = X"no"; then
+if test X"$enable_shared" != X"no"; then
+ cat >>confdefs.h <<EOF
+#define _PATH_SUDO_PLUGIN_DIR "$plugindir/"
+EOF
+
+
+$as_echo "#define ENABLE_SUDO_PLUGIN_API 1" >>confdefs.h
+
+else
cat >>confdefs.h <<EOF
#define _PATH_SUDO_PLUGIN_DIR NULL
EOF
@@ -27511,7 +27537,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by sudo $as_me 1.8.27, which was
+This file was extended by sudo $as_me 1.8.28p1, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -27577,7 +27603,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-sudo config.status 1.8.27
+sudo config.status 1.8.28p1
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index 962a032..c05801e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,10 +1,24 @@
dnl
dnl Use the top-level autogen.sh script to generate configure and config.h.in
dnl
-dnl Copyright (c) 1994-1996,1998-2018 Todd C. Miller <Todd.Miller@sudo.ws>
+dnl SPDX-License-Identifier: ISC
+dnl
+dnl Copyright (c) 1994-1996, 1998-2018 Todd C. Miller <Todd.Miller@sudo.ws>
+dnl
+dnl Permission to use, copy, modify, and distribute this software for any
+dnl purpose with or without fee is hereby granted, provided that the above
+dnl copyright notice and this permission notice appear in all copies.
+dnl
+dnl THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+dnl WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+dnl MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+dnl ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+dnl WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+dnl ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+dnl OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
dnl
AC_PREREQ([2.59])
-AC_INIT([sudo], [1.8.27], [https://bugzilla.sudo.ws/], [sudo])
+AC_INIT([sudo], [1.8.28p1], [https://bugzilla.sudo.ws/], [sudo])
AC_CONFIG_HEADER([config.h pathnames.h])
AC_CONFIG_SRCDIR([src/sudo.c])
dnl
@@ -99,6 +113,7 @@ AC_SUBST([TMPFILES_D])
AC_SUBST([exampledir])
AC_SUBST([DIGEST])
AC_SUBST([devsearch])
+AC_SUBST([SIGNAME])
dnl
dnl Variables that get substituted in docs (not overridden by environment)
dnl
@@ -141,7 +156,7 @@ AC_SUBST([secure_path])
AC_SUBST([editor])
AC_SUBST([pam_session])
AC_SUBST([pam_login_service])
-AC_SUBST([PLUGINDIR])
+AC_SUBST([plugindir])
#
# Begin initial values for man page substitution
#
@@ -168,7 +183,7 @@ mailsub="*** SECURITY information for %h ***"
badpass_message="Sorry, try again."
fqdn=off
runas_default=root
-env_editor=off
+env_editor=on
env_reset=on
editor=vi
passwd_tries=3
@@ -179,13 +194,13 @@ path_info=on
ldap_conf=/etc/ldap.conf
ldap_secret=/etc/ldap.secret
netsvc_conf=/etc/netsvc.conf
-noexec_file=/usr/local/libexec/sudo/sudo_noexec.so
-sesh_file=/usr/local/libexec/sudo/sesh
+noexec_file="$libexecdir/sudo/sudo_noexec.so"
+sesh_file="$libexecdir/sudo/sesh"
nsswitch_conf=/etc/nsswitch.conf
secure_path="not set"
pam_session=on
pam_login_service=sudo
-PLUGINDIR=/usr/local/libexec/sudo
+plugindir="$libexecdir/sudo"
DIGEST=digest.lo
devsearch="/dev/pts:/dev/vt:/dev/term:/dev/zcons:/dev/pty:/dev"
#
@@ -231,6 +246,7 @@ INIT_SCRIPT=
INIT_DIR=
RC_LINK=
COMPAT_EXP=
+SIGNAME=
dnl
dnl Other vaiables
dnl
@@ -1235,10 +1251,13 @@ esac])
AC_ARG_WITH(plugindir, [AS_HELP_STRING([--with-plugindir=DIR], [set directory to load plugins from])],
[case $with_plugindir in
- no) AC_MSG_ERROR(["illegal argument: --without-plugindir."])
+ yes) AC_MSG_ERROR(["must give --with-plugindir an argument."])
;;
- *) ;;
-esac], [with_plugindir="$libexecdir/sudo"])
+ no) AC_MSG_ERROR(["--without-plugindir not supported."])
+ ;;
+ *) plugindir="$with_plugindir"
+ ;;
+esac])
AC_ARG_WITH(man, [AS_HELP_STRING([--with-man], [manual pages use man macros])],
[case $with_man in
@@ -1697,14 +1716,14 @@ SHLIB_ENABLE="$enable_dlopen"
AC_MSG_CHECKING(path to sudo_noexec.so)
AC_ARG_WITH(noexec, [AS_HELP_STRING([--with-noexec[[=PATH]]], [fully qualified pathname of sudo_noexec.so])],
[case $with_noexec in
- yes) with_noexec="$libexecdir/sudo/sudo_noexec.so"
- ;;
+ yes) ;;
no) ;;
- *) ;;
-esac], [with_noexec="$libexecdir/sudo/sudo_noexec.so"])
+ *) noexec_file="$with_noexec"
+ ;;
+esac], [with_noexec="$noexec_file"])
AC_MSG_RESULT($with_noexec)
NOEXECFILE="sudo_noexec.so"
-NOEXECDIR="`echo $with_noexec|sed -e 's:^${\([[^}]]*\)}:$(\1):' -e 's:^\(.*\)/[[^/]]*:\1:'`"
+NOEXECDIR="`echo $noexec_file|sed -e 's:^${\([[^}]]*\)}:$(\1):' -e 's:^\(.*\)/[[^/]]*:\1:'`"
dnl
dnl Find programs we use
@@ -1735,9 +1754,7 @@ else
)
MANTYPE="$sudo_cv_var_mantype"
else
- MANTYPE=cat
- MANDIRTYPE=cat
- mansrcdir='$(srcdir)'
+ : ${MANTYPE='mdoc'}
fi
fi
@@ -1829,11 +1846,11 @@ case "$host" in
ac_cv_func_strnlen=no
fi
- # getline() may or may ont be present on AIX <= 6.1.
- # bos610 is missing getline/getdelim but bos61J has it.
+ # getdelim() may or may not be present on AIX <= 6.1.
+ # bos610 is missing getdelim but bos61J has it.
if test "$enable_package_build" = "yes"; then
if test $OSMAJOR -le 6; then
- ac_cv_func_getline=no
+ ac_cv_func_getdelim=no
fi
fi
@@ -1954,8 +1971,6 @@ case "$host" in
hpux10.*)
shadow_funcs="getprpwnam iscomsec"
shadow_libs="-lsec"
- # HP-UX 10.20 libc has an incompatible getline
- ac_cv_func_getline="no"
# HP-UX 10.x doesn't support LD_PRELOAD
with_noexec=no
;;
@@ -2020,24 +2035,11 @@ case "$host" in
;;
*-*-irix*)
AC_DEFINE([_BSD_TYPES])
- if test -z "$NROFFPROG"; then
- if test "$prefix" = "/usr/local" -a "$mandir" = '${datarootdir}/man'; then
- if test -d /usr/share/catman/local; then
- mandir="/usr/share/catman/local"
- else
- mandir="/usr/catman/local"
- fi
- fi
- # Compress cat pages with pack
- MANCOMPRESS='pack'
- MANCOMPRESSEXT='.z'
- else
- if test "$prefix" = "/usr/local" -a "$mandir" = '${datarootdir}/man'; then
- if test -d "/usr/share/man/local"; then
- mandir="/usr/share/man/local"
- else
- mandir="/usr/man/local"
- fi
+ if test "$prefix" = "/usr/local" -a "$mandir" = '${datarootdir}/man'; then
+ if test -d "/usr/share/man/local"; then
+ mandir="/usr/share/man/local"
+ else
+ mandir="/usr/man/local"
fi
fi
# IRIX <= 4 needs -lsun
@@ -2293,7 +2295,7 @@ fi
dnl
dnl Library preloading to support NOEXEC
dnl
-if test -n "$with_noexec"; then
+if test X"$with_noexec" != X"no"; then
SUDO_DEFINE_UNQUOTED(RTLD_PRELOAD_VAR, "$RTLD_PRELOAD_VAR")
SUDO_DEFINE_UNQUOTED(RTLD_PRELOAD_DELIM, "$RTLD_PRELOAD_DELIM")
if test -n "$RTLD_PRELOAD_DEFAULT"; then
@@ -2555,10 +2557,10 @@ AC_CHECK_FUNCS([getgrouplist], [], [
esac
SUDO_APPEND_COMPAT_EXP(sudo_getgrouplist)
])
-AC_CHECK_FUNCS([getline], [], [
- AC_LIBOBJ(getline)
- SUDO_APPEND_COMPAT_EXP(sudo_getline)
- AC_CHECK_FUNCS([fgetln])
+AC_CHECK_FUNCS([getdelim], [], [
+ AC_LIBOBJ(getdelim)
+ SUDO_APPEND_COMPAT_EXP(sudo_getdelim)
+ COMPAT_TEST_PROGS="${COMPAT_TEST_PROGS}${COMPAT_TEST_PROGS+ }getdelim_test"
])
AC_CHECK_FUNCS([reallocarray], [], [
AC_LIBOBJ(reallocarray)
@@ -2571,7 +2573,9 @@ AC_CHECK_FUNCS([arc4random_uniform], [], [
AC_LIBOBJ(arc4random)
SUDO_APPEND_COMPAT_EXP(sudo_arc4random)
# arc4random.c needs getentropy()
- AC_CHECK_FUNCS([getentropy], [], [
+ AC_CHECK_FUNCS([getentropy], [
+ AC_CHECK_HEADERS([sys/random.h])
+ ], [
AC_LIBOBJ(getentropy)
SUDO_APPEND_COMPAT_EXP(sudo_getentropy)
])
@@ -3264,7 +3268,6 @@ AC_CHECK_FUNCS([strsignal], [], [
HAVE_SIGLIST="false"
AC_CHECK_DECLS([sys_siglist, _sys_siglist], [
HAVE_SIGLIST="true"
- break
], [ ], [
AC_INCLUDES_DEFAULT
#include <signal.h>
@@ -3275,7 +3278,7 @@ AC_INCLUDES_DEFAULT
])
dnl
-dnl Check for sig2str(), sys_signame or sys_sigabbrev
+dnl Check for sig2str() and str2sig(), sys_signame or sys_sigabbrev
dnl
AC_CHECK_FUNCS([sig2str], [
AC_CHECK_DECLS(SIG2STR_MAX, [], [], [
@@ -3283,10 +3286,21 @@ AC_CHECK_FUNCS([sig2str], [
])], [
AC_LIBOBJ(sig2str)
SUDO_APPEND_COMPAT_EXP(sudo_sig2str)
+])
+AC_CHECK_FUNCS([str2sig], [], [
+ AC_LIBOBJ(str2sig)
+ SUDO_APPEND_COMPAT_EXP(sudo_str2sig)
+])
+
+dnl
+dnl Check for sys_signame or sys_sigabbrev if missing sig2str() or str2sig().
+dnl Also enable unit tests for sig2str() and str2sig().
+dnl
+if test x"${ac_cv_func_sig2str}${ac_cv_func_str2sig}" != x"yesyes"; then
+ COMPAT_TEST_PROGS="${COMPAT_TEST_PROGS}${COMPAT_TEST_PROGS+ }strsig_test"
HAVE_SIGNAME="false"
AC_CHECK_DECLS([sys_signame, _sys_signame, sys_sigabbrev], [
HAVE_SIGNAME="true"
- break
], [ ], [
AC_INCLUDES_DEFAULT
#include <signal.h>
@@ -3305,9 +3319,10 @@ AC_INCLUDES_DEFAULT
AC_DEFINE(HAVE_SYS_SIGABBREV)
else
AC_LIBOBJ(signame)
+ SIGNAME=signame.lo
fi
fi
-])
+fi
dnl
dnl Check for dl_iterate_phdr, may require -ldl
@@ -3755,7 +3770,9 @@ if test ${with_passwd-'no'} != "no"; then
dnl
if test -z "$LIB_CRYPT"; then
_LIBS="$LIBS"
- AC_SEARCH_LIBS([crypt], [crypt crypt_d ufc], [test -n "$ac_lib" && shadow_libs="${shadow_libs} $ac_res"])
+ AC_SEARCH_LIBS([crypt], [crypt crypt_d ufc], [
+ test "${ac_cv_search_crypt}" != "none required" && shadow_libs="${shadow_libs} ${ac_cv_search_crypt}"
+ ])
LIBS="$_LIBS"
fi
@@ -3775,10 +3792,19 @@ if test ${with_passwd-'no'} != "no"; then
LIBS="$_LIBS"
fi
if test "$CHECKSHADOW" = "true"; then
- AC_SEARCH_LIBS([getspnam], [gen shadow], [AC_DEFINE(HAVE_GETSPNAM)] [CHECKSHADOW=false; test -n "$ac_lib" && shadow_libs="${shadow_libs} $ac_res"])
+ AC_SEARCH_LIBS([getspnam], [gen shadow], [
+ AC_DEFINE(HAVE_GETSPNAM)
+ test "${ac_cv_search_getspnam}" != "none required" && shadow_libs="${shadow_libs} ${ac_cv_search_getspnam}"
+ CHECKSHADOW=false
+ ])
fi
if test "$CHECKSHADOW" = "true"; then
- AC_SEARCH_LIBS([getprpwnam], [sec security prot], [AC_DEFINE(HAVE_GETPRPWNAM)] [CHECKSHADOW=false; SECUREWARE=1; test -n "$ac_lib" && shadow_libs="${shadow_libs} $ac_res"])
+ AC_SEARCH_LIBS([getprpwnam], [sec security prot], [
+ AC_DEFINE(HAVE_GETPRPWNAM)
+ test "${ac_cv_search_getprpwnam}" != "none required" && shadow_libs="${shadow_libs} ${ac_cv_search_getprpwnam}"
+ SECUREWARE=1
+ CHECKSHADOW=false
+ ])
fi
if test -n "$shadow_libs"; then
# sudoers needs to link with shadow libs for password auth
@@ -3843,8 +3869,8 @@ if test ${with_ldap-'no'} != "no"; then
case "$host_os" in
hpux*) AC_CHECK_LIB(Csup, main, [IBMLDAP_EXTRA=" -lCsup"]);;
esac
- AC_SEARCH_LIBS(ldap_init, "ibmldap${IBMLDAP_EXTRA}" "ibmldap -lidsldif${IBMLDAP_EXTRA}" "ldap" "ldap -llber" "ldap -llber -lssl -lcrypto" "ibmldap${IBMLDAP_EXTRA}", [
- test "$ac_res" != "none required" && LDAP_LIBS="$ac_res"
+ AC_SEARCH_LIBS([ldap_init], ["ibmldap${IBMLDAP_EXTRA}" "ibmldap -lidsldif${IBMLDAP_EXTRA}" "ldap" "ldap -llber" "ldap -llber -lssl -lcrypto" "ibmldap${IBMLDAP_EXTRA}]", [
+ test "${ac_cv_search_ldap_init}" != "none required" && LDAP_LIBS="${ac_cv_search_ldap_init}"
found=yes
])
# If nothing linked, try -lldap and hope for the best
@@ -4358,63 +4384,64 @@ dnl
test "$exec_prefix" = "NONE" && exec_prefix='$(prefix)'
dnl
-dnl Defer setting _PATH_SUDO_NOEXEC until after exec_prefix is set
-dnl XXX - this is gross!
+dnl Expand exec_prefix in in variables used by the manual pages
dnl
-if test X"$with_noexec" != X"no" -o X"$with_selinux" != X"no" -o "$enabled_shared" != X"no"; then
- oexec_prefix="$exec_prefix"
- if test "$exec_prefix" = '$(prefix)'; then
- if test "$prefix" = "NONE"; then
- exec_prefix="$ac_default_prefix"
- else
- exec_prefix="$prefix"
- fi
+oexec_prefix="$exec_prefix"
+if test "$exec_prefix" = '$(prefix)'; then
+ if test "$prefix" = "NONE"; then
+ exec_prefix="$ac_default_prefix"
+ else
+ exec_prefix="$prefix"
fi
- if test X"$with_noexec" != X"no"; then
- PROGS="${PROGS} sudo_noexec.la"
- INSTALL_NOEXEC="install-noexec"
+fi
- # Can't use asan with LD_PRELOAD
- if test "$enable_asan" != "yes"; then
- CHECK_NOEXEC=check_noexec
- fi
+# Update exec_prefix in noexec_file
+_noexec_file=
+while test X"$noexec_file" != X"$_noexec_file"; do
+ _noexec_file="$noexec_file"
+ eval noexec_file="$_noexec_file"
+done
- noexec_file="$with_noexec"
- _noexec_file=
- while test X"$noexec_file" != X"$_noexec_file"; do
- _noexec_file="$noexec_file"
- eval noexec_file="$_noexec_file"
- done
- SUDO_DEFINE_UNQUOTED(_PATH_SUDO_NOEXEC, "$noexec_file", [The fully qualified pathname of sudo_noexec.so])
- fi
- if test X"$with_selinux" != X"no"; then
- sesh_file="$libexecdir/sudo/sesh"
- _sesh_file=
- while test X"$sesh_file" != X"$_sesh_file"; do
- _sesh_file="$sesh_file"
- eval sesh_file="$_sesh_file"
- done
- SUDO_DEFINE_UNQUOTED(_PATH_SUDO_SESH, "$sesh_file")
- fi
- if test X"$enable_shared" != X"no"; then
- PLUGINDIR="$with_plugindir"
- _PLUGINDIR=
- while test X"$PLUGINDIR" != X"$_PLUGINDIR"; do
- _PLUGINDIR="$PLUGINDIR"
- eval PLUGINDIR="$_PLUGINDIR"
- done
- SUDO_DEFINE_UNQUOTED(_PATH_SUDO_PLUGIN_DIR, "$PLUGINDIR/")
- AC_DEFINE(ENABLE_SUDO_PLUGIN_API, 1, [Define to 1 to enable sudo's plugin interface.])
+# Update exec_prefix in sesh_file
+_sesh_file=
+while test X"$sesh_file" != X"$_sesh_file"; do
+ _sesh_file="$sesh_file"
+ eval sesh_file="$_sesh_file"
+done
+
+# Update exec_prefix in plugindir
+_plugindir=
+while test X"$plugindir" != X"$_plugindir"; do
+ _plugindir="$plugindir"
+ eval plugindir="$_plugindir"
+done
+exec_prefix="$oexec_prefix"
+
+dnl
+dnl Defer setting _PATH_SUDO_NOEXEC, etc until after exec_prefix is set
+dnl
+if test X"$with_noexec" != X"no"; then
+ PROGS="${PROGS} sudo_noexec.la"
+ INSTALL_NOEXEC="install-noexec"
+
+ # Can't use asan with LD_PRELOAD
+ if test "$enable_asan" != "yes"; then
+ CHECK_NOEXEC=check_noexec
fi
- exec_prefix="$oexec_prefix"
-fi
-if test X"$with_noexec" = X"no"; then
+
+ SUDO_DEFINE_UNQUOTED(_PATH_SUDO_NOEXEC, "$noexec_file", [The fully qualified pathname of sudo_noexec.so])
+else
SUDO_DEFINE_UNQUOTED(_PATH_SUDO_NOEXEC, NULL)
fi
-if test X"$with_selinux" = X"no"; then
+if test X"$with_selinux" != X"no"; then
+ SUDO_DEFINE_UNQUOTED(_PATH_SUDO_SESH, "$sesh_file")
+else
SUDO_DEFINE_UNQUOTED(_PATH_SUDO_SESH, NULL)
fi
-if test X"$enable_shared" = X"no"; then
+if test X"$enable_shared" != X"no"; then
+ SUDO_DEFINE_UNQUOTED(_PATH_SUDO_PLUGIN_DIR, "$plugindir/")
+ AC_DEFINE(ENABLE_SUDO_PLUGIN_API, 1, [Define to 1 to enable sudo's plugin interface.])
+else
SUDO_DEFINE_UNQUOTED(_PATH_SUDO_PLUGIN_DIR, NULL)
fi
diff --git a/doc/CONTRIBUTORS b/doc/CONTRIBUTORS
index 487322b..63fa6bd 100644
--- a/doc/CONTRIBUTORS
+++ b/doc/CONTRIBUTORS
@@ -16,6 +16,7 @@ you believe you should be listed, please send a note to sudo@sudo.ws.
Benali, Elias
Beverly, Jamie
Boardman, Spider
+ Bos, Sander
Bostley, P.J.
Bowes, Keith
Boyce, Keith Garry
@@ -92,6 +93,7 @@ you believe you should be listed, please send a note to sudo@sudo.ws.
MacKenzie, David J.
McLaughlin, Tom
Makey, Jeff
+ Mallayya, Sangamesh
Marchionna, Michael D.
Markham, Paul
Martinian, Emin
@@ -147,6 +149,7 @@ you believe you should be listed, please send a note to sudo@sudo.ws.
Soulen, Steven
Spangler, Aaron
Spradling, Cloyce D.
+ Spradling, Michael
Stier, Matthew
Stoeckmann, Tobias
Street, Russell
diff --git a/doc/Makefile.in b/doc/Makefile.in
index e8d2605..469246a 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -1,4 +1,6 @@
#
+# SPDX-License-Identifier: ISC
+#
# Copyright (c) 2010-2015, 2017-2018 Todd C. Miller <Todd.Miller@sudo.ws>
#
# Permission to use, copy, modify, and distribute this software for any
@@ -74,15 +76,11 @@ DOCS = $(mansrcdir)/cvtsudoers.$(mantype) $(mansrcdir)/sudo.$(mantype) \
$(mansrcdir)/sudoers_timestamp.$(mantype) \
$(mansrcdir)/sudoreplay.$(mantype) $(mansrcdir)/visudo.$(mantype)
-DEVDOCS = $(srcdir)/cvtsudoers.man.in $(srcdir)/cvtsudoers.cat \
- $(srcdir)/sudo.conf.man.in $(srcdir)/sudo.conf.cat \
- $(srcdir)/sudo.man.in $(srcdir)/sudo.cat \
- $(srcdir)/sudo_plugin.man.in $(srcdir)/sudo_plugin.cat \
- $(srcdir)/sudoers.ldap.man.in $(srcdir)/sudoers.ldap.cat \
- $(srcdir)/sudoers.man.in $(srcdir)/sudoers.cat \
- $(srcdir)/sudoers_timestamp.man.in $(srcdir)/sudoers_timestamp.cat \
- $(srcdir)/sudoreplay.man.in $(srcdir)/sudoreplay.cat \
- $(srcdir)/visudo.man.in $(srcdir)/visudo.cat
+DEVDOCS = $(srcdir)/cvtsudoers.man.in $(srcdir)/sudo.conf.man.in \
+ $(srcdir)/sudo.man.in $(srcdir)/sudo_plugin.man.in \
+ $(srcdir)/sudoers.ldap.man.in $(srcdir)/sudoers.man.in \
+ $(srcdir)/sudoers_timestamp.man.in $(srcdir)/sudoreplay.man.in \
+ $(srcdir)/visudo.man.in
OTHER_DOCS = $(top_srcdir)/ChangeLog $(top_srcdir)/README \
$(top_srcdir)/NEWS $(srcdir)/HISTORY $(srcdir)/CONTRIBUTORS \
@@ -126,12 +124,6 @@ Makefile: $(srcdir)/Makefile.in
.SUFFIXES: .man
-varsub: $(top_srcdir)/configure.ac
- @if [ -n "$(DEVEL)" ]; then \
- printf 's#@%s@#1#\ns#@%s@#1#\ns#@%s@#1#\ns#@%s@#1#\ns#@%s@#/etc#g\ns#@%s@#/usr/local#g\ns#@%s@#5#g\ns#@%s@#8#g\ns#@%s@#%s#\n' SEMAN BAMAN LCMAN PSMAN sysconfdir prefix mansectform mansectsu PACKAGE_VERSION $(VERSION) > $@; \
- $(SED) -n '/Begin initial values for man page substitution/,/End initial values for man page substitution/{;p;}' $(top_srcdir)/configure.ac | $(SED) -e '/^#/d' -e 's/^/s#@/' -e 's/=[\\"]*/@#/' -e 's/[\\"]*$$/#g/' >> $@; \
- fi
-
$(srcdir)/sudo.man.in: $(srcdir)/sudo.mdoc.in $(srcdir)/sudo.man.in.sed
@if [ -n "$(DEVEL)" ]; then \
echo "Generating $@"; \
@@ -149,12 +141,6 @@ $(mansrcdir)/sudo.man: $(top_builddir)/config.status $(srcdir)/sudo.man.in fixma
$(mansrcdir)/sudo.mdoc: $(top_builddir)/config.status $(srcdir)/sudo.mdoc.in
cd $(top_builddir) && $(SHELL) config.status --file=doc/$@
-$(srcdir)/sudo.cat: varsub $(srcdir)/sudo.mdoc.in
- @if [ -n "$(DEVEL)" ]; then \
- echo "Generating $@"; \
- $(SED) -f varsub $(srcdir)/sudo.mdoc.in | $(MANDOC) -Tascii -mdoc | $(SED) -e 's/(5)/(4)/g' -e 's/(8)/(1m)/g' > $@; \
- fi
-
$(srcdir)/visudo.man.in: $(srcdir)/visudo.mdoc.in
@if [ -n "$(DEVEL)" ]; then \
echo "Generating $@"; \
@@ -169,18 +155,12 @@ $(mansrcdir)/visudo.man: $(top_builddir)/config.status $(srcdir)/visudo.man.in f
$(mansrcdir)/visudo.mdoc: $(top_builddir)/config.status $(srcdir)/visudo.mdoc.in
cd $(top_builddir) && $(SHELL) config.status --file=doc/$@
-$(srcdir)/visudo.cat: varsub $(srcdir)/visudo.mdoc.in
- @if [ -n "$(DEVEL)" ]; then \
- echo "Generating $@"; \
- $(SED) -f varsub $(srcdir)/visudo.mdoc.in | $(MANDOC) -Tascii -mdoc | $(SED) -e 's/(5)/(4)/g' -e 's/(8)/(1m)/g' > $@; \
- fi
-
$(srcdir)/sudo.conf.man.in: $(srcdir)/sudo.conf.mdoc.in
@if [ -n "$(DEVEL)" ]; then \
echo "Generating $@"; \
mansectsu=`echo @MANSECTSU@|$(TR) A-Z a-z`; \
mansectform=`echo @MANSECTFORM@|$(TR) A-Z a-z`; \
- $(SED) -e "s/$$mansectsu/8/g" -e "s/$$mansectform/5/g" $(srcdir)/sudo.conf.mdoc.in | $(MANDOC) -Tman | $(SED) -e 's/^\(\.TH "SUDO.CONF" \)"5"\(.*\)/\1"'$$mansectform'"\2/' -e "s/(5)/($$mansectform)/g" -e "s/(8)/($$mansectsu)/g" > $@; \
+ $(SED) -e 's/^\(\.nr [A-Z][A-Z]\) .[A-Z][A-Z]MAN./\1 1/' -e "s/$$mansectsu/8/g" -e "s/$$mansectform/5/g" $(srcdir)/sudo.conf.mdoc.in | $(MANDOC) -Tman | $(SED) -e 's/^\(\.TH "SUDO.CONF" \)"5"\(.*\)/\1"'$$mansectform'"\2/' -e "s/(5)/($$mansectform)/g" -e "s/(8)/($$mansectsu)/g" -f $(srcdir)/sudo.conf.man.in.sed > $@; \
fi
$(mansrcdir)/sudo.conf.man: $(top_builddir)/config.status $(srcdir)/sudo.conf.man.in fixman.sed
@@ -189,12 +169,6 @@ $(mansrcdir)/sudo.conf.man: $(top_builddir)/config.status $(srcdir)/sudo.conf.ma
$(mansrcdir)/sudo.conf.mdoc: $(top_builddir)/config.status $(srcdir)/sudo.conf.mdoc.in
cd $(top_builddir) && $(SHELL) config.status --file=doc/$@
-$(srcdir)/sudo.conf.cat: varsub $(srcdir)/sudo.conf.mdoc.in
- @if [ -n "$(DEVEL)" ]; then \
- echo "Generating $@"; \
- $(SED) -f varsub $(srcdir)/sudo.conf.mdoc.in | $(MANDOC) -Tascii -mdoc | $(SED) -e 's/(5)/(4)/g' -e 's/(8)/(1m)/g' > $@; \
- fi
-
$(srcdir)/sudoers.man.in: $(srcdir)/sudoers.mdoc.in $(srcdir)/sudoers.man.in.sed
@if [ -n "$(DEVEL)" ]; then \
echo "Generating $@"; \
@@ -209,12 +183,6 @@ $(mansrcdir)/sudoers.man: $(top_builddir)/config.status $(srcdir)/sudoers.man.in
$(mansrcdir)/sudoers.mdoc: $(top_builddir)/config.status $(srcdir)/sudoers.mdoc.in $(srcdir)/fixmdoc.sed
(cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/sudoers.mdoc.in | $(SED) -f $(srcdir)/fixmdoc.sed > $@
-$(srcdir)/sudoers.cat: varsub $(srcdir)/sudoers.mdoc.in
- @if [ -n "$(DEVEL)" ]; then \
- echo "Generating $@"; \
- $(SED) -f varsub $(srcdir)/sudoers.mdoc.in | $(MANDOC) -Tascii -mdoc | $(SED) -e 's/(5)/(4)/g' -e 's/(8)/(1m)/g' > $@; \
- fi
-
$(srcdir)/sudoers.ldap.man.in: $(srcdir)/sudoers.ldap.mdoc.in
@if [ -n "$(DEVEL)" ]; then \
echo "Generating $@"; \
@@ -229,12 +197,6 @@ $(mansrcdir)/sudoers.ldap.man: $(top_builddir)/config.status $(srcdir)/sudoers.l
$(mansrcdir)/sudoers.ldap.mdoc: $(top_builddir)/config.status $(srcdir)/sudoers.ldap.mdoc.in
cd $(top_builddir) && $(SHELL) config.status --file=doc/$@
-$(srcdir)/sudoers.ldap.cat: varsub $(srcdir)/sudoers.ldap.mdoc.in
- @if [ -n "$(DEVEL)" ]; then \
- echo "Generating $@"; \
- $(SED) -f varsub $(srcdir)/sudoers.ldap.mdoc.in | $(MANDOC) -Tascii -mdoc | $(SED) -e 's/(5)/(4)/g' -e 's/(8)/(1m)/g' > $@; \
- fi
-
$(srcdir)/sudoers_timestamp.man.in: $(srcdir)/sudoers_timestamp.mdoc.in
@if [ -n "$(DEVEL)" ]; then \
echo "Generating $@"; \
@@ -249,12 +211,6 @@ $(mansrcdir)/sudoers_timestamp.man: $(top_builddir)/config.status $(srcdir)/sudo
$(mansrcdir)/sudoers_timestamp.mdoc: $(top_builddir)/config.status $(srcdir)/sudoers_timestamp.mdoc.in
cd $(top_builddir) && $(SHELL) config.status --file=doc/$@
-$(srcdir)/sudoers_timestamp.cat: varsub $(srcdir)/sudoers_timestamp.mdoc.in
- @if [ -n "$(DEVEL)" ]; then \
- echo "Generating $@"; \
- $(SED) -f varsub $(srcdir)/sudoers_timestamp.mdoc.in | $(MANDOC) -Tascii -mdoc | $(SED) -e 's/(5)/(4)/g' -e 's/(8)/(1m)/g' > $@; \
- fi
-
$(srcdir)/cvtsudoers.man.in: $(srcdir)/cvtsudoers.mdoc.in
@if [ -n "$(DEVEL)" ]; then \
echo "Generating $@"; \
@@ -269,12 +225,6 @@ $(mansrcdir)/cvtsudoers.man: $(top_builddir)/config.status $(srcdir)/cvtsudoers.
$(mansrcdir)/cvtsudoers.mdoc: $(top_builddir)/config.status $(srcdir)/cvtsudoers.mdoc.in
cd $(top_builddir) && $(SHELL) config.status --file=doc/$@
-$(srcdir)/cvtsudoers.cat: varsub $(srcdir)/cvtsudoers.mdoc.in
- @if [ -n "$(DEVEL)" ]; then \
- echo "Generating $@"; \
- $(SED) -f varsub $(srcdir)/cvtsudoers.mdoc.in | $(MANDOC) -Tascii -mdoc | $(SED) -e 's/(5)/(4)/g' -e 's/(8)/(1m)/g' > $@; \
- fi
-
$(srcdir)/sudoreplay.man.in: $(srcdir)/sudoreplay.mdoc.in
@if [ -n "$(DEVEL)" ]; then \
echo "Generating $@"; \
@@ -289,12 +239,6 @@ $(mansrcdir)/sudoreplay.man: $(top_builddir)/config.status $(srcdir)/sudoreplay.
$(mansrcdir)/sudoreplay.mdoc: $(top_builddir)/config.status $(srcdir)/sudoreplay.mdoc.in
cd $(top_builddir) && $(SHELL) config.status --file=doc/$@
-$(srcdir)/sudoreplay.cat: varsub $(srcdir)/sudoreplay.mdoc.in
- @if [ -n "$(DEVEL)" ]; then \
- echo "Generating $@"; \
- $(SED) -f varsub $(srcdir)/sudoreplay.mdoc.in | $(MANDOC) -Tascii -mdoc | $(SED) -e 's/(5)/(4)/g' -e 's/(8)/(1m)/g' > $@; \
- fi
-
$(srcdir)/sudo_plugin.man.in: $(srcdir)/sudo_plugin.mdoc.in
@if [ -n "$(DEVEL)" ]; then \
echo "Generating $@"; \
@@ -309,12 +253,6 @@ $(mansrcdir)/sudo_plugin.man: $(top_builddir)/config.status $(srcdir)/sudo_plugi
$(mansrcdir)/sudo_plugin.mdoc: $(top_builddir)/config.status $(srcdir)/sudo_plugin.mdoc.in
cd $(top_builddir) && $(SHELL) config.status --file=doc/$@
-$(srcdir)/sudo_plugin.cat: varsub $(srcdir)/sudo_plugin.mdoc.in
- @if [ -n "$(DEVEL)" ]; then \
- echo "Generating $@"; \
- $(SED) -f varsub $(srcdir)/sudo_plugin.mdoc.in | $(MANDOC) -Tascii -mdoc | $(SED) -e 's/(5)/(4)/g' -e 's/(8)/(1m)/g' > $@; \
- fi
-
pre-install:
install: install-doc
@@ -381,7 +319,7 @@ pvs-studio:
check:
clean:
- -rm -f varsub fixman.sed
+ -rm -f fixman.sed
mostlyclean: clean
diff --git a/doc/TROUBLESHOOTING b/doc/TROUBLESHOOTING
index 3bb6f14..bc7f1a6 100644
--- a/doc/TROUBLESHOOTING
+++ b/doc/TROUBLESHOOTING
@@ -112,15 +112,34 @@ A) You can specify the editor to use in visudo in the sudoers file.
The defaults can also be set at configure time using the
--with-editor and --with-env-editor configure options.
-Q) Sudo appears to be removing some variables from my environment, why?
-A) By default, sudo runs commands with new, minimal environment.
- It is possible to control what environment variables are copied
- from the invoking user's environment using the "env_keep" setting
- in sudoers. Another, less secure, option is to disable the
- "env_reset" setting to copy all variables from the invoking
- user's environment that are not considered "dangerous". See the
- "Command Environment" section of the sudoers manual for more
- information.
+Q) Sudo appears to be removing some variables from the environment, why?
+A) By default, sudo runs commands with a new, minimal environment.
+ The "env_keep" setting in sudoers can be used to control which
+ environment variables are preserved from the invoking user's
+ environment via the "env_keep" setting in sudoers.
+
+ While it is possible to disable the "env_reset" setting, which
+ will preserve all environment variables that don't match a black
+ list, doing so is strongly discouraged. See the "Command
+ environment" section of the sudoers manual for more information.
+
+Q) Why does sudo reset the HOME environment variable?
+A) Many programs use the HOME environment variable to locate
+ configuration and data files. Often, these configuration files
+ are treated as trusted input that affects how the program operates.
+ By controlling the configuration files, a user may be able to
+ cause the program to execute other commands without sudo's
+ restrictions or logging.
+
+ Some programs perform extra checks when the real and effective
+ user-IDs differ, but because sudo runs commands with all user-IDs
+ set to the target user, these checks are insufficient.
+
+ While it is possible to preserve the value of the HOME environment
+ variable by adding it to the "env_keep" list in the sudoers file,
+ doing so is strongly discouraged. Users wishing to edit files
+ with sudo should run sudoedit (or sudo -e) to get their accustomed
+ editor configuration instead of invoking the editor directly.
Q) How can I keep sudo from asking for a password?
A) To specify this on a per-user (and per-command) basis, use the
@@ -192,12 +211,21 @@ A) The default user sudo tries to run things as is always root, even if
would achieve the desired result for the preceding sudoers fragment.
Q) When I try to run sudo via ssh, I get the error:
- sudo: no tty present and no askpass program specified
-A) ssh does not allocate a tty by default when running a remote command.
- Without a tty, sudo cannot disable echo when prompting for a password.
- You can use ssh's "-t" option to force it to allocate a tty.
- Alternately, if you do not mind your password being echoed to the
- screen, you can use the "visiblepw" sudoers option to allow this.
+ sudo: a terminal is required to read the password; either use the -S
+ option to read from standard input or configure an askpass helper
+A) If sudo needs to authenticate a user, it requires access to the user's
+ terminal to disable echo so the password is not displayed to the screen.
+ The above message indicates that no terminal was present.
+
+ When running a command via ssh, a terminal is not allocated by default
+ which can cause this message. The "-t" option to ssh will force it to
+ allocate a tty. Alternately, you may be able to use the ssh-askpass
+ utility to prompt for the password if X11 forwarding is enabled and an
+ askpass helper is configured in the sudo.conf file. If you do not mind
+ your password being echoed to the screen, you may use sudo's -S option
+ to read the password from the standard input. Alternately, you may set
+ the "visiblepw" sudoers option which will allow the password to be entered
+ even when echo cannot be disabled, though this is not recommended.
Q) When I try to use SSL-enabled LDAP with sudo I get an error:
unable to initialize SSL cert and key db: security library: bad database.
@@ -219,21 +247,6 @@ A) On systems that use a Mozilla-derived LDAP SDK there must be a
Enter new password: <return>
Re-enter password: <return>
-Q) On Solaris, when I run command via sudo it displays information
- about the last login for every command. How can I fix this?
-A) This output comes from /usr/lib/security/pam_unix_session.so.1.
- To suppress it, first create /etc/pam.d/sudo if it doesn't exist:
- cp /etc/pam.d/other /etc/pam.d/sudo
- Then add "nowarn" to the end of the pam_unix_session.so.1 line:
- session required pam_unix_session.so.1 nowarm
-
-Q) On HP-UX, when I run command via sudo it displays information
- about the last successful login and last authentication failure
- for every command. How can I fix this?
-A) This output comes from /usr/lib/security/libpam_hpsec.so.1.
- To suppress it, add a line like the following to /etc/pam.conf:
- sudo session required libpam_hpsec.so.1 bypass_umask bypass_last_login
-
Q) On HP-UX, the umask setting in sudoers has no effect.
A) If your /etc/pam.conf file has the libpam_hpsec.so.1 session module
enabled, you may need to a add line like the following to pam.conf:
@@ -242,7 +255,7 @@ A) If your /etc/pam.conf file has the libpam_hpsec.so.1 session module
Q) When I run "sudo -i shell_alias" I get "command not found" even
though the alias is defined in my shell startup files.
A) Commands run via "sudo -i" are executed by the shell in
- non-interactive mode. The bash shell will ony parse aliases in
+ non-interactive mode. The bash shell will only parse aliases in
interactive mode unless the "expand_aliases" shell option is
set. If you add "shopt -s expand_aliases" to your .bash_profile
(or .profile if using that instead) the aliases should now be
diff --git a/doc/UPGRADE b/doc/UPGRADE
index 1b787c1..58d4e51 100644
--- a/doc/UPGRADE
+++ b/doc/UPGRADE
@@ -1,6 +1,18 @@
Notes on upgrading from an older release
========================================
+o Upgrading from a version prior to 1.8.28:
+
+ Starting with version 1.8.28, sudo stores the signal that caused
+ a command to be suspended or resumed as a string in the I/O log
+ timing file. The version of sudoreplay included with sudo
+ 1.8.28 can process either type of I/O log file but older versions
+ of sudoreplay are unable to replay the newer logs.
+
+ Starting with version 1.8.28, sudoedit honors the umask and
+ umask_override settings in sudoers. Previously, the user's
+ umask was used as-is.
+
o Upgrading from a version prior to 1.8.26:
Starting with version 1.8.26, sudo no long sets the USERNAME
diff --git a/doc/cvtsudoers.cat b/doc/cvtsudoers.cat
deleted file mode 100644
index d6fcbe3..0000000
--- a/doc/cvtsudoers.cat
+++ /dev/null
@@ -1,282 +0,0 @@
-CVTSUDOERS(1) General Commands Manual CVTSUDOERS(1)
-
-NNAAMMEE
- ccvvttssuuddooeerrss - convert between sudoers file formats
-
-SSYYNNOOPPSSIISS
- ccvvttssuuddooeerrss [--eehhMMppVV] [--bb _d_n] [--cc _c_o_n_f___f_i_l_e] [--dd _d_e_f_t_y_p_e_s]
- [--ff _o_u_t_p_u_t___f_o_r_m_a_t] [--ii _i_n_p_u_t___f_o_r_m_a_t] [--II _i_n_c_r_e_m_e_n_t]
- [--mm _f_i_l_t_e_r] [--oo _o_u_t_p_u_t___f_i_l_e] [--OO _s_t_a_r_t___p_o_i_n_t] [--PP _p_a_d_d_i_n_g]
- [--ss _s_e_c_t_i_o_n_s] [_i_n_p_u_t___f_i_l_e]
-
-DDEESSCCRRIIPPTTIIOONN
- ccvvttssuuddooeerrss can be used to convert between _s_u_d_o_e_r_s security policy file
- formats. The default input format is sudoers. The default output format
- is LDIF. It is only possible to convert a _s_u_d_o_e_r_s file that is
- syntactically correct.
-
- If no _i_n_p_u_t___f_i_l_e is specified, or if it is `-', the policy is read from
- the standard input. By default, the result is written to the standard
- output.
-
- The options are as follows:
-
- --bb _d_n, ----bbaassee=_d_n
- The base DN (distinguished name) that will be used when
- performing LDAP queries. Typically this is of the form
- ou=SUDOers,dc=my-domain,dc=com for the domain my-domain.com.
- If this option is not specified, the value of the
- SUDOERS_BASE environment variable will be used instead. Only
- necessary when converting to LDIF format.
-
- --cc _c_o_n_f___f_i_l_e, ----ccoonnffiigg=_c_o_n_f___f_i_l_e
- Specify the path to the configuration file. Defaults to
- _/_e_t_c_/_c_v_t_s_u_d_o_e_r_s_._c_o_n_f.
-
- --dd _d_e_f_t_y_p_e_s, ----ddeeffaauullttss=_d_e_f_t_y_p_e_s
- Only convert Defaults entries of the specified types. One or
- more Defaults types may be specified, separated by a comma
- (`,'). The supported types are:
-
- all All Defaults entries.
-
- global Global Defaults entries that are applied regardless
- of user, runas, host or command.
-
- user Per-user Defaults entries.
-
- runas Per-runas user Defaults entries.
-
- host Per-host Defaults entries.
-
- command Per-command Defaults entries.
-
- See the DDeeffaauullttss section in sudoers(4) for more information.
-
- If the --dd option is not specified, all Defaults entries will
- be converted.
-
- --ee, ----eexxppaanndd--aalliiaasseess
- Expand aliases in _i_n_p_u_t___f_i_l_e. Aliases are preserved by
- default when the output _f_o_r_m_a_t is JSON or sudoers.
-
- --ff _o_u_t_p_u_t___f_o_r_m_a_t, ----oouuttppuutt--ffoorrmmaatt=_o_u_t_p_u_t___f_o_r_m_a_t
- Specify the output format (case-insensitive). The following
- formats are supported:
-
- JSON JSON (JavaScript Object Notation) files are usually
- easier for third-party applications to consume than
- the traditional _s_u_d_o_e_r_s format. The various values
- have explicit types which removes much of the
- ambiguity of the _s_u_d_o_e_r_s format.
-
- LDIF LDIF (LDAP Data Interchange Format) files can be
- imported into an LDAP server for use with
- sudoers.ldap(4).
-
- Conversion to LDIF has the following limitations:
-
- ++oo Command, host, runas and user-specific Defaults
- lines cannot be translated as they don't have an
- equivalent in the sudoers LDAP schema.
-
- ++oo Command, host, runas and user aliases are not
- supported by the sudoers LDAP schema so they are
- expanded during the conversion.
-
- sudoers Traditional sudoers format. A new sudoers file
- will be reconstructed from the parsed input file.
- Comments are not preserved and data from any
- include files will be output inline.
-
- --hh, ----hheellpp Display a short help message to the standard output and exit.
-
- --ii _i_n_p_u_t___f_o_r_m_a_t, ----iinnppuutt--ffoorrmmaatt=_i_n_p_u_t___f_o_r_m_a_t
- Specify the input format. The following formats are
- supported:
-
- LDIF LDIF (LDAP Data Interchange Format) files can be
- exported from an LDAP server to convert security
- policies used by sudoers.ldap(4). If a base DN
- (distinguished name) is specified, only sudoRole
- objects that match the base DN will be processed.
- Not all sudoOptions specified in a sudoRole can be
- translated from LDIF to sudoers format.
-
- sudoers Traditional sudoers format. This is the default
- input format.
-
- --II _i_n_c_r_e_m_e_n_t, ----iinnccrreemmeenntt=_i_n_c_r_e_m_e_n_t
- When generating LDIF output, increment each sudoOrder
- attribute by the specified number. Defaults to an increment
- of 1.
-
- --mm _f_i_l_t_e_r, ----mmaattcchh=_f_i_l_t_e_r
- Only output rules that match the specified _f_i_l_t_e_r. A _f_i_l_t_e_r
- expression is made up of one or more kkeeyy == _v_a_l_u_e pairs,
- separated by a comma (`,'). The kkeeyy may be "user", "group"
- or "host". For example, uusseerr = _o_p_e_r_a_t_o_r or hhoosstt = _w_w_w. An
- upper-case User_Alias or Host_Alias may be specified as the
- "user" or "host".
-
- A matching _s_u_d_o_e_r_s rule may also include users, groups and
- hosts that are not part of the _f_i_l_t_e_r. This can happen when
- a rule includes multiple users, groups or hosts. To prune
- out any non-matching user, group or host from the rules, the
- --pp option may be used.
-
- By default, the password and group databases are not
- consulted when matching against the filter so the users and
- groups do not need to be present on the local system (see the
- --MM option). Only aliases that are referenced by the filtered
- policy rules will be displayed.
-
- --MM, ----mmaattcchh--llooccaall
- When the --mm option is also specified, use password and group
- database information when matching users and groups in the
- filter. Only users and groups in the filter that exist on
- the local system will match, and a user's groups will
- automatically be added to the filter. If the --MM is _n_o_t
- specified, users and groups in the filter do not need to
- exist on the local system, but all groups used for matching
- must be explicitly listed in the filter.
-
- --oo _o_u_t_p_u_t___f_i_l_e, ----oouuttppuutt=_o_u_t_p_u_t___f_i_l_e
- Write the converted output to _o_u_t_p_u_t___f_i_l_e. If no _o_u_t_p_u_t___f_i_l_e
- is specified, or if it is `-', the converted _s_u_d_o_e_r_s policy
- will be written to the standard output.
-
- --OO _s_t_a_r_t___p_o_i_n_t, ----oorrddeerr--ssttaarrtt=_s_t_a_r_t___p_o_i_n_t
- When generating LDIF output, use the number specified by
- _s_t_a_r_t___p_o_i_n_t in the sudoOrder attribute of the first sudoRole
- object. Subsequent sudoRole object use a sudoOrder value
- generated by adding an _i_n_c_r_e_m_e_n_t, see the --II option for
- details. Defaults to a starting point of 1. A starting
- point of 0 will disable the generation of sudoOrder
- attributes in the resulting LDIF file.
-
- --pp, ----pprruunnee--mmaattcchheess
- When the --mm option is also specified, ccvvttssuuddooeerrss will prune
- out non-matching users, groups and hosts from matching
- entries.
-
- --PP _p_a_d_d_i_n_g, ----ppaaddddiinngg=_p_a_d_d_i_n_g
- When generating LDIF output, construct the initial sudoOrder
- value by concatenating _o_r_d_e_r___s_t_a_r_t and _i_n_c_r_e_m_e_n_t, padding the
- _i_n_c_r_e_m_e_n_t with zeros until it consists of _p_a_d_d_i_n_g digits.
- For example, if _o_r_d_e_r___s_t_a_r_t is 1027, _p_a_d_d_i_n_g is 3, and
- _i_n_c_r_e_m_e_n_t is 1, the value of sudoOrder for the first entry
- will be 1027000, followed by 1027001, 1027002, etc. If the
- number of sudoRole entries is larger than the padding would
- allow, ccvvttssuuddooeerrss will exit with an error. By default, no
- padding is performed.
-
- --ss _s_e_c_t_i_o_n_s, ----ssuupppprreessss=_s_e_c_t_i_o_n_s
- Suppress the output of specific _s_e_c_t_i_o_n_s of the security
- policy. One or more section names may be specified,
- separated by a comma (`,'). The supported section name are:
- ddeeffaauullttss, aalliiaasseess and pprriivviilleeggeess (which may be shortened to
- pprriivvss).
-
- --VV, ----vveerrssiioonn
- Print the ccvvttssuuddooeerrss and _s_u_d_o_e_r_s grammar versions and exit.
-
- Options in the form "keyword = value" may also be specified in a
- configuration file, _/_e_t_c_/_c_v_t_s_u_d_o_e_r_s_._c_o_n_f by default. The following
- keywords are recognized:
-
- ddeeffaauullttss == _d_e_f_t_y_p_e_s
- See the description of the --dd command line option.
-
- eexxppaanndd__aalliiaasseess == _y_e_s | _n_o
- See the description of the --ee command line option.
-
- iinnppuutt__ffoorrmmaatt == _l_d_i_f | _s_u_d_o_e_r_s
- See the description of the --ii command line option.
-
- mmaattcchh == _f_i_l_t_e_r
- See the description of the --mm command line option.
-
- oorrddeerr__iinnccrreemmeenntt == _i_n_c_r_e_m_e_n_t
- See the description of the --II command line option.
-
- oorrddeerr__ssttaarrtt == _s_t_a_r_t___p_o_i_n_t
- See the description of the --OO command line option.
-
- oouuttppuutt__ffoorrmmaatt == _j_s_o_n | _l_d_i_f | _s_u_d_o_e_r_s
- See the description of the --ff command line option.
-
- ppaaddddiinngg == _p_a_d_d_i_n_g
- See the description of the --PP command line option.
-
- pprruunnee__mmaattcchheess == _y_e_s | _n_o
- See the description of the --pp command line option.
-
- ssuuddooeerrss__bbaassee == _d_n
- See the description of the --bb command line option.
-
- ssuupppprreessss == _s_e_c_t_i_o_n_s
- See the description of the --ss command line option.
-
- Options on the command line will override values from the configuration
- file.
-
-FFIILLEESS
- _/_e_t_c_/_c_v_t_s_u_d_o_e_r_s_._c_o_n_f default configuration for cvtsudoers
-
-EEXXAAMMPPLLEESS
- Convert _/_e_t_c_/_s_u_d_o_e_r_s to LDIF (LDAP Data Interchange Format) where the
- _l_d_a_p_._c_o_n_f file uses a _s_u_d_o_e_r_s___b_a_s_e of my-domain,dc=com, storing the
- result in _s_u_d_o_e_r_s_._l_d_i_f:
-
- $ cvtsudoers -b ou=SUDOers,dc=my-domain,dc=com -o sudoers.ldif \
- /etc/sudoers
-
- Convert _/_e_t_c_/_s_u_d_o_e_r_s to JSON format, storing the result in _s_u_d_o_e_r_s_._j_s_o_n:
-
- $ cvtsudoers -f json -o sudoers.json /etc/sudoers
-
- Parse _/_e_t_c_/_s_u_d_o_e_r_s and display only rules that match user _a_m_b_r_o_s_e on host
- _h_a_s_t_u_r:
-
- $ cvtsudoers -f sudoers -m user=ambrose,host=hastur /etc/sudoers
-
- Same as above, but expand aliases and prune out any non-matching users
- and hosts from the expanded entries.
-
- $ cvtsudoers -ep -f sudoers -m user=ambrose,host=hastur /etc/sudoers
-
- Convert _s_u_d_o_e_r_s_._l_d_i_f from LDIF to traditional _s_u_d_o_e_r_s format:
-
- $ cvtsudoers -i ldif -f sudoers -o sudoers.new sudoers.ldif
-
-SSEEEE AALLSSOO
- sudoers(4), sudoers.ldap(4), sudo(1m)
-
-AAUUTTHHOORRSS
- Many people have worked on ssuuddoo over the years; this version consists of
- code written primarily by:
-
- Todd C. Miller
-
- See the CONTRIBUTORS file in the ssuuddoo distribution
- (https://www.sudo.ws/contributors.html) for an exhaustive list of people
- who have contributed to ssuuddoo.
-
-BBUUGGSS
- If you feel you have found a bug in ccvvttssuuddooeerrss, please submit a bug
- report at https://bugzilla.sudo.ws/
-
-SSUUPPPPOORRTT
- Limited free support is available via the sudo-users mailing list, see
- https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search
- the archives.
-
-DDIISSCCLLAAIIMMEERR
- ccvvttssuuddooeerrss is provided "AS IS" and any express or implied warranties,
- including, but not limited to, the implied warranties of merchantability
- and fitness for a particular purpose are disclaimed. See the LICENSE
- file distributed with ssuuddoo or https://www.sudo.ws/license.html for
- complete details.
-
-Sudo 1.8.26 December 11, 2018 Sudo 1.8.26
diff --git a/doc/cvtsudoers.man.in b/doc/cvtsudoers.man.in
index 41929ea..f1a8e91 100644
--- a/doc/cvtsudoers.man.in
+++ b/doc/cvtsudoers.man.in
@@ -1,5 +1,7 @@
.\" Automatically generated from an mdoc input file. Do not edit.
.\"
+.\" SPDX-License-Identifier: ISC
+.\"
.\" Copyright (c) 2018 Todd C. Miller <Todd.Miller@sudo.ws>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
diff --git a/doc/cvtsudoers.mdoc.in b/doc/cvtsudoers.mdoc.in
index ce5d4c3..b24f363 100644
--- a/doc/cvtsudoers.mdoc.in
+++ b/doc/cvtsudoers.mdoc.in
@@ -1,4 +1,6 @@
.\"
+.\" SPDX-License-Identifier: ISC
+.\"
.\" Copyright (c) 2018 Todd C. Miller <Todd.Miller@sudo.ws>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
diff --git a/doc/fixman.sh b/doc/fixman.sh
index f7ed1a8..c22b58c 100755
--- a/doc/fixman.sh
+++ b/doc/fixman.sh
@@ -1,5 +1,7 @@
#!/bin/sh
#
+# SPDX-License-Identifier: ISC
+#
# Copyright (c) 2012-2014, 2017 Todd C. Miller <Todd.Miller@sudo.ws>
#
# Permission to use, copy, modify, and distribute this software for any
diff --git a/doc/sudo.cat b/doc/sudo.cat
deleted file mode 100644
index 6d7671b..0000000
--- a/doc/sudo.cat
+++ /dev/null
@@ -1,741 +0,0 @@
-SUDO(1m) System Manager's Manual SUDO(1m)
-
-NNAAMMEE
- ssuuddoo, ssuuddooeeddiitt - execute a command as another user
-
-SSYYNNOOPPSSIISS
- ssuuddoo --hh | --KK | --kk | --VV
- ssuuddoo --vv [--AAkknnSS] [--aa _t_y_p_e] [--gg _g_r_o_u_p] [--hh _h_o_s_t] [--pp _p_r_o_m_p_t] [--uu _u_s_e_r]
- ssuuddoo --ll [--AAkknnSS] [--aa _t_y_p_e] [--gg _g_r_o_u_p] [--hh _h_o_s_t] [--pp _p_r_o_m_p_t] [--UU _u_s_e_r]
- [--uu _u_s_e_r] [_c_o_m_m_a_n_d]
- ssuuddoo [--AAbbEEHHnnPPSS] [--aa _t_y_p_e] [--CC _n_u_m] [--cc _c_l_a_s_s] [--gg _g_r_o_u_p] [--hh _h_o_s_t]
- [--pp _p_r_o_m_p_t] [--rr _r_o_l_e] [--tt _t_y_p_e] [--TT _t_i_m_e_o_u_t] [--uu _u_s_e_r] [_V_A_R=_v_a_l_u_e]
- [--ii | --ss] [_c_o_m_m_a_n_d]
- ssuuddooeeddiitt [--AAkknnSS] [--aa _t_y_p_e] [--CC _n_u_m] [--cc _c_l_a_s_s] [--gg _g_r_o_u_p] [--hh _h_o_s_t]
- [--pp _p_r_o_m_p_t] [--TT _t_i_m_e_o_u_t] [--uu _u_s_e_r] _f_i_l_e _._._.
-
-DDEESSCCRRIIPPTTIIOONN
- ssuuddoo allows a permitted user to execute a _c_o_m_m_a_n_d as the superuser or
- another user, as specified by the security policy. The invoking user's
- real (_n_o_t effective) user ID is used to determine the user name with
- which to query the security policy.
-
- ssuuddoo supports a plugin architecture for security policies and
- input/output logging. Third parties can develop and distribute their own
- policy and I/O logging plugins to work seamlessly with the ssuuddoo front
- end. The default security policy is _s_u_d_o_e_r_s, which is configured via the
- file _/_e_t_c_/_s_u_d_o_e_r_s, or via LDAP. See the _P_l_u_g_i_n_s section for more
- information.
-
- The security policy determines what privileges, if any, a user has to run
- ssuuddoo. The policy may require that users authenticate themselves with a
- password or another authentication mechanism. If authentication is
- required, ssuuddoo will exit if the user's password is not entered within a
- configurable time limit. This limit is policy-specific; the default
- password prompt timeout for the _s_u_d_o_e_r_s security policy is 5 minutes.
-
- Security policies may support credential caching to allow the user to run
- ssuuddoo again for a period of time without requiring authentication. The
- _s_u_d_o_e_r_s policy caches credentials for 5 minutes, unless overridden in
- sudoers(4). By running ssuuddoo with the --vv option, a user can update the
- cached credentials without running a _c_o_m_m_a_n_d.
-
- When invoked as ssuuddooeeddiitt, the --ee option (described below), is implied.
-
- Security policies may log successful and failed attempts to use ssuuddoo. If
- an I/O plugin is configured, the running command's input and output may
- be logged as well.
-
- The options are as follows:
-
- --AA, ----aasskkppaassss
- Normally, if ssuuddoo requires a password, it will read it from
- the user's terminal. If the --AA (_a_s_k_p_a_s_s) option is
- specified, a (possibly graphical) helper program is executed
- to read the user's password and output the password to the
- standard output. If the SUDO_ASKPASS environment variable is
- set, it specifies the path to the helper program. Otherwise,
- if sudo.conf(4) contains a line specifying the askpass
- program, that value will be used. For example:
-
- # Path to askpass helper program
- Path askpass /usr/X11R6/bin/ssh-askpass
-
- If no askpass program is available, ssuuddoo will exit with an
- error.
-
- --aa _t_y_p_e, ----aauutthh--ttyyppee=_t_y_p_e
- Use the specified BSD authentication _t_y_p_e when validating the
- user, if allowed by _/_e_t_c_/_l_o_g_i_n_._c_o_n_f. The system
- administrator may specify a list of sudo-specific
- authentication methods by adding an "auth-sudo" entry in
- _/_e_t_c_/_l_o_g_i_n_._c_o_n_f. This option is only available on systems
- that support BSD authentication.
-
- --bb, ----bbaacckkggrroouunndd
- Run the given command in the background. Note that it is not
- possible to use shell job control to manipulate background
- processes started by ssuuddoo. Most interactive commands will
- fail to work properly in background mode.
-
- --CC _n_u_m, ----cclloossee--ffrroomm=_n_u_m
- Close all file descriptors greater than or equal to _n_u_m
- before executing a command. Values less than three are not
- permitted. By default, ssuuddoo will close all open file
- descriptors other than standard input, standard output and
- standard error when executing a command. The security policy
- may restrict the user's ability to use this option. The
- _s_u_d_o_e_r_s policy only permits use of the --CC option when the
- administrator has enabled the _c_l_o_s_e_f_r_o_m___o_v_e_r_r_i_d_e option.
-
- --cc _c_l_a_s_s, ----llooggiinn--ccllaassss=_c_l_a_s_s
- Run the command with resource limits and scheduling priority
- of the specified login _c_l_a_s_s. The _c_l_a_s_s argument can be
- either a class name as defined in _/_e_t_c_/_l_o_g_i_n_._c_o_n_f, or a
- single `-' character. If _c_l_a_s_s is --, the default login class
- of the target user will be used. Otherwise, the command must
- be run as the superuser (user ID 0), or ssuuddoo must be run from
- a shell that is already running as the superuser. If the
- command is being run as a login shell, additional
- _/_e_t_c_/_l_o_g_i_n_._c_o_n_f settings, such as the umask and environment
- variables, will be applied, if present. This option is only
- available on systems with BSD login classes.
-
- --EE, ----pprreesseerrvvee--eennvv
- Indicates to the security policy that the user wishes to
- preserve their existing environment variables. The security
- policy may return an error if the user does not have
- permission to preserve the environment.
-
- ----pprreesseerrvvee--eennvv==lliisstt
- Indicates to the security policy that the user wishes to add
- the comma-separated list of environment variables to those
- preserved from the user's environment. The security policy
- may return an error if the user does not have permission to
- preserve the environment.
-
- --ee, ----eeddiitt Edit one or more files instead of running a command. In lieu
- of a path name, the string "sudoedit" is used when consulting
- the security policy. If the user is authorized by the
- policy, the following steps are taken:
-
- 1. Temporary copies are made of the files to be edited
- with the owner set to the invoking user.
-
- 2. The editor specified by the policy is run to edit the
- temporary files. The _s_u_d_o_e_r_s policy uses the
- SUDO_EDITOR, VISUAL and EDITOR environment variables
- (in that order). If none of SUDO_EDITOR, VISUAL or
- EDITOR are set, the first program listed in the _e_d_i_t_o_r
- sudoers(4) option is used.
-
- 3. If they have been modified, the temporary files are
- copied back to their original location and the
- temporary versions are removed.
-
- To help prevent the editing of unauthorized files, the
- following restrictions are enforced unless explicitly allowed
- by the security policy:
-
- ++oo Symbolic links may not be edited (version 1.8.15 and
- higher).
-
- ++oo Symbolic links along the path to be edited are not
- followed when the parent directory is writable by the
- invoking user unless that user is root (version 1.8.16
- and higher).
-
- ++oo Files located in a directory that is writable by the
- invoking user may not be edited unless that user is root
- (version 1.8.16 and higher).
-
- Users are never allowed to edit device special files.
-
- If the specified file does not exist, it will be created.
- Note that unlike most commands run by _s_u_d_o, the editor is run
- with the invoking user's environment unmodified. If, for
- some reason, ssuuddoo is unable to update a file with its edited
- version, the user will receive a warning and the edited copy
- will remain in a temporary file.
-
- --gg _g_r_o_u_p, ----ggrroouupp=_g_r_o_u_p
- Run the command with the primary group set to _g_r_o_u_p instead
- of the primary group specified by the target user's password
- database entry. The _g_r_o_u_p may be either a group name or a
- numeric group ID (GID) prefixed with the `#' character (e.g.,
- #0 for GID 0). When running a command as a GID, many shells
- require that the `#' be escaped with a backslash (`\'). If
- no --uu option is specified, the command will be run as the
- invoking user. In either case, the primary group will be set
- to _g_r_o_u_p. The _s_u_d_o_e_r_s policy permits any of the target
- user's groups to be specified via the --gg option as long as
- the --PP option is not in use.
-
- --HH, ----sseett--hhoommee
- Request that the security policy set the HOME environment
- variable to the home directory specified by the target user's
- password database entry. Depending on the policy, this may
- be the default behavior.
-
- --hh, ----hheellpp Display a short help message to the standard output and exit.
-
- --hh _h_o_s_t, ----hhoosstt=_h_o_s_t
- Run the command on the specified _h_o_s_t if the security policy
- plugin supports remote commands. Note that the _s_u_d_o_e_r_s
- plugin does not currently support running remote commands.
- This may also be used in conjunction with the --ll option to
- list a user's privileges for the remote host.
-
- --ii, ----llooggiinn
- Run the shell specified by the target user's password
- database entry as a login shell. This means that login-
- specific resource files such as _._p_r_o_f_i_l_e, _._b_a_s_h___p_r_o_f_i_l_e or
- _._l_o_g_i_n will be read by the shell. If a command is specified,
- it is passed to the shell for execution via the shell's --cc
- option. If no command is specified, an interactive shell is
- executed. ssuuddoo attempts to change to that user's home
- directory before running the shell. The command is run with
- an environment similar to the one a user would receive at log
- in. Note that most shells behave differently when a command
- is specified as compared to an interactive session; consult
- the shell's manual for details. The _C_o_m_m_a_n_d _e_n_v_i_r_o_n_m_e_n_t
- section in the sudoers(4) manual documents how the --ii option
- affects the environment in which a command is run when the
- _s_u_d_o_e_r_s policy is in use.
-
- --KK, ----rreemmoovvee--ttiimmeessttaammpp
- Similar to the --kk option, except that it removes the user's
- cached credentials entirely and may not be used in
- conjunction with a command or other option. This option does
- not require a password. Not all security policies support
- credential caching.
-
- --kk, ----rreesseett--ttiimmeessttaammpp
- When used without a command, invalidates the user's cached
- credentials. In other words, the next time ssuuddoo is run a
- password will be required. This option does not require a
- password and was added to allow a user to revoke ssuuddoo
- permissions from a _._l_o_g_o_u_t file.
-
- When used in conjunction with a command or an option that may
- require a password, this option will cause ssuuddoo to ignore the
- user's cached credentials. As a result, ssuuddoo will prompt for
- a password (if one is required by the security policy) and
- will not update the user's cached credentials.
-
- Not all security policies support credential caching.
-
- --ll, ----lliisstt If no _c_o_m_m_a_n_d is specified, list the allowed (and forbidden)
- commands for the invoking user (or the user specified by the
- --UU option) on the current host. A longer list format is used
- if this option is specified multiple times and the security
- policy supports a verbose output format.
-
- If a _c_o_m_m_a_n_d is specified and is permitted by the security
- policy, the fully-qualified path to the command is displayed
- along with any command line arguments. If a _c_o_m_m_a_n_d is
- specified but not allowed by the policy, ssuuddoo will exit with
- a status value of 1.
-
- --nn, ----nnoonn--iinntteerraaccttiivvee
- Avoid prompting the user for input of any kind. If a
- password is required for the command to run, ssuuddoo will
- display an error message and exit.
-
- --PP, ----pprreesseerrvvee--ggrroouuppss
- Preserve the invoking user's group vector unaltered. By
- default, the _s_u_d_o_e_r_s policy will initialize the group vector
- to the list of groups the target user is a member of. The
- real and effective group IDs, however, are still set to match
- the target user.
-
- --pp _p_r_o_m_p_t, ----pprroommpptt=_p_r_o_m_p_t
- Use a custom password prompt with optional escape sequences.
- The following percent (`%') escape sequences are supported by
- the _s_u_d_o_e_r_s policy:
-
- %H expanded to the host name including the domain name (on
- if the machine's host name is fully qualified or the _f_q_d_n
- option is set in sudoers(4))
-
- %h expanded to the local host name without the domain name
-
- %p expanded to the name of the user whose password is being
- requested (respects the _r_o_o_t_p_w, _t_a_r_g_e_t_p_w, and _r_u_n_a_s_p_w
- flags in sudoers(4))
-
- %U expanded to the login name of the user the command will
- be run as (defaults to root unless the --uu option is also
- specified)
-
- %u expanded to the invoking user's login name
-
- %% two consecutive `%' characters are collapsed into a
- single `%' character
-
- The custom prompt will override the default prompt specified
- by either the security policy or the SUDO_PROMPT environment
- variable. On systems that use PAM, the custom prompt will
- also override the prompt specified by a PAM module unless the
- _p_a_s_s_p_r_o_m_p_t___o_v_e_r_r_i_d_e flag is disabled in _s_u_d_o_e_r_s.
-
- --rr _r_o_l_e, ----rroollee=_r_o_l_e
- Run the command with an SELinux security context that
- includes the specified _r_o_l_e.
-
- --SS, ----ssttddiinn
- Write the prompt to the standard error and read the password
- from the standard input instead of using the terminal device.
-
- --ss, ----sshheellll
- Run the shell specified by the SHELL environment variable if
- it is set or the shell specified by the invoking user's
- password database entry. If a command is specified, it is
- passed to the shell for execution via the shell's --cc option.
- If no command is specified, an interactive shell is executed.
- Note that most shells behave differently when a command is
- specified as compared to an interactive session; consult the
- shell's manual for details.
-
- --tt _t_y_p_e, ----ttyyppee=_t_y_p_e
- Run the command with an SELinux security context that
- includes the specified _t_y_p_e. If no _t_y_p_e is specified, the
- default type is derived from the role.
-
- --UU _u_s_e_r, ----ootthheerr--uusseerr=_u_s_e_r
- Used in conjunction with the --ll option to list the privileges
- for _u_s_e_r instead of for the invoking user. The security
- policy may restrict listing other users' privileges. The
- _s_u_d_o_e_r_s policy only allows root or a user with the ALL
- privilege on the current host to use this option.
-
- --TT _t_i_m_e_o_u_t, ----ccoommmmaanndd--ttiimmeeoouutt=_t_i_m_e_o_u_t
- Used to set a timeout for the command. If the timeout
- expires before the command has exited, the command will be
- terminated. The security policy may restrict the ability to
- set command timeouts. The _s_u_d_o_e_r_s policy requires that user-
- specified timeouts be explicitly enabled.
-
- --uu _u_s_e_r, ----uusseerr=_u_s_e_r
- Run the command as a user other than the default target user
- (usually _r_o_o_t). The _u_s_e_r may be either a user name or a
- numeric user ID (UID) prefixed with the `#' character (e.g.,
- #0 for UID 0). When running commands as a UID, many shells
- require that the `#' be escaped with a backslash (`\'). Some
- security policies may restrict UIDs to those listed in the
- password database. The _s_u_d_o_e_r_s policy allows UIDs that are
- not in the password database as long as the _t_a_r_g_e_t_p_w option
- is not set. Other security policies may not support this.
-
- --VV, ----vveerrssiioonn
- Print the ssuuddoo version string as well as the version string
- of the security policy plugin and any I/O plugins. If the
- invoking user is already root the --VV option will display the
- arguments passed to configure when ssuuddoo was built and plugins
- may display more verbose information such as default options.
-
- --vv, ----vvaalliiddaattee
- Update the user's cached credentials, authenticating the user
- if necessary. For the _s_u_d_o_e_r_s plugin, this extends the ssuuddoo
- timeout for another 5 minutes by default, but does not run a
- command. Not all security policies support cached
- credentials.
-
- ---- The ---- option indicates that ssuuddoo should stop processing
- command line arguments.
-
- Environment variables to be set for the command may also be passed on the
- command line in the form of _V_A_R=_v_a_l_u_e, e.g.,
- LD_LIBRARY_PATH=_/_u_s_r_/_l_o_c_a_l_/_p_k_g_/_l_i_b. Variables passed on the command line
- are subject to restrictions imposed by the security policy plugin. The
- _s_u_d_o_e_r_s policy subjects variables passed on the command line to the same
- restrictions as normal environment variables with one important
- exception. If the _s_e_t_e_n_v option is set in _s_u_d_o_e_r_s, the command to be run
- has the SETENV tag set or the command matched is ALL, the user may set
- variables that would otherwise be forbidden. See sudoers(4) for more
- information.
-
-CCOOMMMMAANNDD EEXXEECCUUTTIIOONN
- When ssuuddoo executes a command, the security policy specifies the execution
- environment for the command. Typically, the real and effective user and
- group and IDs are set to match those of the target user, as specified in
- the password database, and the group vector is initialized based on the
- group database (unless the --PP option was specified).
-
- The following parameters may be specified by security policy:
-
- ++oo real and effective user ID
-
- ++oo real and effective group ID
-
- ++oo supplementary group IDs
-
- ++oo the environment list
-
- ++oo current working directory
-
- ++oo file creation mode mask (umask)
-
- ++oo SELinux role and type
-
- ++oo Solaris project
-
- ++oo Solaris privileges
-
- ++oo BSD login class
-
- ++oo scheduling priority (aka nice value)
-
- PPrroocceessss mmooddeell
- There are two distinct ways ssuuddoo can run a command.
-
- If an I/O logging plugin is configured or if the security policy
- explicitly requests it, a new pseudo-terminal ("pty") is allocated and
- fork(2) is used to create a second ssuuddoo process, referred to as the
- _m_o_n_i_t_o_r. The _m_o_n_i_t_o_r creates a new terminal session with itself as the
- leader and the pty as its controlling terminal, calls fork(2), sets up
- the execution environment as described above, and then uses the execve(2)
- system call to run the command in the child process. The _m_o_n_i_t_o_r exists
- to relay job control signals between the user's existing terminal and the
- pty the command is being run in. This makes it possible to suspend and
- resume the command. Without the monitor, the command would be in what
- POSIX terms an "orphaned process group" and it would not receive any job
- control signals from the kernel. When the command exits or is terminated
- by a signal, the _m_o_n_i_t_o_r passes the command's exit status to the main
- ssuuddoo process and exits. After receiving the command's exit status, the
- main ssuuddoo passes the command's exit status to the security policy's close
- function and exits.
-
- If no pty is used, ssuuddoo calls fork(2), sets up the execution environment
- as described above, and uses the execve(2) system call to run the command
- in the child process. The main ssuuddoo process waits until the command has
- completed, then passes the command's exit status to the security policy's
- close function and exits. As a special case, if the policy plugin does
- not define a close function, ssuuddoo will execute the command directly
- instead of calling fork(2) first. The _s_u_d_o_e_r_s policy plugin will only
- define a close function when I/O logging is enabled, a pty is required,
- or the _p_a_m___s_e_s_s_i_o_n or _p_a_m___s_e_t_c_r_e_d options are enabled. Note that
- _p_a_m___s_e_s_s_i_o_n and _p_a_m___s_e_t_c_r_e_d are enabled by default on systems using PAM.
-
- SSiiggnnaall hhaannddlliinngg
- When the command is run as a child of the ssuuddoo process, ssuuddoo will relay
- signals it receives to the command. The SIGINT and SIGQUIT signals are
- only relayed when the command is being run in a new pty or when the
- signal was sent by a user process, not the kernel. This prevents the
- command from receiving SIGINT twice each time the user enters control-C.
- Some signals, such as SIGSTOP and SIGKILL, cannot be caught and thus will
- not be relayed to the command. As a general rule, SIGTSTP should be used
- instead of SIGSTOP when you wish to suspend a command being run by ssuuddoo.
-
- As a special case, ssuuddoo will not relay signals that were sent by the
- command it is running. This prevents the command from accidentally
- killing itself. On some systems, the reboot(1m) command sends SIGTERM to
- all non-system processes other than itself before rebooting the system.
- This prevents ssuuddoo from relaying the SIGTERM signal it received back to
- reboot(1m), which might then exit before the system was actually rebooted,
- leaving it in a half-dead state similar to single user mode. Note,
- however, that this check only applies to the command run by ssuuddoo and not
- any other processes that the command may create. As a result, running a
- script that calls reboot(1m) or shutdown(1m) via ssuuddoo may cause the system
- to end up in this undefined state unless the reboot(1m) or shutdown(1m) are
- run using the eexxeecc() family of functions instead of ssyysstteemm() (which
- interposes a shell between the command and the calling process).
-
- If no I/O logging plugins are loaded and the policy plugin has not
- defined a cclloossee() function, set a command timeout or required that the
- command be run in a new pty, ssuuddoo may execute the command directly
- instead of running it as a child process.
-
- PPlluuggiinnss
- Plugins may be specified via Plugin directives in the sudo.conf(4) file.
- They may be loaded as dynamic shared objects (on systems that support
- them), or compiled directly into the ssuuddoo binary. If no sudo.conf(4)
- file is present, or it contains no Plugin lines, ssuuddoo will use the
- traditional _s_u_d_o_e_r_s security policy and I/O logging. See the
- sudo.conf(4) manual for details of the _/_e_t_c_/_s_u_d_o_._c_o_n_f file and the
- sudo_plugin(4) manual for more information about the ssuuddoo plugin
- architecture.
-
-EEXXIITT VVAALLUUEE
- Upon successful execution of a command, the exit status from ssuuddoo will be
- the exit status of the program that was executed. If the command
- terminated due to receipt of a signal, ssuuddoo will send itself the same
- signal that terminated the command.
-
- If the --ll option was specified without a command, ssuuddoo will exit with a
- value of 0 if the user is allowed to run ssuuddoo and they authenticated
- successfully (as required by the security policy). If a command is
- specified with the --ll option, the exit value will only be 0 if the
- command is permitted by the security policy, otherwise it will be 1.
-
- If there is an authentication failure, a configuration/permission problem
- or if the given command cannot be executed, ssuuddoo exits with a value of 1.
- In the latter case, the error string is printed to the standard error.
- If ssuuddoo cannot stat(2) one or more entries in the user's PATH, an error
- is printed to the standard error. (If the directory does not exist or if
- it is not really a directory, the entry is ignored and no error is
- printed.) This should not happen under normal circumstances. The most
- common reason for stat(2) to return "permission denied" is if you are
- running an automounter and one of the directories in your PATH is on a
- machine that is currently unreachable.
-
-SSEECCUURRIITTYY NNOOTTEESS
- ssuuddoo tries to be safe when executing external commands.
-
- To prevent command spoofing, ssuuddoo checks "." and "" (both denoting
- current directory) last when searching for a command in the user's PATH
- (if one or both are in the PATH). Note, however, that the actual PATH
- environment variable is _n_o_t modified and is passed unchanged to the
- program that ssuuddoo executes.
-
- Users should _n_e_v_e_r be granted ssuuddoo privileges to execute files that are
- writable by the user or that reside in a directory that is writable by
- the user. If the user can modify or replace the command there is no way
- to limit what additional commands they can run.
-
- Please note that ssuuddoo will normally only log the command it explicitly
- runs. If a user runs a command such as sudo su or sudo sh, subsequent
- commands run from that shell are not subject to ssuuddoo's security policy.
- The same is true for commands that offer shell escapes (including most
- editors). If I/O logging is enabled, subsequent commands will have their
- input and/or output logged, but there will not be traditional logs for
- those commands. Because of this, care must be taken when giving users
- access to commands via ssuuddoo to verify that the command does not
- inadvertently give the user an effective root shell. For more
- information, please see the _P_r_e_v_e_n_t_i_n_g _s_h_e_l_l _e_s_c_a_p_e_s section in
- sudoers(4).
-
- To prevent the disclosure of potentially sensitive information, ssuuddoo
- disables core dumps by default while it is executing (they are re-enabled
- for the command that is run). This historical practice dates from a time
- when most operating systems allowed setuid processes to dump core by
- default. To aid in debugging ssuuddoo crashes, you may wish to re-enable
- core dumps by setting "disable_coredump" to false in the sudo.conf(4)
- file as follows:
-
- Set disable_coredump false
-
- See the sudo.conf(4) manual for more information.
-
-EENNVVIIRROONNMMEENNTT
- ssuuddoo utilizes the following environment variables. The security policy
- has control over the actual content of the command's environment.
-
- EDITOR Default editor to use in --ee (sudoedit) mode if neither
- SUDO_EDITOR nor VISUAL is set.
-
- MAIL Set to the mail spool of the target user when the --ii
- option is specified or when _e_n_v___r_e_s_e_t is enabled in
- _s_u_d_o_e_r_s (unless MAIL is present in the _e_n_v___k_e_e_p list).
-
- HOME Set to the home directory of the target user when the --ii
- or --HH options are specified, when the --ss option is
- specified and _s_e_t___h_o_m_e is set in _s_u_d_o_e_r_s, when
- _a_l_w_a_y_s___s_e_t___h_o_m_e is enabled in _s_u_d_o_e_r_s, or when _e_n_v___r_e_s_e_t
- is enabled in _s_u_d_o_e_r_s and _H_O_M_E is not present in the
- _e_n_v___k_e_e_p list.
-
- LOGNAME Set to the login name of the target user when the --ii
- option is specified, when the _s_e_t___l_o_g_n_a_m_e option is
- enabled in _s_u_d_o_e_r_s or when the _e_n_v___r_e_s_e_t option is
- enabled in _s_u_d_o_e_r_s (unless LOGNAME is present in the
- _e_n_v___k_e_e_p list).
-
- PATH May be overridden by the security policy.
-
- SHELL Used to determine shell to run with --ss option.
-
- SUDO_ASKPASS Specifies the path to a helper program used to read the
- password if no terminal is available or if the --AA option
- is specified.
-
- SUDO_COMMAND Set to the command run by sudo.
-
- SUDO_EDITOR Default editor to use in --ee (sudoedit) mode.
-
- SUDO_GID Set to the group ID of the user who invoked sudo.
-
- SUDO_PROMPT Used as the default password prompt unless the --pp option
- was specified.
-
- SUDO_PS1 If set, PS1 will be set to its value for the program
- being run.
-
- SUDO_UID Set to the user ID of the user who invoked sudo.
-
- SUDO_USER Set to the login name of the user who invoked sudo.
-
- USER Set to the same value as LOGNAME, described above.
-
- VISUAL Default editor to use in --ee (sudoedit) mode if
- SUDO_EDITOR is not set.
-
-FFIILLEESS
- _/_e_t_c_/_s_u_d_o_._c_o_n_f ssuuddoo front end configuration
-
-EEXXAAMMPPLLEESS
- Note: the following examples assume a properly configured security
- policy.
-
- To get a file listing of an unreadable directory:
-
- $ sudo ls /usr/local/protected
-
- To list the home directory of user yaz on a machine where the file system
- holding ~yaz is not exported as root:
-
- $ sudo -u yaz ls ~yaz
-
- To edit the _i_n_d_e_x_._h_t_m_l file as user www:
-
- $ sudoedit -u www ~www/htdocs/index.html
-
- To view system logs only accessible to root and users in the adm group:
-
- $ sudo -g adm more /var/log/syslog
-
- To run an editor as jim with a different primary group:
-
- $ sudoedit -u jim -g audio ~jim/sound.txt
-
- To shut down a machine:
-
- $ sudo shutdown -r +15 "quick reboot"
-
- To make a usage listing of the directories in the /home partition. Note
- that this runs the commands in a sub-shell to make the cd and file
- redirection work.
-
- $ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"
-
-DDIIAAGGNNOOSSTTIICCSS
- Error messages produced by ssuuddoo include:
-
- editing files in a writable directory is not permitted
- By default, ssuuddooeeddiitt does not permit editing a file when any of the
- parent directories are writable by the invoking user. This avoids
- a race condition that could allow the user to overwrite an
- arbitrary file. See the _s_u_d_o_e_d_i_t___c_h_e_c_k_d_i_r option in sudoers(4) for
- more information.
-
- editing symbolic links is not permitted
- By default, ssuuddooeeddiitt does not follow symbolic links when opening
- files. See the _s_u_d_o_e_d_i_t___f_o_l_l_o_w option in sudoers(4) for more
- information.
-
- effective uid is not 0, is sudo installed setuid root?
- ssuuddoo was not run with root privileges. The ssuuddoo binary must be
- owned by the root user and have the Set-user-ID bit set. Also, it
- must not be located on a file system mounted with the `nosuid'
- option or on an NFS file system that maps uid 0 to an unprivileged
- uid.
-
- effective uid is not 0, is sudo on a file system with the 'nosuid' option
- set or an NFS file system without root privileges?
- ssuuddoo was not run with root privileges. The ssuuddoo binary has the
- proper owner and permissions but it still did not run with root
- privileges. The most common reason for this is that the file
- system the ssuuddoo binary is located on is mounted with the `nosuid'
- option or it is an NFS file system that maps uid 0 to an
- unprivileged uid.
-
- fatal error, unable to load plugins
- An error occurred while loading or initializing the plugins
- specified in sudo.conf(4).
-
- invalid environment variable name
- One or more environment variable names specified via the --EE option
- contained an equal sign (`='). The arguments to the --EE option
- should be environment variable names without an associated value.
-
- no password was provided
- When ssuuddoo tried to read the password, it did not receive any
- characters. This may happen if no terminal is available (or the --SS
- option is specified) and the standard input has been redirected
- from _/_d_e_v_/_n_u_l_l.
-
- no tty present and no askpass program specified
- ssuuddoo needs to read the password but there is no mechanism available
- to do so. A terminal is not present to read the password from,
- ssuuddoo has not been configured to read from the standard input, and
- no askpass program has been specified either via the --AA option or
- the SUDO_ASKPASS environment variable.
-
- no writable temporary directory found
- ssuuddooeeddiitt was unable to find a usable temporary directory in which
- to store its intermediate files.
-
- sudo must be owned by uid 0 and have the setuid bit set
- ssuuddoo was not run with root privileges. The ssuuddoo binary does not
- have the correct owner or permissions. It must be owned by the
- root user and have the Set-user-ID bit set.
-
- sudoedit is not supported on this platform
- It is only possible to run ssuuddooeeddiitt on systems that support setting
- the effective user-ID.
-
- timed out reading password
- The user did not enter a password before the password timeout (5
- minutes by default) expired.
-
- you do not exist in the passwd database
- Your user ID does not appear in the system passwd database.
-
- you may not specify environment variables in edit mode
- It is only possible to specify environment variables when running a
- command. When editing a file, the editor is run with the user's
- environment unmodified.
-
-SSEEEE AALLSSOO
- su(1), stat(2), login_cap(3), passwd(4), sudo.conf(4), sudo_plugin(4),
- sudoers(4), sudoreplay(1m), visudo(1m)
-
-HHIISSTTOORRYY
- See the HISTORY file in the ssuuddoo distribution
- (https://www.sudo.ws/history.html) for a brief history of sudo.
-
-AAUUTTHHOORRSS
- Many people have worked on ssuuddoo over the years; this version consists of
- code written primarily by:
-
- Todd C. Miller
-
- See the CONTRIBUTORS file in the ssuuddoo distribution
- (https://www.sudo.ws/contributors.html) for an exhaustive list of people
- who have contributed to ssuuddoo.
-
-CCAAVVEEAATTSS
- There is no easy way to prevent a user from gaining a root shell if that
- user is allowed to run arbitrary commands via ssuuddoo. Also, many programs
- (such as editors) allow the user to run commands via shell escapes, thus
- avoiding ssuuddoo's checks. However, on most systems it is possible to
- prevent shell escapes with the sudoers(4) plugin's _n_o_e_x_e_c functionality.
-
- It is not meaningful to run the cd command directly via sudo, e.g.,
-
- $ sudo cd /usr/local/protected
-
- since when the command exits the parent process (your shell) will still
- be the same. Please see the _E_X_A_M_P_L_E_S section for more information.
-
- Running shell scripts via ssuuddoo can expose the same kernel bugs that make
- setuid shell scripts unsafe on some operating systems (if your OS has a
- /dev/fd/ directory, setuid shell scripts are generally safe).
-
-BBUUGGSS
- If you feel you have found a bug in ssuuddoo, please submit a bug report at
- https://bugzilla.sudo.ws/
-
-SSUUPPPPOORRTT
- Limited free support is available via the sudo-users mailing list, see
- https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search
- the archives.
-
-DDIISSCCLLAAIIMMEERR
- ssuuddoo is provided "AS IS" and any express or implied warranties,
- including, but not limited to, the implied warranties of merchantability
- and fitness for a particular purpose are disclaimed. See the LICENSE
- file distributed with ssuuddoo or https://www.sudo.ws/license.html for
- complete details.
-
-Sudo 1.8.26 November 25, 2018 Sudo 1.8.26
diff --git a/doc/sudo.conf.cat b/doc/sudo.conf.cat
deleted file mode 100644
index b43217b..0000000
--- a/doc/sudo.conf.cat
+++ /dev/null
@@ -1,434 +0,0 @@
-SUDO.CONF(4) File Formats Manual SUDO.CONF(4)
-
-NNAAMMEE
- ssuuddoo..ccoonnff - configuration for sudo front end
-
-DDEESSCCRRIIPPTTIIOONN
- The ssuuddoo..ccoonnff file is used to configure the ssuuddoo front end. It specifies
- the security policy and I/O logging plugins, debug flags as well as
- plugin-agnostic path names and settings.
-
- The ssuuddoo..ccoonnff file supports the following directives, described in detail
- below.
-
- Plugin a security policy or I/O logging plugin
-
- Path a plugin-agnostic path
-
- Set a front end setting, such as _d_i_s_a_b_l_e___c_o_r_e_d_u_m_p or _g_r_o_u_p___s_o_u_r_c_e
-
- Debug debug flags to aid in debugging ssuuddoo, ssuuddoorreeppllaayy, vviissuuddoo, and
- the ssuuddooeerrss plugin.
-
- The pound sign (`#') is used to indicate a comment. Both the comment
- character and any text after it, up to the end of the line, are ignored.
-
- Long lines can be continued with a backslash (`\') as the last character
- on the line. Note that leading white space is removed from the beginning
- of lines even when the continuation character is used.
-
- Non-comment lines that don't begin with Plugin, Path, Debug, or Set are
- silently ignored.
-
- The ssuuddoo..ccoonnff file is always parsed in the "C" locale.
-
- PPlluuggiinn ccoonnffiigguurraattiioonn
- ssuuddoo supports a plugin architecture for security policies and
- input/output logging. Third parties can develop and distribute their own
- policy and I/O logging plugins to work seamlessly with the ssuuddoo front
- end. Plugins are dynamically loaded based on the contents of ssuuddoo..ccoonnff.
-
- A Plugin line consists of the Plugin keyword, followed by the _s_y_m_b_o_l___n_a_m_e
- and the _p_a_t_h to the dynamic shared object that contains the plugin. The
- _s_y_m_b_o_l___n_a_m_e is the name of the struct policy_plugin or struct io_plugin
- symbol contained in the plugin. The _p_a_t_h may be fully qualified or
- relative. If not fully qualified, it is relative to the directory
- specified by the _p_l_u_g_i_n___d_i_r Path setting, which defaults to
- _/_u_s_r_/_l_o_c_a_l_/_l_i_b_e_x_e_c_/_s_u_d_o. In other words:
-
- Plugin sudoers_policy sudoers.so
-
- is equivalent to:
-
- Plugin sudoers_policy /usr/local/libexec/sudo/sudoers.so
-
- If the plugin was compiled statically into the ssuuddoo binary instead of
- being installed as a dynamic shared object, the _p_a_t_h should be specified
- without a leading directory, as it does not actually exist in the file
- system. For example:
-
- Plugin sudoers_policy sudoers.so
-
- Starting with ssuuddoo 1.8.5, any additional parameters after the _p_a_t_h are
- passed as arguments to the plugin's _o_p_e_n function. For example, to
- override the compile-time default sudoers file mode:
-
- Plugin sudoers_policy sudoers.so sudoers_mode=0440
-
- See the sudoers(4) manual for a list of supported arguments.
-
- The same dynamic shared object may contain multiple plugins, each with a
- different symbol name. The file must be owned by uid 0 and only writable
- by its owner. Because of ambiguities that arise from composite policies,
- only a single policy plugin may be specified. This limitation does not
- apply to I/O plugins.
-
- If no ssuuddoo..ccoonnff file is present, or if it contains no Plugin lines, the
- ssuuddooeerrss plugin will be used as the default security policy and for I/O
- logging (if enabled by the policy). This is equivalent to the following:
-
- Plugin sudoers_policy sudoers.so
- Plugin sudoers_io sudoers.so
-
- For more information on the ssuuddoo plugin architecture, see the
- sudo_plugin(4) manual.
-
- PPaatthh sseettttiinnggss
- A Path line consists of the Path keyword, followed by the name of the
- path to set and its value. For example:
-
- Path noexec /usr/local/libexec/sudo/sudo_noexec.so
- Path askpass /usr/X11R6/bin/ssh-askpass
-
- If no path name is specified, features relying on the specified setting
- will be disabled. Disabling Path settings is only supported in ssuuddoo
- version 1.8.16 and higher.
-
- The following plugin-agnostic paths may be set in the _/_e_t_c_/_s_u_d_o_._c_o_n_f
- file:
-
- askpass The fully qualified path to a helper program used to read the
- user's password when no terminal is available. This may be the
- case when ssuuddoo is executed from a graphical (as opposed to
- text-based) application. The program specified by _a_s_k_p_a_s_s
- should display the argument passed to it as the prompt and
- write the user's password to the standard output. The value of
- _a_s_k_p_a_s_s may be overridden by the SUDO_ASKPASS environment
- variable.
-
- devsearch
- An ordered, colon-separated search path of directories to look
- in for device nodes. This is used when mapping the process's
- tty device number to a device name on systems that do not
- provide such a mechanism. Sudo will _n_o_t recurse into sub-
- directories. If terminal devices may be located in a sub-
- directory of _/_d_e_v, that path must be explicitly listed in
- _d_e_v_s_e_a_r_c_h. The default value is:
- /dev/pts:/dev/vt:/dev/term:/dev/zcons:/dev/pty:/dev
-
- This option is ignored on systems that support either the
- ddeevvnnaammee() or __ttttyynnaammee__ddeevv() functions, for example BSD, macOS
- and Solaris.
-
- noexec The fully-qualified path to a shared library containing
- wrappers for the eexxeeccll(), eexxeeccllee(), eexxeeccllpp(), eexxeecctt(), eexxeeccvv(),
- eexxeeccvvee(), eexxeeccvvPP(), eexxeeccvvpp(), eexxeeccvvppee(), ffeexxeeccvvee(), ppooppeenn(),
- ppoossiixx__ssppaawwnn(), ppoossiixx__ssppaawwnnpp(), ssyysstteemm(), and wwoorrddeexxpp() library
- functions that prevent the execution of further commands. This
- is used to implement the _n_o_e_x_e_c functionality on systems that
- support LD_PRELOAD or its equivalent. The default value is:
- _/_u_s_r_/_l_o_c_a_l_/_l_i_b_e_x_e_c_/_s_u_d_o_/_s_u_d_o___n_o_e_x_e_c_._s_o.
-
- plugin_dir
- The default directory to use when searching for plugins that
- are specified without a fully qualified path name. The default
- value is _/_u_s_r_/_l_o_c_a_l_/_l_i_b_e_x_e_c_/_s_u_d_o.
-
- sesh The fully-qualified path to the sseesshh binary. This setting is
- only used when ssuuddoo is built with SELinux support. The default
- value is _/_u_s_r_/_l_o_c_a_l_/_l_i_b_e_x_e_c_/_s_u_d_o_/_s_e_s_h.
-
- OOtthheerr sseettttiinnggss
- The ssuuddoo..ccoonnff file also supports the following front end settings:
-
- disable_coredump
- Core dumps of ssuuddoo itself are disabled by default to prevent
- the disclosure of potentially sensitive information. To aid in
- debugging ssuuddoo crashes, you may wish to re-enable core dumps by
- setting "disable_coredump" to false in ssuuddoo..ccoonnff as follows:
-
- Set disable_coredump false
-
- All modern operating systems place restrictions on core dumps
- from setuid processes like ssuuddoo so this option can be enabled
- without compromising security. To actually get a ssuuddoo core
- file you will likely need to enable core dumps for setuid
- processes. On BSD and Linux systems this is accomplished in
- the sysctl(1m) command. On Solaris, the coreadm(1m) command is
- used to configure core dump behavior.
-
- This setting is only available in ssuuddoo version 1.8.4 and
- higher.
-
- group_source
- ssuuddoo passes the invoking user's group list to the policy and
- I/O plugins. On most systems, there is an upper limit to the
- number of groups that a user may belong to simultaneously
- (typically 16 for compatibility with NFS). On systems with the
- getconf(1) utility, running:
- getconf NGROUPS_MAX
- will return the maximum number of groups.
-
- However, it is still possible to be a member of a larger number
- of groups--they simply won't be included in the group list
- returned by the kernel for the user. Starting with ssuuddoo
- version 1.8.7, if the user's kernel group list has the maximum
- number of entries, ssuuddoo will consult the group database
- directly to determine the group list. This makes it possible
- for the security policy to perform matching by group name even
- when the user is a member of more than the maximum number of
- groups.
-
- The _g_r_o_u_p___s_o_u_r_c_e setting allows the administrator to change
- this default behavior. Supported values for _g_r_o_u_p___s_o_u_r_c_e are:
-
- static Use the static group list that the kernel returns.
- Retrieving the group list this way is very fast but
- it is subject to an upper limit as described above.
- It is "static" in that it does not reflect changes to
- the group database made after the user logs in. This
- was the default behavior prior to ssuuddoo 1.8.7.
-
- dynamic Always query the group database directly. It is
- "dynamic" in that changes made to the group database
- after the user logs in will be reflected in the group
- list. On some systems, querying the group database
- for all of a user's groups can be time consuming when
- querying a network-based group database. Most
- operating systems provide an efficient method of
- performing such queries. Currently, ssuuddoo supports
- efficient group queries on AIX, BSD, HP-UX, Linux and
- Solaris.
-
- adaptive Only query the group database if the static group
- list returned by the kernel has the maximum number of
- entries. This is the default behavior in ssuuddoo 1.8.7
- and higher.
-
- For example, to cause ssuuddoo to only use the kernel's static list
- of groups for the user:
-
- Set group_source static
-
- This setting is only available in ssuuddoo version 1.8.7 and
- higher.
-
- max_groups
- The maximum number of user groups to retrieve from the group
- database. Values less than one will be ignored. This setting
- is only used when querying the group database directly. It is
- intended to be used on systems where it is not possible to
- detect when the array to be populated with group entries is not
- sufficiently large. By default, ssuuddoo will allocate four times
- the system's maximum number of groups (see above) and retry
- with double that number if the group database query fails.
-
- This setting is only available in ssuuddoo version 1.8.7 and
- higher. It should not be required in ssuuddoo versions 1.8.24 and
- higher and may be removed in a later release.
-
- probe_interfaces
- By default, ssuuddoo will probe the system's network interfaces and
- pass the IP address of each enabled interface to the policy
- plugin. This makes it possible for the plugin to match rules
- based on the IP address without having to query DNS. On Linux
- systems with a large number of virtual interfaces, this may
- take a non-negligible amount of time. If IP-based matching is
- not required, network interface probing can be disabled as
- follows:
-
- Set probe_interfaces false
-
- This setting is only available in ssuuddoo version 1.8.10 and
- higher.
-
- DDeebbuugg ffllaaggss
- ssuuddoo versions 1.8.4 and higher support a flexible debugging framework
- that can help track down what ssuuddoo is doing internally if there is a
- problem.
-
- A Debug line consists of the Debug keyword, followed by the name of the
- program (or plugin) to debug (ssuuddoo, vviissuuddoo, ssuuddoorreeppllaayy, ssuuddooeerrss), the
- debug file name and a comma-separated list of debug flags. The debug
- flag syntax used by ssuuddoo and the ssuuddooeerrss plugin is _s_u_b_s_y_s_t_e_m@_p_r_i_o_r_i_t_y but
- a plugin is free to use a different format so long as it does not include
- a comma (`,').
-
- For example:
-
- Debug sudo /var/log/sudo_debug all@warn,plugin@info
-
- would log all debugging statements at the _w_a_r_n level and higher in
- addition to those at the _i_n_f_o level for the plugin subsystem.
-
- As of ssuuddoo 1.8.12, multiple Debug entries may be specified per program.
- Older versions of ssuuddoo only support a single Debug entry per program.
- Plugin-specific Debug entries are also supported starting with ssuuddoo
- 1.8.12 and are matched by either the base name of the plugin that was
- loaded (for example sudoers.so) or by the plugin's fully-qualified path
- name. Previously, the ssuuddooeerrss plugin shared the same Debug entry as the
- ssuuddoo front end and could not be configured separately.
-
- The following priorities are supported, in order of decreasing severity:
- _c_r_i_t, _e_r_r, _w_a_r_n, _n_o_t_i_c_e, _d_i_a_g, _i_n_f_o, _t_r_a_c_e and _d_e_b_u_g. Each priority,
- when specified, also includes all priorities higher than it. For
- example, a priority of _n_o_t_i_c_e would include debug messages logged at
- _n_o_t_i_c_e and higher.
-
- The priorities _t_r_a_c_e and _d_e_b_u_g also include function call tracing which
- logs when a function is entered and when it returns. For example, the
- following trace is for the ggeett__uusseerr__ggrroouuppss() function located in
- src/sudo.c:
-
- sudo[123] -> get_user_groups @ src/sudo.c:385
- sudo[123] <- get_user_groups @ src/sudo.c:429 := groups=10,0,5
-
- When the function is entered, indicated by a right arrow `->', the
- program, process ID, function, source file and line number are logged.
- When the function returns, indicated by a left arrow `<-', the same
- information is logged along with the return value. In this case, the
- return value is a string.
-
- The following subsystems are used by the ssuuddoo front-end:
-
- _a_l_l matches every subsystem
-
- _a_r_g_s command line argument processing
-
- _c_o_n_v user conversation
-
- _e_d_i_t sudoedit
-
- _e_v_e_n_t event subsystem
-
- _e_x_e_c command execution
-
- _m_a_i_n ssuuddoo main function
-
- _n_e_t_i_f network interface handling
-
- _p_c_o_m_m communication with the plugin
-
- _p_l_u_g_i_n plugin configuration
-
- _p_t_y pseudo-tty related code
-
- _s_e_l_i_n_u_x SELinux-specific handling
-
- _u_t_i_l utility functions
-
- _u_t_m_p utmp handling
-
- The sudoers(4) plugin includes support for additional subsystems.
-
-FFIILLEESS
- _/_e_t_c_/_s_u_d_o_._c_o_n_f ssuuddoo front end configuration
-
-EEXXAAMMPPLLEESS
- #
- # Default /etc/sudo.conf file
- #
- # Format:
- # Plugin plugin_name plugin_path plugin_options ...
- # Path askpass /path/to/askpass
- # Path noexec /path/to/sudo_noexec.so
- # Debug sudo /var/log/sudo_debug all@warn
- # Set disable_coredump true
- #
- # The plugin_path is relative to /usr/local/libexec/sudo unless
- # fully qualified.
- # The plugin_name corresponds to a global symbol in the plugin
- # that contains the plugin interface structure.
- # The plugin_options are optional.
- #
- # The sudoers plugin is used by default if no Plugin lines are
- # present.
- Plugin sudoers_policy sudoers.so
- Plugin sudoers_io sudoers.so
-
- #
- # Sudo askpass:
- #
- # An askpass helper program may be specified to provide a graphical
- # password prompt for "sudo -A" support. Sudo does not ship with
- # its own askpass program but can use the OpenSSH askpass.
- #
- # Use the OpenSSH askpass
- #Path askpass /usr/X11R6/bin/ssh-askpass
- #
- # Use the Gnome OpenSSH askpass
- #Path askpass /usr/libexec/openssh/gnome-ssh-askpass
-
- #
- # Sudo noexec:
- #
- # Path to a shared library containing dummy versions of the execv(),
- # execve() and fexecve() library functions that just return an error.
- # This is used to implement the "noexec" functionality on systems that
- # support C<LD_PRELOAD> or its equivalent.
- # The compiled-in value is usually sufficient and should only be
- # changed if you rename or move the sudo_noexec.so file.
- #
- #Path noexec /usr/local/libexec/sudo/sudo_noexec.so
-
- #
- # Core dumps:
- #
- # By default, sudo disables core dumps while it is executing
- # (they are re-enabled for the command that is run).
- # To aid in debugging sudo problems, you may wish to enable core
- # dumps by setting "disable_coredump" to false.
- #
- #Set disable_coredump false
-
- #
- # User groups:
- #
- # Sudo passes the user's group list to the policy plugin.
- # If the user is a member of the maximum number of groups (usually 16),
- # sudo will query the group database directly to be sure to include
- # the full list of groups.
- #
- # On some systems, this can be expensive so the behavior is configurable.
- # The "group_source" setting has three possible values:
- # static - use the user's list of groups returned by the kernel.
- # dynamic - query the group database to find the list of groups.
- # adaptive - if user is in less than the maximum number of groups.
- # use the kernel list, else query the group database.
- #
- #Set group_source static
-
-SSEEEE AALLSSOO
- sudo_plugin(4), sudoers(4), sudo(1m)
-
-HHIISSTTOORRYY
- See the HISTORY file in the ssuuddoo distribution
- (https://www.sudo.ws/history.html) for a brief history of sudo.
-
-AAUUTTHHOORRSS
- Many people have worked on ssuuddoo over the years; this version consists of
- code written primarily by:
-
- Todd C. Miller
-
- See the CONTRIBUTORS file in the ssuuddoo distribution
- (https://www.sudo.ws/contributors.html) for an exhaustive list of people
- who have contributed to ssuuddoo.
-
-BBUUGGSS
- If you feel you have found a bug in ssuuddoo, please submit a bug report at
- https://bugzilla.sudo.ws/
-
-SSUUPPPPOORRTT
- Limited free support is available via the sudo-users mailing list, see
- https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search
- the archives.
-
-DDIISSCCLLAAIIMMEERR
- ssuuddoo is provided "AS IS" and any express or implied warranties,
- including, but not limited to, the implied warranties of merchantability
- and fitness for a particular purpose are disclaimed. See the LICENSE
- file distributed with ssuuddoo or https://www.sudo.ws/license.html for
- complete details.
-
-Sudo 1.8.26 October 7, 2018 Sudo 1.8.26
diff --git a/doc/sudo.conf.man.in b/doc/sudo.conf.man.in
index 8a8a311..65ac7f4 100644
--- a/doc/sudo.conf.man.in
+++ b/doc/sudo.conf.man.in
@@ -1,6 +1,8 @@
.\" Automatically generated from an mdoc input file. Do not edit.
.\"
-.\" Copyright (c) 2010-2018 Todd C. Miller <Todd.Miller@sudo.ws>
+.\" SPDX-License-Identifier: ISC
+.\"
+.\" Copyright (c) 2010-2019 Todd C. Miller <Todd.Miller@sudo.ws>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -14,7 +16,8 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.TH "SUDO.CONF" "@mansectform@" "October 7, 2018" "Sudo @PACKAGE_VERSION@" "File Formats Manual"
+.nr SL @SEMAN@
+.TH "SUDO.CONF" "@mansectform@" "July 3, 2019" "Sudo @PACKAGE_VERSION@" "File Formats Manual"
.nh
.if n .ad l
.SH "NAME"
@@ -114,7 +117,7 @@ specified by the
\fIplugin_dir\fR
\fRPath\fR
setting, which defaults to
-\fI@PLUGINDIR@\fR.
+\fI@plugindir@\fR.
In other words:
.nf
.sp
@@ -127,7 +130,7 @@ is equivalent to:
.nf
.sp
.RS 6n
-Plugin sudoers_policy @PLUGINDIR@/sudoers.so
+Plugin sudoers_policy @plugindir@/sudoers.so
.RE
.fi
.PP
@@ -249,7 +252,7 @@ If terminal devices may be located in a sub-directory of
\fI/dev\fR,
that path must be explicitly listed in
\fIdevsearch\fR.
-The default value is:
+The default value is
\fR/dev/pts:/dev/vt:/dev/term:/dev/zcons:/dev/pty:/dev\fR
.sp
This option is ignored on systems that support either the
@@ -285,14 +288,15 @@ This is used to implement the
functionality on systems that support
\fRLD_PRELOAD\fR
or its equivalent.
-The default value is:
+The default value is
\fI@noexec_file@\fR.
.TP 10n
plugin_dir
The default directory to use when searching for plugins
that are specified without a fully qualified path name.
The default value is
-\fI@PLUGINDIR@\fR.
+\fI@plugindir@\fR.
+.if \n(SL \{\
.TP 10n
sesh
The fully-qualified path to the
@@ -303,6 +307,7 @@ This setting is only used when
is built with SELinux support.
The default value is
\fI@sesh_file@\fR.
+.\}
.SS "Other settings"
The
\fBsudo.conf\fR
@@ -613,7 +618,7 @@ communication with the plugin
plugin configuration
.TP 12n
\fIpty\fR
-pseudo-tty related code
+pseudo-terminal related code
.TP 12n
\fIselinux\fR
SELinux-specific handling
@@ -645,7 +650,7 @@ front end configuration
# Debug sudo /var/log/sudo_debug all@warn
# Set disable_coredump true
#
-# The plugin_path is relative to @PLUGINDIR@ unless
+# The plugin_path is relative to @plugindir@ unless
# fully qualified.
# The plugin_name corresponds to a global symbol in the plugin
# that contains the plugin interface structure.
diff --git a/doc/sudo.conf.man.in.sed b/doc/sudo.conf.man.in.sed
new file mode 100644
index 0000000..2534bc8
--- /dev/null
+++ b/doc/sudo.conf.man.in.sed
@@ -0,0 +1,15 @@
+s/^\(.TH .*\)/.nr SL @SEMAN@\
+\1/
+
+/^\.TP 10n$/ {
+ N
+ /^.TP 10n\nsesh$/ {
+ i\
+.if \\n(SL \\{\\
+ }
+}
+
+/^\\fI@sesh_file@\\fR\.$/ {
+ a\
+.\\}
+}
diff --git a/doc/sudo.conf.mdoc.in b/doc/sudo.conf.mdoc.in
index 4823a0b..a0ba54a 100644
--- a/doc/sudo.conf.mdoc.in
+++ b/doc/sudo.conf.mdoc.in
@@ -1,5 +1,7 @@
.\"
-.\" Copyright (c) 2010-2018 Todd C. Miller <Todd.Miller@sudo.ws>
+.\" SPDX-License-Identifier: ISC
+.\"
+.\" Copyright (c) 2010-2019 Todd C. Miller <Todd.Miller@sudo.ws>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -13,7 +15,8 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd October 7, 2018
+.nr SL @SEMAN@
+.Dd July 3, 2019
.Dt SUDO.CONF @mansectform@
.Os Sudo @PACKAGE_VERSION@
.Sh NAME
@@ -111,7 +114,7 @@ specified by the
.Em plugin_dir
.Li Path
setting, which defaults to
-.Pa @PLUGINDIR@ .
+.Pa @plugindir@ .
In other words:
.Bd -literal -offset indent
Plugin sudoers_policy sudoers.so
@@ -119,7 +122,7 @@ Plugin sudoers_policy sudoers.so
.Pp
is equivalent to:
.Bd -literal -offset indent
-Plugin sudoers_policy @PLUGINDIR@/sudoers.so
+Plugin sudoers_policy @plugindir@/sudoers.so
.Ed
.Pp
If the plugin was compiled statically into the
@@ -226,7 +229,7 @@ If terminal devices may be located in a sub-directory of
.Pa /dev ,
that path must be explicitly listed in
.Em devsearch .
-The default value is:
+The default value is
.Li /dev/pts:/dev/vt:/dev/term:/dev/zcons:/dev/pty:/dev
.Pp
This option is ignored on systems that support either the
@@ -261,13 +264,14 @@ This is used to implement the
functionality on systems that support
.Ev LD_PRELOAD
or its equivalent.
-The default value is:
+The default value is
.Pa @noexec_file@ .
.It plugin_dir
The default directory to use when searching for plugins
that are specified without a fully qualified path name.
The default value is
-.Pa @PLUGINDIR@ .
+.Pa @plugindir@ .
+.if \n(SL \{\
.It sesh
The fully-qualified path to the
.Nm sesh
@@ -277,6 +281,7 @@ This setting is only used when
is built with SELinux support.
The default value is
.Pa @sesh_file@ .
+.\}
.El
.Ss Other settings
The
@@ -552,7 +557,7 @@ communication with the plugin
.It Em plugin
plugin configuration
.It Em pty
-pseudo-tty related code
+pseudo-terminal related code
.It Em selinux
SELinux-specific handling
.It Em util
@@ -582,7 +587,7 @@ front end configuration
# Debug sudo /var/log/sudo_debug all@warn
# Set disable_coredump true
#
-# The plugin_path is relative to @PLUGINDIR@ unless
+# The plugin_path is relative to @plugindir@ unless
# fully qualified.
# The plugin_name corresponds to a global symbol in the plugin
# that contains the plugin interface structure.
diff --git a/doc/sudo.man.in b/doc/sudo.man.in
index ffcd468..6425a17 100644
--- a/doc/sudo.man.in
+++ b/doc/sudo.man.in
@@ -1,6 +1,8 @@
.\" Automatically generated from an mdoc input file. Do not edit.
.\"
-.\" Copyright (c) 1994-1996, 1998-2005, 2007-2018
+.\" SPDX-License-Identifier: ISC
+.\"
+.\" Copyright (c) 1994-1996, 1998-2005, 2007-2019
.\" Todd C. Miller <Todd.Miller@sudo.ws>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
@@ -23,7 +25,7 @@
.nr BA @BAMAN@
.nr LC @LCMAN@
.nr PS @PSMAN@
-.TH "SUDO" "@mansectsu@" "November 25, 2018" "Sudo @PACKAGE_VERSION@" "System Manager's Manual"
+.TH "SUDO" "@mansectsu@" "May 27, 2019" "Sudo @PACKAGE_VERSION@" "System Manager's Manual"
.nh
.if n .ad l
.SH "NAME"
@@ -39,7 +41,7 @@
.HP 5n
\fBsudo\fR
\fB\-v\fR
-[\fB\-AknS\fR]
+[\fB\-ABknS\fR]
.if \n(BA [\fB\-a\fR\ \fItype\fR]
[\fB\-g\fR\ \fIgroup\fR]
[\fB\-h\fR\ \fIhost\fR]
@@ -49,7 +51,7 @@
.HP 5n
\fBsudo\fR
\fB\-l\fR
-[\fB\-AknS\fR]
+[\fB\-ABknS\fR]
.if \n(BA [\fB\-a\fR\ \fItype\fR]
[\fB\-g\fR\ \fIgroup\fR]
[\fB\-h\fR\ \fIhost\fR]
@@ -60,7 +62,7 @@
.br
.HP 5n
\fBsudo\fR
-[\fB\-AbEHnPS\fR]
+[\fB\-ABbEHnPS\fR]
.if \n(BA [\fB\-a\fR\ \fItype\fR]
[\fB\-C\fR\ \fInum\fR]
.if \n(LC [\fB\-c\fR\ \fIclass\fR]
@@ -77,7 +79,7 @@
.br
.HP 9n
\fBsudoedit\fR
-[\fB\-AknS\fR]
+[\fB\-ABknS\fR]
.if \n(BA [\fB\-a\fR\ \fItype\fR]
[\fB\-C\fR\ \fInum\fR]
.if \n(LC [\fB\-c\fR\ \fIclass\fR]
@@ -211,6 +213,10 @@ BSD
authentication.
.\}
.TP 12n
+\fB\-B\fR, \fB\--bell\fR
+Ring the bell as part of the password promp when a terminal is present.
+This option has no effect if an askpass program is used.
+.TP 12n
\fB\-b\fR, \fB\--background\fR
Run the given command in the background.
Note that it is not possible to use shell job control to manipulate
@@ -1306,15 +1312,18 @@ This may happen if no terminal is available (or the
option is specified) and the standard input has been redirected from
\fI/dev/null\fR.
.TP 6n
-\fRno tty present and no askpass program specified\fR
+\fRa terminal is required to read the password\fR
\fBsudo\fR
-needs to read the password but there is no mechanism available to do so.
+needs to read the password but there is no mechanism available for it
+to do so.
A terminal is not present to read the password from,
\fBsudo\fR
has not been configured to read from the standard input,
-and no askpass program has been specified either via the
-\fB\-A\fR
-option or the
+the
+\fB\-S\fR
+option was not used, and no askpass helper has been specified either via the
+sudo.conf(@mansectform@)
+file or the
\fRSUDO_ASKPASS\fR
environment variable.
.TP 6n
diff --git a/doc/sudo.mdoc.in b/doc/sudo.mdoc.in
index c9b928e..c49be27 100644
--- a/doc/sudo.mdoc.in
+++ b/doc/sudo.mdoc.in
@@ -1,5 +1,7 @@
.\"
-.\" Copyright (c) 1994-1996, 1998-2005, 2007-2018
+.\" SPDX-License-Identifier: ISC
+.\"
+.\" Copyright (c) 1994-1996, 1998-2005, 2007-2019
.\" Todd C. Miller <Todd.Miller@sudo.ws>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
@@ -22,7 +24,7 @@
.nr BA @BAMAN@
.nr LC @LCMAN@
.nr PS @PSMAN@
-.Dd November 25, 2018
+.Dd May 27, 2019
.Dt SUDO @mansectsu@
.Os Sudo @PACKAGE_VERSION@
.Sh NAME
@@ -34,7 +36,7 @@
.Fl h | K | k | V
.Nm sudo
.Fl v
-.Op Fl AknS
+.Op Fl ABknS
.if \n(BA \{\
.Op Fl a Ar type
.\}
@@ -44,7 +46,7 @@
.Op Fl u Ar user
.Nm sudo
.Fl l
-.Op Fl AknS
+.Op Fl ABknS
.if \n(BA \{\
.Op Fl a Ar type
.\}
@@ -55,7 +57,7 @@
.Op Fl u Ar user
.Op Ar command
.Nm sudo
-.Op Fl AbEHnPS
+.Op Fl ABbEHnPS
.if \n(BA \{\
.Op Fl a Ar type
.\}
@@ -76,7 +78,7 @@
.Op Fl i | s
.Op Ar command
.Nm sudoedit
-.Op Fl AknS
+.Op Fl ABknS
.if \n(BA \{\
.Op Fl a Ar type
.\}
@@ -206,6 +208,9 @@ This option is only available on systems that support
.Bx
authentication.
.\}
+.It Fl B , -bell
+Ring the bell as part of the password promp when a terminal is present.
+This option has no effect if an askpass program is used.
.It Fl b , -background
Run the given command in the background.
Note that it is not possible to use shell job control to manipulate
@@ -1204,15 +1209,18 @@ This may happen if no terminal is available (or the
.Fl S
option is specified) and the standard input has been redirected from
.Pa /dev/null .
-.It Li no tty present and no askpass program specified
+.It Li a terminal is required to read the password
.Nm
-needs to read the password but there is no mechanism available to do so.
+needs to read the password but there is no mechanism available for it
+to do so.
A terminal is not present to read the password from,
.Nm
has not been configured to read from the standard input,
-and no askpass program has been specified either via the
-.Fl A
-option or the
+the
+.Fl S
+option was not used, and no askpass helper has been specified either via the
+.Xr sudo.conf @mansectform@
+file or the
.Ev SUDO_ASKPASS
environment variable.
.It Li no writable temporary directory found
diff --git a/doc/sudo_plugin.cat b/doc/sudo_plugin.cat
deleted file mode 100644
index eda4ceb..0000000
--- a/doc/sudo_plugin.cat
+++ /dev/null
@@ -1,1683 +0,0 @@
-SUDO_PLUGIN(4) File Formats Manual SUDO_PLUGIN(4)
-
-NNAAMMEE
- ssuuddoo__pplluuggiinn - Sudo Plugin API
-
-DDEESSCCRRIIPPTTIIOONN
- Starting with version 1.8, ssuuddoo supports a plugin API for policy and
- session logging. Plugins may be compiled as dynamic shared objects (the
- default on systems that support them) or compiled statically into the
- ssuuddoo binary itself. By default, the ssuuddooeerrss policy plugin and an
- associated I/O logging plugin are used. Via the plugin API, ssuuddoo can be
- configured to use alternate policy and/or I/O logging plugins provided by
- third parties. The plugins to be used are specified in the sudo.conf(4)
- file.
-
- The API is versioned with a major and minor number. The minor version
- number is incremented when additions are made. The major number is
- incremented when incompatible changes are made. A plugin should be check
- the version passed to it and make sure that the major version matches.
-
- The plugin API is defined by the sudo_plugin.h header file.
-
- PPoolliiccyy pplluuggiinn AAPPII
- A policy plugin must declare and populate a policy_plugin struct in the
- global scope. This structure contains pointers to the functions that
- implement the ssuuddoo policy checks. The name of the symbol should be
- specified in sudo.conf(4) along with a path to the plugin so that ssuuddoo
- can load it.
-
- struct policy_plugin {
- #define SUDO_POLICY_PLUGIN 1
- unsigned int type; /* always SUDO_POLICY_PLUGIN */
- unsigned int version; /* always SUDO_API_VERSION */
- int (*open)(unsigned int version, sudo_conv_t conversation,
- sudo_printf_t plugin_printf, char * const settings[],
- char * const user_info[], char * const user_env[],
- char * const plugin_options[]);
- void (*close)(int exit_status, int error);
- int (*show_version)(int verbose);
- int (*check_policy)(int argc, char * const argv[],
- char *env_add[], char **command_info[],
- char **argv_out[], char **user_env_out[]);
- int (*list)(int argc, char * const argv[], int verbose,
- const char *list_user);
- int (*validate)(void);
- void (*invalidate)(int remove);
- int (*init_session)(struct passwd *pwd, char **user_env[]);
- void (*register_hooks)(int version,
- int (*register_hook)(struct sudo_hook *hook));
- void (*deregister_hooks)(int version,
- int (*deregister_hook)(struct sudo_hook *hook));
- };
-
- The policy_plugin struct has the following fields:
-
- type The type field should always be set to SUDO_POLICY_PLUGIN.
-
- version
- The version field should be set to SUDO_API_VERSION.
-
- This allows ssuuddoo to determine the API version the plugin was built
- against.
-
- open
- int (*open)(unsigned int version, sudo_conv_t conversation,
- sudo_printf_t plugin_printf, char * const settings[],
- char * const user_info[], char * const user_env[],
- char * const plugin_options[]);
-
- Returns 1 on success, 0 on failure, -1 if a general error occurred,
- or -2 if there was a usage error. In the latter case, ssuuddoo will
- print a usage message before it exits. If an error occurs, the
- plugin may optionally call the ccoonnvveerrssaattiioonn() or pplluuggiinn__pprriinnttff()
- function with SUDO_CONF_ERROR_MSG to present additional error
- information to the user.
-
- The function arguments are as follows:
-
- version
- The version passed in by ssuuddoo allows the plugin to determine
- the major and minor version number of the plugin API
- supported by ssuuddoo.
-
- conversation
- A pointer to the ccoonnvveerrssaattiioonn() function that can be used by
- the plugin to interact with the user (see below). Returns 0
- on success and -1 on failure.
-
- plugin_printf
- A pointer to a pprriinnttff()-style function that may be used to
- display informational or error messages (see below). Returns
- the number of characters printed on success and -1 on
- failure.
-
- settings
- A vector of user-supplied ssuuddoo settings in the form of
- "name=value" strings. The vector is terminated by a NULL
- pointer. These settings correspond to flags the user
- specified when running ssuuddoo. As such, they will only be
- present when the corresponding flag has been specified on the
- command line.
-
- When parsing _s_e_t_t_i_n_g_s, the plugin should split on the ffiirrsstt
- equal sign (`=') since the _n_a_m_e field will never include one
- itself but the _v_a_l_u_e might.
-
- bsdauth_type=string
- Authentication type, if specified by the --aa flag, to
- use on systems where BSD authentication is supported.
-
- closefrom=number
- If specified, the user has requested via the --CC flag
- that ssuuddoo close all files descriptors with a value of
- _n_u_m_b_e_r or higher. The plugin may optionally pass this,
- or another value, back in the _c_o_m_m_a_n_d___i_n_f_o list.
-
- debug_flags=string
- A debug file path name followed by a space and a comma-
- separated list of debug flags that correspond to the
- plugin's Debug entry in sudo.conf(4), if there is one.
- The flags are passed to the plugin exactly as they
- appear in sudo.conf(4). The syntax used by ssuuddoo and
- the ssuuddooeerrss plugin is _s_u_b_s_y_s_t_e_m@_p_r_i_o_r_i_t_y but a plugin
- is free to use a different format so long as it does
- not include a comma (`,'). Prior to ssuuddoo 1.8.12, there
- was no way to specify plugin-specific _d_e_b_u_g___f_l_a_g_s so
- the value was always the same as that used by the ssuuddoo
- front end and did not include a path name, only the
- flags themselves. As of version 1.7 of the plugin
- interface, ssuuddoo will only pass _d_e_b_u_g___f_l_a_g_s if
- sudo.conf(4) contains a plugin-specific Debug entry.
-
- debug_level=number
- This setting has been deprecated in favor of
- _d_e_b_u_g___f_l_a_g_s.
-
- ignore_ticket=bool
- Set to true if the user specified the --kk flag along
- with a command, indicating that the user wishes to
- ignore any cached authentication credentials.
- _i_m_p_l_i_e_d___s_h_e_l_l to true. This allows ssuuddoo with no
- arguments to be used similarly to su(1). If the plugin
- does not to support this usage, it may return a value
- of -2 from the cchheecckk__ppoolliiccyy() function, which will
- cause ssuuddoo to print a usage message and exit.
-
- implied_shell=bool
- If the user does not specify a program on the command
- line, ssuuddoo will pass the plugin the path to the user's
- shell and set
-
- login_class=string
- BSD login class to use when setting resource limits and
- nice value, if specified by the --cc flag.
-
- login_shell=bool
- Set to true if the user specified the --ii flag,
- indicating that the user wishes to run a login shell.
-
- max_groups=int
- The maximum number of groups a user may belong to.
- This will only be present if there is a corresponding
- setting in sudo.conf(4).
-
- network_addrs=list
- A space-separated list of IP network addresses and
- netmasks in the form "addr/netmask", e.g.,
- "192.168.1.2/255.255.255.0". The address and netmask
- pairs may be either IPv4 or IPv6, depending on what the
- operating system supports. If the address contains a
- colon (`:'), it is an IPv6 address, else it is IPv4.
-
- noninteractive=bool
- Set to true if the user specified the --nn flag,
- indicating that ssuuddoo should operate in non-interactive
- mode. The plugin may reject a command run in non-
- interactive mode if user interaction is required.
-
- plugin_dir=string
- The default plugin directory used by the ssuuddoo front
- end. This is the default directory set at compile time
- and may not correspond to the directory the running
- plugin was loaded from. It may be used by a plugin to
- locate support files.
-
- plugin_path=string
- The path name of plugin loaded by the ssuuddoo front end.
- The path name will be a fully-qualified unless the
- plugin was statically compiled into ssuuddoo.
-
- preserve_environment=bool
- Set to true if the user specified the --EE flag,
- indicating that the user wishes to preserve the
- environment.
-
- preserve_groups=bool
- Set to true if the user specified the --PP flag,
- indicating that the user wishes to preserve the group
- vector instead of setting it based on the runas user.
-
- progname=string
- The command name that sudo was run as, typically "sudo"
- or "sudoedit".
-
- prompt=string
- The prompt to use when requesting a password, if
- specified via the --pp flag.
-
- remote_host=string
- The name of the remote host to run the command on, if
- specified via the --hh option. Support for running the
- command on a remote host is meant to be implemented via
- a helper program that is executed in place of the user-
- specified command. The ssuuddoo front end is only capable
- of executing commands on the local host. Only
- available starting with API version 1.4.
-
- run_shell=bool
- Set to true if the user specified the --ss flag,
- indicating that the user wishes to run a shell.
-
- runas_group=string
- The group name or gid to run the command as, if
- specified via the --gg flag.
-
- runas_user=string
- The user name or uid to run the command as, if
- specified via the --uu flag.
-
- selinux_role=string
- SELinux role to use when executing the command, if
- specified by the --rr flag.
-
- selinux_type=string
- SELinux type to use when executing the command, if
- specified by the --tt flag.
-
- set_home=bool
- Set to true if the user specified the --HH flag. If
- true, set the HOME environment variable to the target
- user's home directory.
-
- sudoedit=bool
- Set to true when the --ee flag is specified or if invoked
- as ssuuddooeeddiitt. The plugin shall substitute an editor
- into _a_r_g_v in the cchheecckk__ppoolliiccyy() function or return -2
- with a usage error if the plugin does not support
- _s_u_d_o_e_d_i_t. For more information, see the _c_h_e_c_k___p_o_l_i_c_y
- section.
-
- timeout=string
- User-specified command timeout. Not all plugins
- support command timeouts and the ability for the user
- to set a timeout may be restricted by policy. The
- format of the timeout string is plugin-specific.
-
- Additional settings may be added in the future so the plugin
- should silently ignore settings that it does not recognize.
-
- user_info
- A vector of information about the user running the command in
- the form of "name=value" strings. The vector is terminated
- by a NULL pointer.
-
- When parsing _u_s_e_r___i_n_f_o, the plugin should split on the ffiirrsstt
- equal sign (`=') since the _n_a_m_e field will never include one
- itself but the _v_a_l_u_e might.
-
- cols=int
- The number of columns the user's terminal supports. If
- there is no terminal device available, a default value
- of 80 is used.
-
- cwd=string
- The user's current working directory.
-
- egid=gid_t
- The effective group ID of the user invoking ssuuddoo.
-
- euid=uid_t
- The effective user ID of the user invoking ssuuddoo.
-
- gid=gid_t
- The real group ID of the user invoking ssuuddoo.
-
- groups=list
- The user's supplementary group list formatted as a
- string of comma-separated group IDs.
-
- host=string
- The local machine's hostname as returned by the
- gethostname(2) system call.
-
- lines=int
- The number of lines the user's terminal supports. If
- there is no terminal device available, a default value
- of 24 is used.
-
- pgid=int
- The ID of the process group that the running ssuuddoo
- process is a member of. Only available starting with
- API version 1.2.
-
- pid=int
- The process ID of the running ssuuddoo process. Only
- available starting with API version 1.2.
-
- plugin_options
- Any (non-comment) strings immediately after the plugin
- path are passed as arguments to the plugin. These
- arguments are split on a white space boundary and are
- passed to the plugin in the form of a NULL-terminated
- array of strings. If no arguments were specified,
- _p_l_u_g_i_n___o_p_t_i_o_n_s will be the NULL pointer.
-
- NOTE: the _p_l_u_g_i_n___o_p_t_i_o_n_s parameter is only available
- starting with API version 1.2. A plugin mmuusstt check the
- API version specified by the ssuuddoo front end before
- using _p_l_u_g_i_n___o_p_t_i_o_n_s. Failure to do so may result in a
- crash.
-
- ppid=int
- The parent process ID of the running ssuuddoo process.
- Only available starting with API version 1.2.
-
- sid=int
- The session ID of the running ssuuddoo process or 0 if ssuuddoo
- is not part of a POSIX job control session. Only
- available starting with API version 1.2.
-
- tcpgid=int
- The ID of the foreground process group associated with
- the terminal device associated with the ssuuddoo process or
- -1 if there is no terminal present. Only available
- starting with API version 1.2.
-
- tty=string
- The path to the user's terminal device. If the user
- has no terminal device associated with the session, the
- value will be empty, as in "tty=".
-
- uid=uid_t
- The real user ID of the user invoking ssuuddoo.
-
- umask=octal
- The invoking user's file creation mask. Only available
- starting with API version 1.10.
-
- user=string
- The name of the user invoking ssuuddoo.
-
- user_env
- The user's environment in the form of a NULL-terminated
- vector of "name=value" strings.
-
- When parsing _u_s_e_r___e_n_v, the plugin should split on the ffiirrsstt
- equal sign (`=') since the _n_a_m_e field will never include one
- itself but the _v_a_l_u_e might.
-
- close
- void (*close)(int exit_status, int error);
-
- The cclloossee() function is called when the command being run by ssuuddoo
- finishes.
-
- The function arguments are as follows:
-
- exit_status
- The command's exit status, as returned by the wait(2) system
- call. The value of exit_status is undefined if error is non-
- zero.
-
- error
- If the command could not be executed, this is set to the
- value of errno set by the execve(2) system call. The plugin
- is responsible for displaying error information via the
- ccoonnvveerrssaattiioonn() or pplluuggiinn__pprriinnttff() function. If the command
- was successfully executed, the value of error is 0.
-
- If no cclloossee() function is defined, no I/O logging plugins are
- loaded, and neither the _t_i_m_e_o_u_t not _u_s_e___p_t_y options are set in the
- command_info list, the ssuuddoo front end may execute the command
- directly instead of running it as a child process.
-
- show_version
- int (*show_version)(int verbose);
-
- The sshhooww__vveerrssiioonn() function is called by ssuuddoo when the user
- specifies the --VV option. The plugin may display its version
- information to the user via the ccoonnvveerrssaattiioonn() or pplluuggiinn__pprriinnttff()
- function using SUDO_CONV_INFO_MSG. If the user requests detailed
- version information, the verbose flag will be set.
-
- Returns 1 on success, 0 on failure, -1 if a general error occurred,
- or -2 if there was a usage error, although the return value is
- currently ignored.
-
- check_policy
- int (*check_policy)(int argc, char * const argv[],
- char *env_add[], char **command_info[],
- char **argv_out[], char **user_env_out[]);
-
- The cchheecckk__ppoolliiccyy() function is called by ssuuddoo to determine whether
- the user is allowed to run the specified commands.
-
- If the _s_u_d_o_e_d_i_t option was enabled in the _s_e_t_t_i_n_g_s array passed to
- the ooppeenn() function, the user has requested _s_u_d_o_e_d_i_t mode.
- _s_u_d_o_e_d_i_t is a mechanism for editing one or more files where an
- editor is run with the user's credentials instead of with elevated
- privileges. ssuuddoo achieves this by creating user-writable temporary
- copies of the files to be edited and then overwriting the originals
- with the temporary copies after editing is complete. If the plugin
- supports _s_u_d_o_e_d_i_t, it should choose the editor to be used,
- potentially from a variable in the user's environment, such as
- EDITOR, and include it in _a_r_g_v___o_u_t (note that environment variables
- may include command line flags). The files to be edited should be
- copied from _a_r_g_v into _a_r_g_v___o_u_t, separated from the editor and its
- arguments by a "--" element. The "--" will be removed by ssuuddoo
- before the editor is executed. The plugin should also set
- _s_u_d_o_e_d_i_t_=_t_r_u_e in the _c_o_m_m_a_n_d___i_n_f_o list.
-
- The cchheecckk__ppoolliiccyy() function returns 1 if the command is allowed, 0
- if not allowed, -1 for a general error, or -2 for a usage error or
- if _s_u_d_o_e_d_i_t was specified but is unsupported by the plugin. In the
- latter case, ssuuddoo will print a usage message before it exits. If
- an error occurs, the plugin may optionally call the ccoonnvveerrssaattiioonn()
- or pplluuggiinn__pprriinnttff() function with SUDO_CONF_ERROR_MSG to present
- additional error information to the user.
-
- The function arguments are as follows:
-
- argc The number of elements in _a_r_g_v, not counting the final NULL
- pointer.
-
- argv The argument vector describing the command the user wishes to
- run, in the same form as what would be passed to the
- execve(2) system call. The vector is terminated by a NULL
- pointer.
-
- env_add
- Additional environment variables specified by the user on the
- command line in the form of a NULL-terminated vector of
- "name=value" strings. The plugin may reject the command if
- one or more variables are not allowed to be set, or it may
- silently ignore such variables.
-
- When parsing _e_n_v___a_d_d, the plugin should split on the ffiirrsstt
- equal sign (`=') since the _n_a_m_e field will never include one
- itself but the _v_a_l_u_e might.
-
- command_info
- Information about the command being run in the form of
- "name=value" strings. These values are used by ssuuddoo to set
- the execution environment when running a command. The plugin
- is responsible for creating and populating the vector, which
- must be terminated with a NULL pointer. The following values
- are recognized by ssuuddoo:
-
- chroot=string
- The root directory to use when running the command.
-
- closefrom=number
- If specified, ssuuddoo will close all files descriptors
- with a value of _n_u_m_b_e_r or higher.
-
- command=string
- Fully qualified path to the command to be executed.
-
- cwd=string
- The current working directory to change to when
- executing the command.
-
- exec_background=bool
- By default, ssuuddoo runs a command as the foreground
- process as long as ssuuddoo itself is running in the
- foreground. When _e_x_e_c___b_a_c_k_g_r_o_u_n_d is enabled and the
- command is being run in a pty (due to I/O logging or
- the _u_s_e___p_t_y setting), the command will be run as a
- background process. Attempts to read from the
- controlling terminal (or to change terminal settings)
- will result in the command being suspended with the
- SIGTTIN signal (or SIGTTOU in the case of terminal
- settings). If this happens when ssuuddoo is a foreground
- process, the command will be granted the controlling
- terminal and resumed in the foreground with no user
- intervention required. The advantage of initially
- running the command in the background is that ssuuddoo need
- not read from the terminal unless the command
- explicitly requests it. Otherwise, any terminal input
- must be passed to the command, whether it has required
- it or not (the kernel buffers terminals so it is not
- possible to tell whether the command really wants the
- input). This is different from historic _s_u_d_o behavior
- or when the command is not being run in a pty.
-
- For this to work seamlessly, the operating system must
- support the automatic restarting of system calls.
- Unfortunately, not all operating systems do this by
- default, and even those that do may have bugs. For
- example, macOS fails to restart the ttccggeettaattttrr() and
- ttccsseettaattttrr() system calls (this is a bug in macOS).
- Furthermore, because this behavior depends on the
- command stopping with the SIGTTIN or SIGTTOU signals,
- programs that catch these signals and suspend
- themselves with a different signal (usually SIGTOP)
- will not be automatically foregrounded. Some versions
- of the linux su(1) command behave this way. Because of
- this, a plugin should not set _e_x_e_c___b_a_c_k_g_r_o_u_n_d unless it
- is explicitly enabled by the administrator and there
- should be a way to enabled or disable it on a per-
- command basis.
-
- This setting has no effect unless I/O logging is
- enabled or _u_s_e___p_t_y is enabled.
-
- execfd=number
- If specified, ssuuddoo will use the fexecve(2) system call
- to execute the command instead of execve(2). The
- specified _n_u_m_b_e_r must refer to an open file descriptor.
-
- iolog_compress=bool
- Set to true if the I/O logging plugins, if any, should
- compress the log data. This is a hint to the I/O
- logging plugin which may choose to ignore it.
-
- iolog_group=string
- The group that will own newly created I/O log files and
- directories. This is a hint to the I/O logging plugin
- which may choose to ignore it.
-
- iolog_mode=octal
- The file permission mode to use when creating I/O log
- files and directories. This is a hint to the I/O
- logging plugin which may choose to ignore it.
-
- iolog_user=string
- The user that will own newly created I/O log files and
- directories. This is a hint to the I/O logging plugin
- which may choose to ignore it.
-
- iolog_path=string
- Fully qualified path to the file or directory in which
- I/O log is to be stored. This is a hint to the I/O
- logging plugin which may choose to ignore it. If no
- I/O logging plugin is loaded, this setting has no
- effect.
-
- iolog_stdin=bool
- Set to true if the I/O logging plugins, if any, should
- log the standard input if it is not connected to a
- terminal device. This is a hint to the I/O logging
- plugin which may choose to ignore it.
-
- iolog_stdout=bool
- Set to true if the I/O logging plugins, if any, should
- log the standard output if it is not connected to a
- terminal device. This is a hint to the I/O logging
- plugin which may choose to ignore it.
-
- iolog_stderr=bool
- Set to true if the I/O logging plugins, if any, should
- log the standard error if it is not connected to a
- terminal device. This is a hint to the I/O logging
- plugin which may choose to ignore it.
-
- iolog_ttyin=bool
- Set to true if the I/O logging plugins, if any, should
- log all terminal input. This only includes input typed
- by the user and not from a pipe or redirected from a
- file. This is a hint to the I/O logging plugin which
- may choose to ignore it.
-
- iolog_ttyout=bool
- Set to true if the I/O logging plugins, if any, should
- log all terminal output. This only includes output to
- the screen, not output to a pipe or file. This is a
- hint to the I/O logging plugin which may choose to
- ignore it.
-
- login_class=string
- BSD login class to use when setting resource limits and
- nice value (optional). This option is only set on
- systems that support login classes.
-
- nice=int
- Nice value (priority) to use when executing the
- command. The nice value, if specified, overrides the
- priority associated with the _l_o_g_i_n___c_l_a_s_s on BSD
- systems.
-
- noexec=bool
- If set, prevent the command from executing other
- programs.
-
- preserve_fds=list
- A comma-separated list of file descriptors that should
- be preserved, regardless of the value of the _c_l_o_s_e_f_r_o_m
- setting. Only available starting with API version 1.5.
-
- preserve_groups=bool
- If set, ssuuddoo will preserve the user's group vector
- instead of initializing the group vector based on
- runas_user.
-
- runas_egid=gid
- Effective group ID to run the command as. If not
- specified, the value of _r_u_n_a_s___g_i_d is used.
-
- runas_euid=uid
- Effective user ID to run the command as. If not
- specified, the value of _r_u_n_a_s___u_i_d is used.
-
- runas_gid=gid
- Group ID to run the command as.
-
- runas_groups=list
- The supplementary group vector to use for the command
- in the form of a comma-separated list of group IDs. If
- _p_r_e_s_e_r_v_e___g_r_o_u_p_s is set, this option is ignored.
-
- runas_uid=uid
- User ID to run the command as.
-
- selinux_role=string
- SELinux role to use when executing the command.
-
- selinux_type=string
- SELinux type to use when executing the command.
-
- set_utmp=bool
- Create a utmp (or utmpx) entry when a pseudo-tty is
- allocated. By default, the new entry will be a copy of
- the user's existing utmp entry (if any), with the tty,
- time, type and pid fields updated.
-
- sudoedit=bool
- Set to true when in _s_u_d_o_e_d_i_t mode. The plugin may
- enable _s_u_d_o_e_d_i_t mode even if ssuuddoo was not invoked as
- ssuuddooeeddiitt. This allows the plugin to perform command
- substitution and transparently enable _s_u_d_o_e_d_i_t when the
- user attempts to run an editor.
-
- sudoedit_checkdir=bool
- Set to false to disable directory writability checks in
- ssuuddooeeddiitt. By default, ssuuddooeeddiitt 1.8.16 and higher will
- check all directory components of the path to be edited
- for writability by the invoking user. Symbolic links
- will not be followed in writable directories and
- ssuuddooeeddiitt will refuse to edit a file located in a
- writable directory. These restrictions are not
- enforced when ssuuddooeeddiitt is run by root. The
- _s_u_d_o_e_d_i_t___f_o_l_l_o_w option can be set to false to disable
- this check. Only available starting with API version
- 1.8.
-
- sudoedit_follow=bool
- Set to true to allow ssuuddooeeddiitt to edit files that are
- symbolic links. By default, ssuuddooeeddiitt 1.8.15 and higher
- will refuse to open a symbolic link. The
- _s_u_d_o_e_d_i_t___f_o_l_l_o_w option can be used to restore the older
- behavior and allow ssuuddooeeddiitt to open symbolic links.
- Only available starting with API version 1.8.
-
- timeout=int
- Command timeout. If non-zero then when the timeout
- expires the command will be killed.
-
- umask=octal
- The file creation mask to use when executing the
- command.
-
- use_pty=bool
- Allocate a pseudo-tty to run the command in, regardless
- of whether or not I/O logging is in use. By default,
- ssuuddoo will only run the command in a pty when an I/O log
- plugin is loaded.
-
- utmp_user=string
- User name to use when constructing a new utmp (or
- utmpx) entry when _s_e_t___u_t_m_p is enabled. This option can
- be used to set the user field in the utmp entry to the
- user the command runs as rather than the invoking user.
- If not set, ssuuddoo will base the new entry on the
- invoking user's existing entry.
-
- Unsupported values will be ignored.
-
- argv_out
- The NULL-terminated argument vector to pass to the execve(2)
- system call when executing the command. The plugin is
- responsible for allocating and populating the vector.
-
- user_env_out
- The NULL-terminated environment vector to use when executing
- the command. The plugin is responsible for allocating and
- populating the vector.
-
- list
- int (*list)(int argc, char * const argv[],
- int verbose, const char *list_user);
-
- List available privileges for the invoking user. Returns 1 on
- success, 0 on failure and -1 on error. On error, the plugin may
- optionally call the ccoonnvveerrssaattiioonn() or pplluuggiinn__pprriinnttff() function with
- SUDO_CONF_ERROR_MSG to present additional error information to the
- user.
-
- Privileges should be output via the ccoonnvveerrssaattiioonn() or
- pplluuggiinn__pprriinnttff() function using SUDO_CONV_INFO_MSG,
-
- verbose
- Flag indicating whether to list in verbose mode or not.
-
- list_user
- The name of a different user to list privileges for if the
- policy allows it. If NULL, the plugin should list the
- privileges of the invoking user.
-
- argc The number of elements in _a_r_g_v, not counting the final NULL
- pointer.
-
- argv If non-NULL, an argument vector describing a command the user
- wishes to check against the policy in the same form as what
- would be passed to the execve(2) system call. If the command
- is permitted by the policy, the fully-qualified path to the
- command should be displayed along with any command line
- arguments.
-
- validate
- int (*validate)(void);
-
- The vvaalliiddaattee() function is called when ssuuddoo is run with the --vv
- flag. For policy plugins such as ssuuddooeerrss that cache authentication
- credentials, this function will validate and cache the credentials.
-
- The vvaalliiddaattee() function should be NULL if the plugin does not
- support credential caching.
-
- Returns 1 on success, 0 on failure and -1 on error. On error, the
- plugin may optionally call the ccoonnvveerrssaattiioonn() or pplluuggiinn__pprriinnttff()
- function with SUDO_CONF_ERROR_MSG to present additional error
- information to the user.
-
- invalidate
- void (*invalidate)(int remove);
-
- The iinnvvaalliiddaattee() function is called when ssuuddoo is called with the --kk
- or --KK flag. For policy plugins such as ssuuddooeerrss that cache
- authentication credentials, this function will invalidate the
- credentials. If the _r_e_m_o_v_e flag is set, the plugin may remove the
- credentials instead of simply invalidating them.
-
- The iinnvvaalliiddaattee() function should be NULL if the plugin does not
- support credential caching.
-
- init_session
- int (*init_session)(struct passwd *pwd, char **user_envp[);
-
- The iinniitt__sseessssiioonn() function is called before ssuuddoo sets up the
- execution environment for the command. It is run in the parent
- ssuuddoo process and before any uid or gid changes. This can be used
- to perform session setup that is not supported by _c_o_m_m_a_n_d___i_n_f_o,
- such as opening the PAM session. The cclloossee() function can be used
- to tear down the session that was opened by init_session.
-
- The _p_w_d argument points to a passwd struct for the user the command
- will be run as if the uid the command will run as was found in the
- password database, otherwise it will be NULL.
-
- The _u_s_e_r___e_n_v argument points to the environment the command will
- run in, in the form of a NULL-terminated vector of "name=value"
- strings. This is the same string passed back to the front end via
- the Policy Plugin's _u_s_e_r___e_n_v___o_u_t parameter. If the iinniitt__sseessssiioonn()
- function needs to modify the user environment, it should update the
- pointer stored in _u_s_e_r___e_n_v. The expected use case is to merge the
- contents of the PAM environment (if any) with the contents of
- _u_s_e_r___e_n_v. NOTE: the _u_s_e_r___e_n_v parameter is only available starting
- with API version 1.2. A plugin mmuusstt check the API version
- specified by the ssuuddoo front end before using _u_s_e_r___e_n_v. Failure to
- do so may result in a crash.
-
- Returns 1 on success, 0 on failure and -1 on error. On error, the
- plugin may optionally call the ccoonnvveerrssaattiioonn() or pplluuggiinn__pprriinnttff()
- function with SUDO_CONF_ERROR_MSG to present additional error
- information to the user.
-
- register_hooks
- void (*register_hooks)(int version,
- int (*register_hook)(struct sudo_hook *hook));
-
- The rreeggiisstteerr__hhooookkss() function is called by the sudo front end to
- register any hooks the plugin needs. If the plugin does not
- support hooks, register_hooks should be set to the NULL pointer.
-
- The _v_e_r_s_i_o_n argument describes the version of the hooks API
- supported by the ssuuddoo front end.
-
- The rreeggiisstteerr__hhooookk() function should be used to register any
- supported hooks the plugin needs. It returns 0 on success, 1 if
- the hook type is not supported and -1 if the major version in
- struct hook does not match the front end's major hook API version.
-
- See the _H_o_o_k _f_u_n_c_t_i_o_n _A_P_I section below for more information about
- hooks.
-
- NOTE: the rreeggiisstteerr__hhooookkss() function is only available starting with
- API version 1.2. If the ssuuddoo front end doesn't support API version
- 1.2 or higher, register_hooks will not be called.
-
- deregister_hooks
- void (*deregister_hooks)(int version,
- int (*deregister_hook)(struct sudo_hook *hook));
-
- The ddeerreeggiisstteerr__hhooookkss() function is called by the sudo front end to
- deregister any hooks the plugin has registered. If the plugin does
- not support hooks, deregister_hooks should be set to the NULL
- pointer.
-
- The _v_e_r_s_i_o_n argument describes the version of the hooks API
- supported by the ssuuddoo front end.
-
- The ddeerreeggiisstteerr__hhooookk() function should be used to deregister any
- hooks that were put in place by the rreeggiisstteerr__hhooookk() function. If
- the plugin tries to deregister a hook that the front end does not
- support, deregister_hook will return an error.
-
- See the _H_o_o_k _f_u_n_c_t_i_o_n _A_P_I section below for more information about
- hooks.
-
- NOTE: the ddeerreeggiisstteerr__hhooookkss() function is only available starting
- with API version 1.2. If the ssuuddoo front end doesn't support API
- version 1.2 or higher, deregister_hooks will not be called.
-
- _P_o_l_i_c_y _P_l_u_g_i_n _V_e_r_s_i_o_n _M_a_c_r_o_s
-
- /* Plugin API version major/minor. */
- #define SUDO_API_VERSION_MAJOR 1
- #define SUDO_API_VERSION_MINOR 13
- #define SUDO_API_MKVERSION(x, y) ((x << 16) | y)
- #define SUDO_API_VERSION SUDO_API_MKVERSION(SUDO_API_VERSION_MAJOR,\
- SUDO_API_VERSION_MINOR)
-
- /* Getters and setters for API version */
- #define SUDO_API_VERSION_GET_MAJOR(v) ((v) >> 16)
- #define SUDO_API_VERSION_GET_MINOR(v) ((v) & 0xffff)
- #define SUDO_API_VERSION_SET_MAJOR(vp, n) do { \
- *(vp) = (*(vp) & 0x0000ffff) | ((n) << 16); \
- } while(0)
- #define SUDO_API_VERSION_SET_MINOR(vp, n) do { \
- *(vp) = (*(vp) & 0xffff0000) | (n); \
- } while(0)
-
- II//OO pplluuggiinn AAPPII
- struct io_plugin {
- #define SUDO_IO_PLUGIN 2
- unsigned int type; /* always SUDO_IO_PLUGIN */
- unsigned int version; /* always SUDO_API_VERSION */
- int (*open)(unsigned int version, sudo_conv_t conversation,
- sudo_printf_t plugin_printf, char * const settings[],
- char * const user_info[], char * const command_info[],
- int argc, char * const argv[], char * const user_env[],
- char * const plugin_options[]);
- void (*close)(int exit_status, int error); /* wait status or error */
- int (*show_version)(int verbose);
- int (*log_ttyin)(const char *buf, unsigned int len);
- int (*log_ttyout)(const char *buf, unsigned int len);
- int (*log_stdin)(const char *buf, unsigned int len);
- int (*log_stdout)(const char *buf, unsigned int len);
- int (*log_stderr)(const char *buf, unsigned int len);
- void (*register_hooks)(int version,
- int (*register_hook)(struct sudo_hook *hook));
- void (*deregister_hooks)(int version,
- int (*deregister_hook)(struct sudo_hook *hook));
- int (*change_winsize)(unsigned int lines, unsigned int cols);
- int (*log_suspend)(int signo);
- };
-
- When an I/O plugin is loaded, ssuuddoo runs the command in a pseudo-tty.
- This makes it possible to log the input and output from the user's
- session. If any of the standard input, standard output or standard error
- do not correspond to a tty, ssuuddoo will open a pipe to capture the I/O for
- logging before passing it on.
-
- The log_ttyin function receives the raw user input from the terminal
- device (note that this will include input even when echo is disabled,
- such as when a password is read). The log_ttyout function receives
- output from the pseudo-tty that is suitable for replaying the user's
- session at a later time. The lloogg__ssttddiinn(), lloogg__ssttddoouutt() and lloogg__ssttddeerrrr()
- functions are only called if the standard input, standard output or
- standard error respectively correspond to something other than a tty.
-
- Any of the logging functions may be set to the NULL pointer if no logging
- is to be performed. If the open function returns 0, no I/O will be sent
- to the plugin.
-
- If a logging function returns an error (-1), the running command will be
- terminated and all of the plugin's logging functions will be disabled.
- Other I/O logging plugins will still receive any remaining input or
- output that has not yet been processed.
-
- If an input logging function rejects the data by returning 0, the command
- will be terminated and the data will not be passed to the command, though
- it will still be sent to any other I/O logging plugins. If an output
- logging function rejects the data by returning 0, the command will be
- terminated and the data will not be written to the terminal, though it
- will still be sent to any other I/O logging plugins.
-
- The io_plugin struct has the following fields:
-
- type The type field should always be set to SUDO_IO_PLUGIN.
-
- version
- The version field should be set to SUDO_API_VERSION.
-
- This allows ssuuddoo to determine the API version the plugin was built
- against.
-
- open
- int (*open)(unsigned int version, sudo_conv_t conversation,
- sudo_printf_t plugin_printf, char * const settings[],
- char * const user_info[], char * const command_info[],
- int argc, char * const argv[], char * const user_env[],
- char * const plugin_options[]);
-
- The ooppeenn() function is run before the lloogg__ttttyyiinn(), lloogg__ttttyyoouutt(),
- lloogg__ssttddiinn(), lloogg__ssttddoouutt(), lloogg__ssttddeerrrr(), lloogg__ssuussppeenndd(),
- cchhaannggee__wwiinnssiizzee(), or sshhooww__vveerrssiioonn() functions are called. It is
- only called if the version is being requested or if the policy
- plugin's cchheecckk__ppoolliiccyy() function has returned successfully. It
- returns 1 on success, 0 on failure, -1 if a general error occurred,
- or -2 if there was a usage error. In the latter case, ssuuddoo will
- print a usage message before it exits. If an error occurs, the
- plugin may optionally call the ccoonnvveerrssaattiioonn() or pplluuggiinn__pprriinnttff()
- function with SUDO_CONF_ERROR_MSG to present additional error
- information to the user.
-
- The function arguments are as follows:
-
- version
- The version passed in by ssuuddoo allows the plugin to determine
- the major and minor version number of the plugin API
- supported by ssuuddoo.
-
- conversation
- A pointer to the ccoonnvveerrssaattiioonn() function that may be used by
- the sshhooww__vveerrssiioonn() function to display version information
- (see sshhooww__vveerrssiioonn() below). The ccoonnvveerrssaattiioonn() function may
- also be used to display additional error message to the user.
- The ccoonnvveerrssaattiioonn() function returns 0 on success and -1 on
- failure.
-
- plugin_printf
- A pointer to a pprriinnttff()-style function that may be used by
- the sshhooww__vveerrssiioonn() function to display version information
- (see show_version below). The pplluuggiinn__pprriinnttff() function may
- also be used to display additional error message to the user.
- The pplluuggiinn__pprriinnttff() function returns number of characters
- printed on success and -1 on failure.
-
- settings
- A vector of user-supplied ssuuddoo settings in the form of
- "name=value" strings. The vector is terminated by a NULL
- pointer. These settings correspond to flags the user
- specified when running ssuuddoo. As such, they will only be
- present when the corresponding flag has been specified on the
- command line.
-
- When parsing _s_e_t_t_i_n_g_s, the plugin should split on the ffiirrsstt
- equal sign (`=') since the _n_a_m_e field will never include one
- itself but the _v_a_l_u_e might.
-
- See the _P_o_l_i_c_y _p_l_u_g_i_n _A_P_I section for a list of all possible
- settings.
-
- user_info
- A vector of information about the user running the command in
- the form of "name=value" strings. The vector is terminated
- by a NULL pointer.
-
- When parsing _u_s_e_r___i_n_f_o, the plugin should split on the ffiirrsstt
- equal sign (`=') since the _n_a_m_e field will never include one
- itself but the _v_a_l_u_e might.
-
- See the _P_o_l_i_c_y _p_l_u_g_i_n _A_P_I section for a list of all possible
- strings.
-
- argc The number of elements in _a_r_g_v, not counting the final NULL
- pointer. It can be zero, when ssuuddoo is called with --VV.
-
- argv If non-NULL, an argument vector describing a command the user
- wishes to run in the same form as what would be passed to the
- execve(2) system call.
-
- user_env
- The user's environment in the form of a NULL-terminated
- vector of "name=value" strings.
-
- When parsing _u_s_e_r___e_n_v, the plugin should split on the ffiirrsstt
- equal sign (`=') since the _n_a_m_e field will never include one
- itself but the _v_a_l_u_e might.
-
- plugin_options
- Any (non-comment) strings immediately after the plugin path
- are treated as arguments to the plugin. These arguments are
- split on a white space boundary and are passed to the plugin
- in the form of a NULL-terminated array of strings. If no
- arguments were specified, _p_l_u_g_i_n___o_p_t_i_o_n_s will be the NULL
- pointer.
-
- NOTE: the _p_l_u_g_i_n___o_p_t_i_o_n_s parameter is only available starting
- with API version 1.2. A plugin mmuusstt check the API version
- specified by the ssuuddoo front end before using _p_l_u_g_i_n___o_p_t_i_o_n_s.
- Failure to do so may result in a crash.
-
- close
- void (*close)(int exit_status, int error);
-
- The cclloossee() function is called when the command being run by ssuuddoo
- finishes.
-
- The function arguments are as follows:
-
- exit_status
- The command's exit status, as returned by the wait(2) system
- call. The value of exit_status is undefined if error is non-
- zero.
-
- error
- If the command could not be executed, this is set to the
- value of errno set by the execve(2) system call. If the
- command was successfully executed, the value of error is 0.
-
- show_version
- int (*show_version)(int verbose);
-
- The sshhooww__vveerrssiioonn() function is called by ssuuddoo when the user
- specifies the --VV option. The plugin may display its version
- information to the user via the ccoonnvveerrssaattiioonn() or pplluuggiinn__pprriinnttff()
- function using SUDO_CONV_INFO_MSG. If the user requests detailed
- version information, the verbose flag will be set.
-
- Returns 1 on success, 0 on failure, -1 if a general error occurred,
- or -2 if there was a usage error, although the return value is
- currently ignored.
-
- log_ttyin
- int (*log_ttyin)(const char *buf, unsigned int len);
-
- The lloogg__ttttyyiinn() function is called whenever data can be read from
- the user but before it is passed to the running command. This
- allows the plugin to reject data if it chooses to (for instance if
- the input contains banned content). Returns 1 if the data should
- be passed to the command, 0 if the data is rejected (which will
- terminate the running command) or -1 if an error occurred.
-
- The function arguments are as follows:
-
- buf The buffer containing user input.
-
- len The length of _b_u_f in bytes.
-
- log_ttyout
- int (*log_ttyout)(const char *buf, unsigned int len);
-
- The lloogg__ttttyyoouutt() function is called whenever data can be read from
- the command but before it is written to the user's terminal. This
- allows the plugin to reject data if it chooses to (for instance if
- the output contains banned content). Returns 1 if the data should
- be passed to the user, 0 if the data is rejected (which will
- terminate the running command) or -1 if an error occurred.
-
- The function arguments are as follows:
-
- buf The buffer containing command output.
-
- len The length of _b_u_f in bytes.
-
- log_stdin
- int (*log_stdin)(const char *buf, unsigned int len);
-
- The lloogg__ssttddiinn() function is only used if the standard input does
- not correspond to a tty device. It is called whenever data can be
- read from the standard input but before it is passed to the running
- command. This allows the plugin to reject data if it chooses to
- (for instance if the input contains banned content). Returns 1 if
- the data should be passed to the command, 0 if the data is rejected
- (which will terminate the running command) or -1 if an error
- occurred.
-
- The function arguments are as follows:
-
- buf The buffer containing user input.
-
- len The length of _b_u_f in bytes.
-
- log_stdout
- int (*log_stdout)(const char *buf, unsigned int len);
-
- The lloogg__ssttddoouutt() function is only used if the standard output does
- not correspond to a tty device. It is called whenever data can be
- read from the command but before it is written to the standard
- output. This allows the plugin to reject data if it chooses to
- (for instance if the output contains banned content). Returns 1 if
- the data should be passed to the user, 0 if the data is rejected
- (which will terminate the running command) or -1 if an error
- occurred.
-
- The function arguments are as follows:
-
- buf The buffer containing command output.
-
- len The length of _b_u_f in bytes.
-
- log_stderr
- int (*log_stderr)(const char *buf, unsigned int len);
-
- The lloogg__ssttddeerrrr() function is only used if the standard error does
- not correspond to a tty device. It is called whenever data can be
- read from the command but before it is written to the standard
- error. This allows the plugin to reject data if it chooses to (for
- instance if the output contains banned content). Returns 1 if the
- data should be passed to the user, 0 if the data is rejected (which
- will terminate the running command) or -1 if an error occurred.
-
- The function arguments are as follows:
-
- buf The buffer containing command output.
-
- len The length of _b_u_f in bytes.
-
- register_hooks
- See the _P_o_l_i_c_y _p_l_u_g_i_n _A_P_I section for a description of
- register_hooks.
-
- deregister_hooks
- See the _P_o_l_i_c_y _p_l_u_g_i_n _A_P_I section for a description of
- deregister_hooks.
-
- change_winsize
- int (*change_winsize)(unsigned int lines, unsigned int cols);
-
- The cchhaannggee__wwiinnssiizzee() function is called whenever the window size of
- the terminal changes from the initial values specified in the
- user_info list. Returns -1 if an error occurred, in which case no
- further calls to cchhaannggee__wwiinnssiizzee() will be made,
-
- log_suspend
- int (*log_suspend)(int signo);
-
- The lloogg__ssuussppeenndd() function is called whenever a command is
- suspended or resumed. The _s_i_g_n_o argument is either the signal that
- caused the command to be suspended or SIGCONT if the command was
- resumed. Logging this information makes it possible to skip the
- period of time when the command was suspended during playback of a
- session. Returns -1 if an error occurred, in which case no further
- calls to lloogg__ssuussppeenndd() will be made,
-
- _I_/_O _P_l_u_g_i_n _V_e_r_s_i_o_n _M_a_c_r_o_s
-
- Same as for the _P_o_l_i_c_y _p_l_u_g_i_n _A_P_I.
-
- SSiiggnnaall hhaannddlleerrss
- The ssuuddoo front end installs default signal handlers to trap common
- signals while the plugin functions are run. The following signals are
- trapped by default before the command is executed:
-
- ++oo SIGALRM
- ++oo SIGHUP
- ++oo SIGINT
- ++oo SIGPIPE
- ++oo SIGQUIT
- ++oo SIGTERM
- ++oo SIGTSTP
- ++oo SIGUSR1
- ++oo SIGUSR2
-
- If a fatal signal is received before the command is executed, ssuuddoo will
- call the plugin's cclloossee() function with an exit status of 128 plus the
- value of the signal that was received. This allows for consistent
- logging of commands killed by a signal for plugins that log such
- information in their cclloossee() function. An exception to this is SIGPIPE,
- which is ignored until the command is executed.
-
- A plugin may temporarily install its own signal handlers but must restore
- the original handler before the plugin function returns.
-
- HHooookk ffuunnccttiioonn AAPPII
- Beginning with plugin API version 1.2, it is possible to install hooks
- for certain functions called by the ssuuddoo front end.
-
- Currently, the only supported hooks relate to the handling of environment
- variables. Hooks can be used to intercept attempts to get, set, or
- remove environment variables so that these changes can be reflected in
- the version of the environment that is used to execute a command. A
- future version of the API will support hooking internal ssuuddoo front end
- functions as well.
-
- _H_o_o_k _s_t_r_u_c_t_u_r_e
-
- Hooks in ssuuddoo are described by the following structure:
-
- typedef int (*sudo_hook_fn_t)();
-
- struct sudo_hook {
- unsigned int hook_version;
- unsigned int hook_type;
- sudo_hook_fn_t hook_fn;
- void *closure;
- };
-
- The sudo_hook structure has the following fields:
-
- hook_version
- The hook_version field should be set to SUDO_HOOK_VERSION.
-
- hook_type
- The hook_type field may be one of the following supported hook
- types:
-
- SUDO_HOOK_SETENV
- The C library setenv(3) function. Any registered hooks will
- run before the C library implementation. The hook_fn field
- should be a function that matches the following typedef:
-
- typedef int (*sudo_hook_fn_setenv_t)(const char *name,
- const char *value, int overwrite, void *closure);
-
- If the registered hook does not match the typedef the results
- are unspecified.
-
- SUDO_HOOK_UNSETENV
- The C library unsetenv(3) function. Any registered hooks
- will run before the C library implementation. The hook_fn
- field should be a function that matches the following
- typedef:
-
- typedef int (*sudo_hook_fn_unsetenv_t)(const char *name,
- void *closure);
-
- SUDO_HOOK_GETENV
- The C library getenv(3) function. Any registered hooks will
- run before the C library implementation. The hook_fn field
- should be a function that matches the following typedef:
-
- typedef int (*sudo_hook_fn_getenv_t)(const char *name,
- char **value, void *closure);
-
- If the registered hook does not match the typedef the results
- are unspecified.
-
- SUDO_HOOK_PUTENV
- The C library putenv(3) function. Any registered hooks will
- run before the C library implementation. The hook_fn field
- should be a function that matches the following typedef:
-
- typedef int (*sudo_hook_fn_putenv_t)(char *string,
- void *closure);
-
- If the registered hook does not match the typedef the results
- are unspecified.
-
- hook_fn
- sudo_hook_fn_t hook_fn;
-
- The hook_fn field should be set to the plugin's hook
- implementation. The actual function arguments will vary depending
- on the hook_type (see hook_type above). In all cases, the closure
- field of struct sudo_hook is passed as the last function parameter.
- This can be used to pass arbitrary data to the plugin's hook
- implementation.
-
- The function return value may be one of the following:
-
- SUDO_HOOK_RET_ERROR
- The hook function encountered an error.
-
- SUDO_HOOK_RET_NEXT
- The hook completed without error, go on to the next hook
- (including the native implementation if applicable). For
- example, a getenv(3) hook might return SUDO_HOOK_RET_NEXT if
- the specified variable was not found in the private copy of
- the environment.
-
- SUDO_HOOK_RET_STOP
- The hook completed without error, stop processing hooks for
- this invocation. This can be used to replace the native
- implementation. For example, a setenv hook that operates on
- a private copy of the environment but leaves environ
- unchanged.
-
- Note that it is very easy to create an infinite loop when hooking C
- library functions. For example, a getenv(3) hook that calls the
- snprintf(3) function may create a loop if the snprintf(3) implementation
- calls getenv(3) to check the locale. To prevent this, you may wish to
- use a static variable in the hook function to guard against nested calls.
- For example:
-
- static int in_progress = 0; /* avoid recursion */
- if (in_progress)
- return SUDO_HOOK_RET_NEXT;
- in_progress = 1;
- ...
- in_progress = 0;
- return SUDO_HOOK_RET_STOP;
-
- _H_o_o_k _A_P_I _V_e_r_s_i_o_n _M_a_c_r_o_s
-
- /* Hook API version major/minor */
- #define SUDO_HOOK_VERSION_MAJOR 1
- #define SUDO_HOOK_VERSION_MINOR 0
- #define SUDO_HOOK_VERSION SUDO_API_MKVERSION(SUDO_HOOK_VERSION_MAJOR,\
- SUDO_HOOK_VERSION_MINOR)
-
- For getters and setters see the _P_o_l_i_c_y _p_l_u_g_i_n _A_P_I.
-
- RReemmoottee ccoommmmaanndd eexxeeccuuttiioonn
- The ssuuddoo front end does not have native support for running remote
- commands. However, starting with ssuuddoo 1.8.8, the --hh option may be used
- to specify a remote host that is passed to the policy plugin. A plugin
- may also accept a _r_u_n_a_s___u_s_e_r in the form of "user@hostname" which will
- work with older versions of ssuuddoo. It is anticipated that remote commands
- will be supported by executing a "helper" program. The policy plugin
- should setup the execution environment such that the ssuuddoo front end will
- run the helper which, in turn, will connect to the remote host and run
- the command.
-
- For example, the policy plugin could utilize sssshh to perform remote
- command execution. The helper program would be responsible for running
- sssshh with the proper options to use a private key or certificate that the
- remote host will accept and run a program on the remote host that would
- setup the execution environment accordingly.
-
- Note that remote ssuuddooeeddiitt functionality must be handled by the policy
- plugin, not ssuuddoo itself as the front end has no knowledge that a remote
- command is being executed. This may be addressed in a future revision of
- the plugin API.
-
- CCoonnvveerrssaattiioonn AAPPII
- If the plugin needs to interact with the user, it may do so via the
- ccoonnvveerrssaattiioonn() function. A plugin should not attempt to read directly
- from the standard input or the user's tty (neither of which are
- guaranteed to exist). The caller must include a trailing newline in msg
- if one is to be printed.
-
- A pprriinnttff()-style function is also available that can be used to display
- informational or error messages to the user, which is usually more
- convenient for simple messages where no use input is required.
-
- _C_o_n_v_e_r_s_a_t_i_o_n _f_u_n_c_t_i_o_n _s_t_r_u_c_t_u_r_e_s
-
- The conversation function takes as arguments pointers to the following
- structures:
-
- struct sudo_conv_message {
- #define SUDO_CONV_PROMPT_ECHO_OFF 0x0001 /* do not echo user input */
- #define SUDO_CONV_PROMPT_ECHO_ON 0x0002 /* echo user input */
- #define SUDO_CONV_ERROR_MSG 0x0003 /* error message */
- #define SUDO_CONV_INFO_MSG 0x0004 /* informational message */
- #define SUDO_CONV_PROMPT_MASK 0x0005 /* mask user input */
- #define SUDO_CONV_PROMPT_ECHO_OK 0x1000 /* flag: allow echo if no tty */
- #define SUDO_CONV_PREFER_TTY 0x2000 /* flag: use tty if possible */
- int msg_type;
- int timeout;
- const char *msg;
- };
-
- #define SUDO_CONV_REPL_MAX 255
-
- struct sudo_conv_reply {
- char *reply;
- };
-
- typedef int (*sudo_conv_callback_fn_t)(int signo, void *closure);
- struct sudo_conv_callback {
- unsigned int version;
- void *closure;
- sudo_conv_callback_fn_t on_suspend;
- sudo_conv_callback_fn_t on_resume;
- };
-
- Pointers to the ccoonnvveerrssaattiioonn() and pprriinnttff()-style functions are passed in
- to the plugin's ooppeenn() function when the plugin is initialized. The
- following type definitions can be used in the declaration of the ooppeenn()
- function:
-
- typedef int (*sudo_conv_t)(int num_msgs,
- const struct sudo_conv_message msgs[],
- struct sudo_conv_reply replies[],
- struct sudo_conv_callback *callback);
-
- typedef int (*sudo_printf_t)(int msg_type, const char *fmt, ...);
-
- To use the ccoonnvveerrssaattiioonn() function, the plugin must pass an array of
- sudo_conv_message and sudo_conv_reply structures. There must be a struct
- sudo_conv_message and struct sudo_conv_reply for each message in the
- conversation, that is, both arrays must have the same number of elements.
- Each struct sudo_conv_reply must have its _r_e_p_l_y member initialized to
- NULL. The struct sudo_conv_callback pointer, if not NULL, should contain
- function pointers to be called when the ssuuddoo process is suspended and/or
- resumed during conversation input. The _o_n___s_u_s_p_e_n_d and _o_n___r_e_s_u_m_e
- functions are called with the signal that caused ssuuddoo to be suspended and
- the _c_l_o_s_u_r_e pointer from the struct sudo_conv_callback. These functions
- should return 0 on success and -1 on error. On error, the conversation
- will end and the conversation function will return a value of -1. The
- intended use is to allow the plugin to release resources, such as locks,
- that should not be held indefinitely while suspended and then reacquire
- them when the process is resumed. Note that the functions are not
- actually invoked from within a signal handler.
-
- The _m_s_g___t_y_p_e must be set to one of the following values:
-
- SUDO_CONV_PROMPT_ECHO_OFF
- Prompt the user for input with echo disabled; this is generally
- used for passwords. The reply will be stored in the _r_e_p_l_i_e_s array,
- and it will never be NULL.
-
- SUDO_CONV_PROMPT_ECHO_ON
- Prompt the user for input with echo enabled. The reply will be
- stored in the _r_e_p_l_i_e_s array, and it will never be NULL.
-
- SUDO_CONV_ERROR_MSG
- Display an error message. The message is written to the standard
- error unless the SUDO_CONV_PREFER_TTY flag is set, in which case it
- is written to the user's terminal if possible.
-
- SUDO_CONV_INFO_MSG
- Display a message. The message is written to the standard output
- unless the SUDO_CONV_PREFER_TTY flag is set, in which case it is
- written to the user's terminal if possible.
-
- SUDO_CONV_PROMPT_MASK
- Prompt the user for input but echo an asterisk character for each
- character read. The reply will be stored in the _r_e_p_l_i_e_s array, and
- it will never be NULL. This can be used to provide visual feedback
- to the user while reading sensitive information that should not be
- displayed.
-
- In addition to the above values, the following flag bits may also be set:
-
- SUDO_CONV_PROMPT_ECHO_OK
- Allow input to be read when echo cannot be disabled when the
- message type is SUDO_CONV_PROMPT_ECHO_OFF or SUDO_CONV_PROMPT_MASK.
- By default, ssuuddoo will refuse to read input if the echo cannot be
- disabled for those message types.
-
- SUDO_CONV_PREFER_TTY
- When displaying a message via SUDO_CONV_ERROR_MSG or
- SUDO_CONV_INFO_MSG, try to write the message to the user's
- terminal. If the terminal is unavailable, the standard error or
- standard output will be used, depending upon whether The user's
- terminal is always used when possible for input, this flag is only
- used for output. SUDO_CONV_ERROR_MSG or SUDO_CONV_INFO_MSG was
- used.
-
- The _t_i_m_e_o_u_t in seconds until the prompt will wait for no more input. A
- zero value implies an infinite timeout.
-
- The plugin is responsible for freeing the reply buffer located in each
- struct sudo_conv_reply, if it is not NULL. SUDO_CONV_REPL_MAX represents
- the maximum length of the reply buffer (not including the trailing NUL
- character). In practical terms, this is the longest password ssuuddoo will
- support. It is also useful as a maximum value for the mmeemmsseett__ss()
- function when clearing passwords filled in by the conversation function.
-
- The pprriinnttff()-style function uses the same underlying mechanism as the
- ccoonnvveerrssaattiioonn() function but only supports SUDO_CONV_INFO_MSG and
- SUDO_CONV_ERROR_MSG for the _m_s_g___t_y_p_e parameter. It can be more
- convenient than using the ccoonnvveerrssaattiioonn() function if no user reply is
- needed and supports standard pprriinnttff() escape sequences.
-
- See the sample plugin for an example of the ccoonnvveerrssaattiioonn() function
- usage.
-
- SSuuddooeerrss ggrroouupp pplluuggiinn AAPPII
- The ssuuddooeerrss plugin supports its own plugin interface to allow non-Unix
- group lookups. This can be used to query a group source other than the
- standard Unix group database. Two sample group plugins are bundled with
- ssuuddoo, _g_r_o_u_p___f_i_l_e and _s_y_s_t_e_m___g_r_o_u_p, are detailed in sudoers(4). Third
- party group plugins include a QAS AD plugin available from Quest
- Software.
-
- A group plugin must declare and populate a sudoers_group_plugin struct in
- the global scope. This structure contains pointers to the functions that
- implement plugin initialization, cleanup and group lookup.
-
- struct sudoers_group_plugin {
- unsigned int version;
- int (*init)(int version, sudo_printf_t sudo_printf,
- char *const argv[]);
- void (*cleanup)(void);
- int (*query)(const char *user, const char *group,
- const struct passwd *pwd);
- };
-
- The sudoers_group_plugin struct has the following fields:
-
- version
- The version field should be set to GROUP_API_VERSION.
-
- This allows ssuuddooeerrss to determine the API version the group plugin
- was built against.
-
- init
- int (*init)(int version, sudo_printf_t plugin_printf,
- char *const argv[]);
-
- The iinniitt() function is called after _s_u_d_o_e_r_s has been parsed but
- before any policy checks. It returns 1 on success, 0 on failure
- (or if the plugin is not configured), and -1 if a error occurred.
- If an error occurs, the plugin may call the pplluuggiinn__pprriinnttff()
- function with SUDO_CONF_ERROR_MSG to present additional error
- information to the user.
-
- The function arguments are as follows:
-
- version
- The version passed in by ssuuddooeerrss allows the plugin to
- determine the major and minor version number of the group
- plugin API supported by ssuuddooeerrss.
-
- plugin_printf
- A pointer to a pprriinnttff()-style function that may be used to
- display informational or error message to the user. Returns
- the number of characters printed on success and -1 on
- failure.
-
- argv A NULL-terminated array of arguments generated from the
- _g_r_o_u_p___p_l_u_g_i_n option in _s_u_d_o_e_r_s. If no arguments were given,
- _a_r_g_v will be NULL.
-
- cleanup
- void (*cleanup)();
-
- The cclleeaannuupp() function is called when ssuuddooeerrss has finished its
- group checks. The plugin should free any memory it has allocated
- and close open file handles.
-
- query
- int (*query)(const char *user, const char *group,
- const struct passwd *pwd);
-
- The qquueerryy() function is used to ask the group plugin whether _u_s_e_r
- is a member of _g_r_o_u_p.
-
- The function arguments are as follows:
-
- user The name of the user being looked up in the external group
- database.
-
- group
- The name of the group being queried.
-
- pwd The password database entry for _u_s_e_r, if any. If _u_s_e_r is not
- present in the password database, _p_w_d will be NULL.
-
- _G_r_o_u_p _A_P_I _V_e_r_s_i_o_n _M_a_c_r_o_s
-
- /* Sudoers group plugin version major/minor */
- #define GROUP_API_VERSION_MAJOR 1
- #define GROUP_API_VERSION_MINOR 0
- #define GROUP_API_VERSION ((GROUP_API_VERSION_MAJOR << 16) | \
- GROUP_API_VERSION_MINOR)
- For getters and setters see the _P_o_l_i_c_y _p_l_u_g_i_n _A_P_I.
-
-PPLLUUGGIINN AAPPII CCHHAANNGGEELLOOGG
- The following revisions have been made to the Sudo Plugin API.
-
- Version 1.0
- Initial API version.
-
- Version 1.1 (sudo 1.8.0)
- The I/O logging plugin's ooppeenn() function was modified to take the
- command_info list as an argument.
-
- Version 1.2 (sudo 1.8.5)
- The Policy and I/O logging plugins' ooppeenn() functions are now passed
- a list of plugin parameters if any are specified in sudo.conf(4).
-
- A simple hooks API has been introduced to allow plugins to hook in
- to the system's environment handling functions.
-
- The init_session Policy plugin function is now passed a pointer to
- the user environment which can be updated as needed. This can be
- used to merge in environment variables stored in the PAM handle
- before a command is run.
-
- Version 1.3 (sudo 1.8.7)
- Support for the _e_x_e_c___b_a_c_k_g_r_o_u_n_d entry has been added to the
- command_info list.
-
- The _m_a_x___g_r_o_u_p_s and _p_l_u_g_i_n___d_i_r entries were added to the settings
- list.
-
- The vveerrssiioonn() and cclloossee() functions are now optional. Previously,
- a missing vveerrssiioonn() or cclloossee() function would result in a crash.
- If no policy plugin cclloossee() function is defined, a default cclloossee()
- function will be provided by the ssuuddoo front end that displays a
- warning if the command could not be executed.
-
- The ssuuddoo front end now installs default signal handlers to trap
- common signals while the plugin functions are run.
-
- Version 1.4 (sudo 1.8.8)
- The _r_e_m_o_t_e___h_o_s_t entry was added to the settings list.
-
- Version 1.5 (sudo 1.8.9)
- The _p_r_e_s_e_r_v_e___f_d_s entry was added to the command_info list.
-
- Version 1.6 (sudo 1.8.11)
- The behavior when an I/O logging plugin returns an error (-1) has
- changed. Previously, the ssuuddoo front end took no action when the
- lloogg__ttttyyiinn(), lloogg__ttttyyoouutt(), lloogg__ssttddiinn(), lloogg__ssttddoouutt(), or
- lloogg__ssttddeerrrr() function returned an error.
-
- The behavior when an I/O logging plugin returns 0 has changed.
- Previously, output from the command would be displayed to the
- terminal even if an output logging function returned 0.
-
- Version 1.7 (sudo 1.8.12)
- The _p_l_u_g_i_n___p_a_t_h entry was added to the settings list.
-
- The _d_e_b_u_g___f_l_a_g_s entry now starts with a debug file path name and
- may occur multiple times if there are multiple plugin-specific
- Debug lines in the sudo.conf(4) file.
-
- Version 1.8 (sudo 1.8.15)
- The _s_u_d_o_e_d_i_t___c_h_e_c_k_d_i_r and _s_u_d_o_e_d_i_t___f_o_l_l_o_w entries were added to the
- command_info list. The default value of _s_u_d_o_e_d_i_t___c_h_e_c_k_d_i_r was
- changed to true in sudo 1.8.16.
-
- The sudo _c_o_n_v_e_r_s_a_t_i_o_n function now takes a pointer to a struct
- sudo_conv_callback as its fourth argument. The sudo_conv_t
- definition has been updated to match. The plugin must specify that
- it supports plugin API version 1.8 or higher to receive a
- conversation function pointer that supports this argument.
-
- Version 1.9 (sudo 1.8.16)
- The _e_x_e_c_f_d entry was added to the command_info list.
-
- Version 1.10 (sudo 1.8.19)
- The _u_m_a_s_k entry was added to the user_info list. The _i_o_l_o_g___g_r_o_u_p,
- _i_o_l_o_g___m_o_d_e, and _i_o_l_o_g___u_s_e_r entries were added to the command_info
- list.
-
- Version 1.11 (sudo 1.8.20)
- The _t_i_m_e_o_u_t entry was added to the settings list.
-
- Version 1.12 (sudo 1.8.21)
- The change_winsize field was added to the io_plugin struct.
-
- Version 1.13 (sudo 1.8.26)
- The log_suspend field was added to the io_plugin struct.
-
-SSEEEE AALLSSOO
- sudo.conf(4), sudoers(4), sudo(1m)
-
-AAUUTTHHOORRSS
- Many people have worked on ssuuddoo over the years; this version consists of
- code written primarily by:
-
- Todd C. Miller
-
- See the CONTRIBUTORS file in the ssuuddoo distribution
- (https://www.sudo.ws/contributors.html) for an exhaustive list of people
- who have contributed to ssuuddoo.
-
-BBUUGGSS
- If you feel you have found a bug in ssuuddoo, please submit a bug report at
- https://bugzilla.sudo.ws/
-
-SSUUPPPPOORRTT
- Limited free support is available via the sudo-users mailing list, see
- https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search
- the archives.
-
-DDIISSCCLLAAIIMMEERR
- ssuuddoo is provided "AS IS" and any express or implied warranties,
- including, but not limited to, the implied warranties of merchantability
- and fitness for a particular purpose are disclaimed. See the LICENSE
- file distributed with ssuuddoo or https://www.sudo.ws/license.html for
- complete details.
-
-Sudo 1.8.26 October 24, 2018 Sudo 1.8.26
diff --git a/doc/sudo_plugin.man.in b/doc/sudo_plugin.man.in
index c336033..f95669f 100644
--- a/doc/sudo_plugin.man.in
+++ b/doc/sudo_plugin.man.in
@@ -1,6 +1,8 @@
.\" Automatically generated from an mdoc input file. Do not edit.
.\"
-.\" Copyright (c) 2009-2018 Todd C. Miller <Todd.Miller@sudo.ws>
+.\" SPDX-License-Identifier: ISC
+.\"
+.\" Copyright (c) 2009-2019 Todd C. Miller <Todd.Miller@sudo.ws>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -14,7 +16,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.TH "SUDO_PLUGIN" "5" "October 24, 2018" "Sudo @PACKAGE_VERSION@" "File Formats Manual"
+.TH "SUDO_PLUGIN" "5" "June 20, 2019" "Sudo @PACKAGE_VERSION@" "File Formats Manual"
.nh
.if n .ad l
.SH "NAME"
@@ -163,9 +165,9 @@ strings.
The vector is terminated by a
\fRNULL\fR
pointer.
-These settings correspond to flags the user specified when running
+These settings correspond to options the user specified when running
\fBsudo\fR.
-As such, they will only be present when the corresponding flag has
+As such, they will only be present when the corresponding option has
been specified on the command line.
.sp
When parsing
@@ -187,7 +189,7 @@ might.
bsdauth_type=string
Authentication type, if specified by the
\fB\-a\fR
-flag, to use on
+option, to use on
systems where
BSD
authentication is supported.
@@ -196,7 +198,7 @@ authentication is supported.
closefrom=number
If specified, the user has requested via the
\fB\-C\fR
-flag that
+option that
\fBsudo\fR
close all files descriptors with a value of
\fInumber\fR
@@ -247,7 +249,7 @@ This setting has been deprecated in favor of
ignore_ticket=bool
Set to true if the user specified the
\fB\-k\fR
-flag along with a
+option along with a
command, indicating that the user wishes to ignore any cached
authentication credentials.
\fIimplied_shell\fR
@@ -275,12 +277,12 @@ BSD
login class to use when setting resource limits and nice value,
if specified by the
\fB\-c\fR
-flag.
+option.
.TP 6n
login_shell=bool
Set to true if the user specified the
\fB\-i\fR
-flag, indicating that
+option, indicating that
the user wishes to run a login shell.
.TP 6n
max_groups=int
@@ -303,7 +305,7 @@ it is an IPv6 address, else it is IPv4.
noninteractive=bool
Set to true if the user specified the
\fB\-n\fR
-flag, indicating that
+option, indicating that
\fBsudo\fR
should operate in non-interactive mode.
The plugin may reject a command run in non-interactive mode if user
@@ -328,13 +330,13 @@ statically compiled into
preserve_environment=bool
Set to true if the user specified the
\fB\-E\fR
-flag, indicating that
+option, indicating that
the user wishes to preserve the environment.
.TP 6n
preserve_groups=bool
Set to true if the user specified the
\fB\-P\fR
-flag, indicating that
+option, indicating that
the user wishes to preserve the group vector instead of setting it
based on the runas user.
.TP 6n
@@ -348,7 +350,7 @@ prompt=string
The prompt to use when requesting a password, if specified via
the
\fB\-p\fR
-flag.
+option.
.TP 6n
remote_host=string
The name of the remote host to run the command on, if specified via
@@ -365,35 +367,35 @@ Only available starting with API version 1.4.
run_shell=bool
Set to true if the user specified the
\fB\-s\fR
-flag, indicating that the user wishes to run a shell.
+option, indicating that the user wishes to run a shell.
.TP 6n
runas_group=string
The group name or gid to run the command as, if specified via
the
\fB\-g\fR
-flag.
+option.
.TP 6n
runas_user=string
The user name or uid to run the command as, if specified via the
\fB\-u\fR
-flag.
+option.
.TP 6n
selinux_role=string
SELinux role to use when executing the command, if specified by
the
\fB\-r\fR
-flag.
+option.
.TP 6n
selinux_type=string
SELinux type to use when executing the command, if specified by
the
\fB\-t\fR
-flag.
+option.
.TP 6n
set_home=bool
Set to true if the user specified the
\fB\-H\fR
-flag.
+option.
If true, set the
\fRHOME\fR
environment variable to the target user's home directory.
@@ -401,7 +403,7 @@ environment variable to the target user's home directory.
sudoedit=bool
Set to true when the
\fB\-e\fR
-flag is specified or if invoked as
+option is specified or if invoked as
\fBsudoedit\fR.
The plugin shall substitute an editor into
\fIargv\fR
@@ -718,7 +720,7 @@ in the user's environment, such as
and include it in
\fIargv_out\fR
(note that environment
-variables may include command line flags).
+variables may include command line options).
The files to be edited should be copied from
\fIargv\fR
into
@@ -843,8 +845,8 @@ runs a command as the foreground process as long as
itself is running in the foreground.
When
\fIexec_background\fR
-is enabled and the command is being run in a pty (due to I/O logging
-or the
+is enabled and the command is being run in a pseudo-terminal
+(due to I/O logging or the
\fIuse_pty\fR
setting), the command will be run as a background process.
Attempts to read from the controlling terminal (or to change terminal
@@ -865,7 +867,7 @@ has required it or not (the kernel buffers terminals so it is not possible
to tell whether the command really wants the input).
This is different from historic
\fIsudo\fR
-behavior or when the command is not being run in a pty.
+behavior or when the command is not being run in a pseudo-terminal.
.sp
For this to work seamlessly, the operating system must support the
automatic restarting of system calls.
@@ -1020,7 +1022,7 @@ selinux_type=string
SELinux type to use when executing the command.
.TP 6n
set_utmp=bool
-Create a utmp (or utmpx) entry when a pseudo-tty is allocated.
+Create a utmp (or utmpx) entry when a pseudo-terminal is allocated.
By default, the new entry will be a copy of the user's existing utmp
entry (if any), with the tty, time, type and pid fields updated.
.TP 6n
@@ -1079,12 +1081,12 @@ umask=octal
The file creation mask to use when executing the command.
.TP 6n
use_pty=bool
-Allocate a pseudo-tty to run the command in, regardless of whether
+Allocate a pseudo-terminal to run the command in, regardless of whether
or not I/O logging is in use.
By default,
\fBsudo\fR
will only run
-the command in a pty when an I/O log plugin is loaded.
+the command in a pseudo-terminal when an I/O log plugin is loaded.
.TP 6n
utmp_user=string
User name to use when constructing a new utmp (or utmpx) entry when
@@ -1191,7 +1193,7 @@ function is called when
\fBsudo\fR
is run with the
\fB\-v\fR
-flag.
+option.
For policy plugins such as
\fBsudoers\fR
that cache
@@ -1232,7 +1234,7 @@ the
\fB\-k\fR
or
\fB\-K\fR
-flag.
+option.
For policy plugins such as
\fBsudoers\fR
that
@@ -1485,7 +1487,7 @@ struct io_plugin {
.PP
When an I/O plugin is loaded,
\fBsudo\fR
-runs the command in a pseudo-tty.
+runs the command in a pseudo-terminal.
This makes it possible to log the input and output from the user's
session.
If any of the standard input, standard output or standard error do not
@@ -1497,7 +1499,7 @@ the I/O for logging before passing it on.
The log_ttyin function receives the raw user input from the terminal
device (note that this will include input even when echo is disabled,
such as when a password is read).
-The log_ttyout function receives output from the pseudo-tty that is
+The log_ttyout function receives output from the pseudo-terminal that is
suitable for replaying the user's session at a later time.
The
\fBlog_stdin\fR(),
@@ -1636,9 +1638,9 @@ strings.
The vector is terminated by a
\fRNULL\fR
pointer.
-These settings correspond to flags the user specified when running
+These settings correspond to options the user specified when running
\fBsudo\fR.
-As such, they will only be present when the corresponding flag has
+As such, they will only be present when the corresponding option has
been specified on the command line.
.sp
When parsing
diff --git a/doc/sudo_plugin.mdoc.in b/doc/sudo_plugin.mdoc.in
index a293ee3..ed91d42 100644
--- a/doc/sudo_plugin.mdoc.in
+++ b/doc/sudo_plugin.mdoc.in
@@ -1,5 +1,7 @@
.\"
-.\" Copyright (c) 2009-2018 Todd C. Miller <Todd.Miller@sudo.ws>
+.\" SPDX-License-Identifier: ISC
+.\"
+.\" Copyright (c) 2009-2019 Todd C. Miller <Todd.Miller@sudo.ws>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -13,7 +15,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd October 24, 2018
+.Dd June 20, 2019
.Dt SUDO_PLUGIN @mansectform@
.Os Sudo @PACKAGE_VERSION@
.Sh NAME
@@ -151,9 +153,9 @@ strings.
The vector is terminated by a
.Dv NULL
pointer.
-These settings correspond to flags the user specified when running
+These settings correspond to options the user specified when running
.Nm sudo .
-As such, they will only be present when the corresponding flag has
+As such, they will only be present when the corresponding option has
been specified on the command line.
.Pp
When parsing
@@ -172,14 +174,14 @@ might.
.It bsdauth_type=string
Authentication type, if specified by the
.Fl a
-flag, to use on
+option, to use on
systems where
.Bx
authentication is supported.
.It closefrom=number
If specified, the user has requested via the
.Fl C
-flag that
+option that
.Nm sudo
close all files descriptors with a value of
.Em number
@@ -227,7 +229,7 @@ This setting has been deprecated in favor of
.It ignore_ticket=bool
Set to true if the user specified the
.Fl k
-flag along with a
+option along with a
command, indicating that the user wishes to ignore any cached
authentication credentials.
.Em implied_shell
@@ -253,11 +255,11 @@ will pass the plugin the path to the user's shell and set
login class to use when setting resource limits and nice value,
if specified by the
.Fl c
-flag.
+option.
.It login_shell=bool
Set to true if the user specified the
.Fl i
-flag, indicating that
+option, indicating that
the user wishes to run a login shell.
.It max_groups=int
The maximum number of groups a user may belong to.
@@ -277,7 +279,7 @@ it is an IPv6 address, else it is IPv4.
.It noninteractive=bool
Set to true if the user specified the
.Fl n
-flag, indicating that
+option, indicating that
.Nm sudo
should operate in non-interactive mode.
The plugin may reject a command run in non-interactive mode if user
@@ -299,12 +301,12 @@ statically compiled into
.It preserve_environment=bool
Set to true if the user specified the
.Fl E
-flag, indicating that
+option, indicating that
the user wishes to preserve the environment.
.It preserve_groups=bool
Set to true if the user specified the
.Fl P
-flag, indicating that
+option, indicating that
the user wishes to preserve the group vector instead of setting it
based on the runas user.
.It progname=string
@@ -316,7 +318,7 @@ or
The prompt to use when requesting a password, if specified via
the
.Fl p
-flag.
+option.
.It remote_host=string
The name of the remote host to run the command on, if specified via
the
@@ -331,37 +333,37 @@ Only available starting with API version 1.4.
.It run_shell=bool
Set to true if the user specified the
.Fl s
-flag, indicating that the user wishes to run a shell.
+option, indicating that the user wishes to run a shell.
.It runas_group=string
The group name or gid to run the command as, if specified via
the
.Fl g
-flag.
+option.
.It runas_user=string
The user name or uid to run the command as, if specified via the
.Fl u
-flag.
+option.
.It selinux_role=string
SELinux role to use when executing the command, if specified by
the
.Fl r
-flag.
+option.
.It selinux_type=string
SELinux type to use when executing the command, if specified by
the
.Fl t
-flag.
+option.
.It set_home=bool
Set to true if the user specified the
.Fl H
-flag.
+option.
If true, set the
.Li HOME
environment variable to the target user's home directory.
.It sudoedit=bool
Set to true when the
.Fl e
-flag is specified or if invoked as
+option is specified or if invoked as
.Nm sudoedit .
The plugin shall substitute an editor into
.Em argv
@@ -632,7 +634,7 @@ in the user's environment, such as
and include it in
.Em argv_out
(note that environment
-variables may include command line flags).
+variables may include command line options).
The files to be edited should be copied from
.Em argv
into
@@ -746,8 +748,8 @@ runs a command as the foreground process as long as
itself is running in the foreground.
When
.Em exec_background
-is enabled and the command is being run in a pty (due to I/O logging
-or the
+is enabled and the command is being run in a pseudo-terminal
+(due to I/O logging or the
.Em use_pty
setting), the command will be run as a background process.
Attempts to read from the controlling terminal (or to change terminal
@@ -768,7 +770,7 @@ has required it or not (the kernel buffers terminals so it is not possible
to tell whether the command really wants the input).
This is different from historic
.Em sudo
-behavior or when the command is not being run in a pty.
+behavior or when the command is not being run in a pseudo-terminal.
.Pp
For this to work seamlessly, the operating system must support the
automatic restarting of system calls.
@@ -899,7 +901,7 @@ SELinux role to use when executing the command.
.It selinux_type=string
SELinux type to use when executing the command.
.It set_utmp=bool
-Create a utmp (or utmpx) entry when a pseudo-tty is allocated.
+Create a utmp (or utmpx) entry when a pseudo-terminal is allocated.
By default, the new entry will be a copy of the user's existing utmp
entry (if any), with the tty, time, type and pid fields updated.
.It sudoedit=bool
@@ -952,12 +954,12 @@ If non-zero then when the timeout expires the command will be killed.
.It umask=octal
The file creation mask to use when executing the command.
.It use_pty=bool
-Allocate a pseudo-tty to run the command in, regardless of whether
+Allocate a pseudo-terminal to run the command in, regardless of whether
or not I/O logging is in use.
By default,
.Nm sudo
will only run
-the command in a pty when an I/O log plugin is loaded.
+the command in a pseudo-terminal when an I/O log plugin is loaded.
.It utmp_user=string
User name to use when constructing a new utmp (or utmpx) entry when
.Em set_utmp
@@ -1044,7 +1046,7 @@ function is called when
.Nm sudo
is run with the
.Fl v
-flag.
+option.
For policy plugins such as
.Nm sudoers
that cache
@@ -1080,7 +1082,7 @@ the
.Fl k
or
.Fl K
-flag.
+option.
For policy plugins such as
.Nm sudoers
that
@@ -1313,7 +1315,7 @@ struct io_plugin {
.Pp
When an I/O plugin is loaded,
.Nm sudo
-runs the command in a pseudo-tty.
+runs the command in a pseudo-terminal.
This makes it possible to log the input and output from the user's
session.
If any of the standard input, standard output or standard error do not
@@ -1325,7 +1327,7 @@ the I/O for logging before passing it on.
The log_ttyin function receives the raw user input from the terminal
device (note that this will include input even when echo is disabled,
such as when a password is read).
-The log_ttyout function receives output from the pseudo-tty that is
+The log_ttyout function receives output from the pseudo-terminal that is
suitable for replaying the user's session at a later time.
The
.Fn log_stdin ,
@@ -1456,9 +1458,9 @@ strings.
The vector is terminated by a
.Dv NULL
pointer.
-These settings correspond to flags the user specified when running
+These settings correspond to options the user specified when running
.Nm sudo .
-As such, they will only be present when the corresponding flag has
+As such, they will only be present when the corresponding option has
been specified on the command line.
.Pp
When parsing
diff --git a/doc/sudoers.cat b/doc/sudoers.cat
deleted file mode 100644
index 9cc6a95..0000000
--- a/doc/sudoers.cat
+++ /dev/null
@@ -1,2931 +0,0 @@
-SUDOERS(4) File Formats Manual SUDOERS(4)
-
-NNAAMMEE
- ssuuddooeerrss - default sudo security policy plugin
-
-DDEESSCCRRIIPPTTIIOONN
- The ssuuddooeerrss policy plugin determines a user's ssuuddoo privileges. It is the
- default ssuuddoo policy plugin. The policy is driven by the _/_e_t_c_/_s_u_d_o_e_r_s
- file or, optionally in LDAP. The policy format is described in detail in
- the _S_U_D_O_E_R_S _F_I_L_E _F_O_R_M_A_T section. For information on storing ssuuddooeerrss
- policy information in LDAP, please see sudoers.ldap(4).
-
- CCoonnffiigguurriinngg ssuuddoo..ccoonnff ffoorr ssuuddooeerrss
- ssuuddoo consults the sudo.conf(4) file to determine which policy and I/O
- logging plugins to load. If no sudo.conf(4) file is present, or if it
- contains no Plugin lines, ssuuddooeerrss will be used for policy decisions and
- I/O logging. To explicitly configure sudo.conf(4) to use the ssuuddooeerrss
- plugin, the following configuration can be used.
-
- Plugin sudoers_policy sudoers.so
- Plugin sudoers_io sudoers.so
-
- Starting with ssuuddoo 1.8.5, it is possible to specify optional arguments to
- the ssuuddooeerrss plugin in the sudo.conf(4) file. These arguments, if
- present, should be listed after the path to the plugin (i.e., after
- _s_u_d_o_e_r_s_._s_o). Multiple arguments may be specified, separated by white
- space. For example:
-
- Plugin sudoers_policy sudoers.so sudoers_mode=0400
-
- The following plugin arguments are supported:
-
- ldap_conf=pathname
- The _l_d_a_p___c_o_n_f argument can be used to override the default path
- to the _l_d_a_p_._c_o_n_f file.
-
- ldap_secret=pathname
- The _l_d_a_p___s_e_c_r_e_t argument can be used to override the default
- path to the _l_d_a_p_._s_e_c_r_e_t file.
-
- sudoers_file=pathname
- The _s_u_d_o_e_r_s___f_i_l_e argument can be used to override the default
- path to the _s_u_d_o_e_r_s file.
-
- sudoers_uid=uid
- The _s_u_d_o_e_r_s___u_i_d argument can be used to override the default
- owner of the sudoers file. It should be specified as a numeric
- user ID.
-
- sudoers_gid=gid
- The _s_u_d_o_e_r_s___g_i_d argument can be used to override the default
- group of the sudoers file. It must be specified as a numeric
- group ID (not a group name).
-
- sudoers_mode=mode
- The _s_u_d_o_e_r_s___m_o_d_e argument can be used to override the default
- file mode for the sudoers file. It should be specified as an
- octal value.
-
- For more information on configuring sudo.conf(4), please refer to its
- manual.
-
- UUsseerr AAuutthheennttiiccaattiioonn
- The ssuuddooeerrss security policy requires that most users authenticate
- themselves before they can use ssuuddoo. A password is not required if the
- invoking user is root, if the target user is the same as the invoking
- user, or if the policy has disabled authentication for the user or
- command. Unlike su(1), when ssuuddooeerrss requires authentication, it
- validates the invoking user's credentials, not the target user's (or
- root's) credentials. This can be changed via the _r_o_o_t_p_w, _t_a_r_g_e_t_p_w and
- _r_u_n_a_s_p_w flags, described later.
-
- If a user who is not listed in the policy tries to run a command via
- ssuuddoo, mail is sent to the proper authorities. The address used for such
- mail is configurable via the _m_a_i_l_t_o Defaults entry (described later) and
- defaults to root.
-
- Note that no mail will be sent if an unauthorized user tries to run ssuuddoo
- with the --ll or --vv option unless there is an authentication error and
- either the _m_a_i_l___a_l_w_a_y_s or _m_a_i_l___b_a_d_p_a_s_s flags are enabled. This allows
- users to determine for themselves whether or not they are allowed to use
- ssuuddoo. All attempts to run ssuuddoo (successful or not) will be logged,
- regardless of whether or not mail is sent.
-
- If ssuuddoo is run by root and the SUDO_USER environment variable is set, the
- ssuuddooeerrss policy will use this value to determine who the actual user is.
- This can be used by a user to log commands through sudo even when a root
- shell has been invoked. It also allows the --ee option to remain useful
- even when invoked via a sudo-run script or program. Note, however, that
- the _s_u_d_o_e_r_s file lookup is still done for root, not the user specified by
- SUDO_USER.
-
- ssuuddooeerrss uses per-user time stamp files for credential caching. Once a
- user has been authenticated, a record is written containing the user ID
- that was used to authenticate, the terminal session ID, the start time of
- the session leader (or parent process) and a time stamp (using a
- monotonic clock if one is available). The user may then use ssuuddoo without
- a password for a short period of time (5 minutes unless overridden by the
- _t_i_m_e_s_t_a_m_p___t_i_m_e_o_u_t option). By default, ssuuddooeerrss uses a separate record
- for each terminal, which means that a user's login sessions are
- authenticated separately. The _t_i_m_e_s_t_a_m_p___t_y_p_e option can be used to
- select the type of time stamp record ssuuddooeerrss will use.
-
- LLooggggiinngg
- ssuuddooeerrss can log both successful and unsuccessful attempts (as well as
- errors) to syslog(3), a log file, or both. By default, ssuuddooeerrss will log
- via syslog(3) but this is changeable via the _s_y_s_l_o_g and _l_o_g_f_i_l_e Defaults
- settings. See _L_O_G _F_O_R_M_A_T for a description of the log file format.
-
- ssuuddooeerrss is also capable of running a command in a pseudo-tty and logging
- all input and/or output. The standard input, standard output and
- standard error can be logged even when not associated with a terminal.
- I/O logging is not on by default but can be enabled using the _l_o_g___i_n_p_u_t
- and _l_o_g___o_u_t_p_u_t options as well as the LOG_INPUT and LOG_OUTPUT command
- tags. See _I_/_O _L_O_G _F_I_L_E_S for details on how I/O log files are stored.
-
- CCoommmmaanndd eennvviirroonnmmeenntt
- Since environment variables can influence program behavior, ssuuddooeerrss
- provides a means to restrict which variables from the user's environment
- are inherited by the command to be run. There are two distinct ways
- ssuuddooeerrss can deal with environment variables.
-
- By default, the _e_n_v___r_e_s_e_t option is enabled. This causes commands to be
- executed with a new, minimal environment. On AIX (and Linux systems
- without PAM), the environment is initialized with the contents of the
- _/_e_t_c_/_e_n_v_i_r_o_n_m_e_n_t file. On BSD systems, if the _u_s_e___l_o_g_i_n_c_l_a_s_s option is
- enabled, the environment is initialized based on the _p_a_t_h and _s_e_t_e_n_v
- settings in _/_e_t_c_/_l_o_g_i_n_._c_o_n_f. The new environment contains the TERM,
- PATH, HOME, MAIL, SHELL, LOGNAME, USER and SUDO_* variables in addition
- to variables from the invoking process permitted by the _e_n_v___c_h_e_c_k and
- _e_n_v___k_e_e_p options. This is effectively a whitelist for environment
- variables. The environment variables LOGNAME and USER are treated
- specially. If one of them is preserved (or removed) from user's
- environment, the other will be as well. If LOGNAME and USER are to be
- preserved but only one of them is present in the user's environment, the
- other will be set to the same value. This avoids an inconsistent
- environment where one of the variables describing the user name is set to
- the invoking user and one is set to the target user. () are removed
- unless both the name and value parts are matched by _e_n_v___k_e_e_p or
- _e_n_v___c_h_e_c_k, as they may be interpreted as functions by the bbaasshh shell.
- Prior to version 1.8.11, such variables were always removed.
-
- If, however, the _e_n_v___r_e_s_e_t option is disabled, any variables not
- explicitly denied by the _e_n_v___c_h_e_c_k and _e_n_v___d_e_l_e_t_e options are inherited
- from the invoking process. In this case, _e_n_v___c_h_e_c_k and _e_n_v___d_e_l_e_t_e behave
- like a blacklist. Prior to version 1.8.21, environment variables with a
- value beginning with () were always removed. Beginning with version
- 1.8.21, a pattern in _e_n_v___d_e_l_e_t_e is used to match bbaasshh shell functions
- instead. Since it is not possible to blacklist all potentially dangerous
- environment variables, use of the default _e_n_v___r_e_s_e_t behavior is
- encouraged.
-
- Environment variables specified by _e_n_v___c_h_e_c_k, _e_n_v___d_e_l_e_t_e, or _e_n_v___k_e_e_p may
- include one or more `*' characters which will match zero or more
- characters. No other wildcard characters are supported.
-
- By default, environment variables are matched by name. However, if the
- pattern includes an equal sign (`='), both the variables name and value
- must match. For example, a bbaasshh shell function could be matched as
- follows:
-
- env_keep += "BASH_FUNC_my_func%%=()*"
-
- Without the "=()*" suffix, this would not match, as bbaasshh shell functions
- are not preserved by default.
-
- The complete list of environment variables that ssuuddoo allows or denies is
- contained in the output of "sudo -V" when run as root. Please note that
- this list varies based on the operating system ssuuddoo is running on.
-
- On systems that support PAM where the ppaamm__eennvv module is enabled for ssuuddoo,
- variables in the PAM environment may be merged in to the environment. If
- a variable in the PAM environment is already present in the user's
- environment, the value will only be overridden if the variable was not
- preserved by ssuuddooeerrss. When _e_n_v___r_e_s_e_t is enabled, variables preserved
- from the invoking user's environment by the _e_n_v___k_e_e_p list take precedence
- over those in the PAM environment. When _e_n_v___r_e_s_e_t is disabled, variables
- present the invoking user's environment take precedence over those in the
- PAM environment unless they match a pattern in the _e_n_v___d_e_l_e_t_e list.
-
- Note that the dynamic linker on most operating systems will remove
- variables that can control dynamic linking from the environment of setuid
- executables, including ssuuddoo. Depending on the operating system this may
- include _RLD*, DYLD_*, LD_*, LDR_*, LIBPATH, SHLIB_PATH, and others.
- These type of variables are removed from the environment before ssuuddoo even
- begins execution and, as such, it is not possible for ssuuddoo to preserve
- them.
-
- As a special case, if ssuuddoo's --ii option (initial login) is specified,
- ssuuddooeerrss will initialize the environment regardless of the value of
- _e_n_v___r_e_s_e_t. The DISPLAY, PATH and TERM variables remain unchanged; HOME,
- MAIL, SHELL, USER, and LOGNAME are set based on the target user. On AIX
- (and Linux systems without PAM), the contents of _/_e_t_c_/_e_n_v_i_r_o_n_m_e_n_t are
- also included. On BSD systems, if the _u_s_e___l_o_g_i_n_c_l_a_s_s flag is enabled,
- the _p_a_t_h and _s_e_t_e_n_v variables in _/_e_t_c_/_l_o_g_i_n_._c_o_n_f are also applied. All
- other environment variables are removed unless permitted by _e_n_v___k_e_e_p or
- _e_n_v___c_h_e_c_k, described above.
-
- Finally, the _r_e_s_t_r_i_c_t_e_d___e_n_v___f_i_l_e and _e_n_v___f_i_l_e files are applied, if
- present. The variables in _r_e_s_t_r_i_c_t_e_d___e_n_v___f_i_l_e are applied first and are
- subject to the same restrictions as the invoking user's environment, as
- detailed above. The variables in _e_n_v___f_i_l_e are applied last and are not
- subject to these restrictions. In both cases, variables present in the
- files will only be set to their specified values if they would not
- conflict with an existing environment variable.
-
-SSUUDDOOEERRSS FFIILLEE FFOORRMMAATT
- The _s_u_d_o_e_r_s file is composed of two types of entries: aliases (basically
- variables) and user specifications (which specify who may run what).
-
- When multiple entries match for a user, they are applied in order. Where
- there are multiple matches, the last match is used (which is not
- necessarily the most specific match).
-
- The _s_u_d_o_e_r_s file grammar will be described below in Extended Backus-Naur
- Form (EBNF). Don't despair if you are unfamiliar with EBNF; it is fairly
- simple, and the definitions below are annotated.
-
- QQuuiicckk gguuiiddee ttoo EEBBNNFF
- EBNF is a concise and exact way of describing the grammar of a language.
- Each EBNF definition is made up of _p_r_o_d_u_c_t_i_o_n _r_u_l_e_s. E.g.,
-
- symbol ::= definition | alternate1 | alternate2 ...
-
- Each _p_r_o_d_u_c_t_i_o_n _r_u_l_e references others and thus makes up a grammar for
- the language. EBNF also contains the following operators, which many
- readers will recognize from regular expressions. Do not, however,
- confuse them with "wildcard" characters, which have different meanings.
-
- ? Means that the preceding symbol (or group of symbols) is optional.
- That is, it may appear once or not at all.
-
- * Means that the preceding symbol (or group of symbols) may appear
- zero or more times.
-
- + Means that the preceding symbol (or group of symbols) may appear
- one or more times.
-
- Parentheses may be used to group symbols together. For clarity, we will
- use single quotes ('') to designate what is a verbatim character string
- (as opposed to a symbol name).
-
- AAlliiaasseess
- There are four kinds of aliases: User_Alias, Runas_Alias, Host_Alias and
- Cmnd_Alias.
-
- Alias ::= 'User_Alias' User_Alias_Spec (':' User_Alias_Spec)* |
- 'Runas_Alias' Runas_Alias_Spec (':' Runas_Alias_Spec)* |
- 'Host_Alias' Host_Alias_Spec (':' Host_Alias_Spec)* |
- 'Cmnd_Alias' Cmnd_Alias_Spec (':' Cmnd_Alias_Spec)*
-
- User_Alias ::= NAME
-
- User_Alias_Spec ::= User_Alias '=' User_List
-
- Runas_Alias ::= NAME
-
- Runas_Alias_Spec ::= Runas_Alias '=' Runas_List
-
- Host_Alias ::= NAME
-
- Host_Alias_Spec ::= Host_Alias '=' Host_List
-
- Cmnd_Alias ::= NAME
-
- Cmnd_Alias_Spec ::= Cmnd_Alias '=' Cmnd_List
-
- NAME ::= [A-Z]([A-Z][0-9]_)*
-
- Each _a_l_i_a_s definition is of the form
-
- Alias_Type NAME = item1, item2, ...
-
- where _A_l_i_a_s___T_y_p_e is one of User_Alias, Runas_Alias, Host_Alias, or
- Cmnd_Alias. A NAME is a string of uppercase letters, numbers, and
- underscore characters (`_'). A NAME mmuusstt start with an uppercase letter.
- It is possible to put several alias definitions of the same type on a
- single line, joined by a colon (`:'). E.g.,
-
- Alias_Type NAME = item1, item2, item3 : NAME = item4, item5
-
- It is a syntax error to redefine an existing _a_l_i_a_s. It is possible to
- use the same name for _a_l_i_a_s_e_s of different types, but this is not
- recommended.
-
- The definitions of what constitutes a valid _a_l_i_a_s member follow.
-
- User_List ::= User |
- User ',' User_List
-
- User ::= '!'* user name |
- '!'* #uid |
- '!'* %group |
- '!'* %#gid |
- '!'* +netgroup |
- '!'* %:nonunix_group |
- '!'* %:#nonunix_gid |
- '!'* User_Alias
-
- A User_List is made up of one or more user names, user IDs (prefixed with
- `#'), system group names and IDs (prefixed with `%' and `%#'
- respectively), netgroups (prefixed with `+'), non-Unix group names and
- IDs (prefixed with `%:' and `%:#' respectively) and User_Aliases. Each
- list item may be prefixed with zero or more `!' operators. An odd number
- of `!' operators negate the value of the item; an even number just cancel
- each other out. User netgroups are matched using the user and domain
- members only; the host member is not used when matching.
-
- A user name, uid, group, gid, netgroup, nonunix_group or nonunix_gid may
- be enclosed in double quotes to avoid the need for escaping special
- characters. Alternately, special characters may be specified in escaped
- hex mode, e.g., \x20 for space. When using double quotes, any prefix
- characters must be included inside the quotes.
-
- The actual nonunix_group and nonunix_gid syntax depends on the underlying
- group provider plugin. For instance, the QAS AD plugin supports the
- following formats:
-
- ++oo Group in the same domain: "%:Group Name"
-
- ++oo Group in any domain: "%:Group Name@FULLY.QUALIFIED.DOMAIN"
-
- ++oo Group SID: "%:S-1-2-34-5678901234-5678901234-5678901234-567"
-
- See _G_R_O_U_P _P_R_O_V_I_D_E_R _P_L_U_G_I_N_S for more information.
-
- Note that quotes around group names are optional. Unquoted strings must
- use a backslash (`\') to escape spaces and special characters. See _O_t_h_e_r
- _s_p_e_c_i_a_l _c_h_a_r_a_c_t_e_r_s _a_n_d _r_e_s_e_r_v_e_d _w_o_r_d_s for a list of characters that need
- to be escaped.
-
- Runas_List ::= Runas_Member |
- Runas_Member ',' Runas_List
-
- Runas_Member ::= '!'* user name |
- '!'* #uid |
- '!'* %group |
- '!'* %#gid |
- '!'* %:nonunix_group |
- '!'* %:#nonunix_gid |
- '!'* +netgroup |
- '!'* Runas_Alias
-
- A Runas_List is similar to a User_List except that instead of
- User_Aliases it can contain Runas_Aliases. Note that user names and
- groups are matched as strings. In other words, two users (groups) with
- the same uid (gid) are considered to be distinct. If you wish to match
- all user names with the same uid (e.g., root and toor), you can use a uid
- instead (#0 in the example given).
-
- Host_List ::= Host |
- Host ',' Host_List
-
- Host ::= '!'* host name |
- '!'* ip_addr |
- '!'* network(/netmask)? |
- '!'* +netgroup |
- '!'* Host_Alias
-
- A Host_List is made up of one or more host names, IP addresses, network
- numbers, netgroups (prefixed with `+') and other aliases. Again, the
- value of an item may be negated with the `!' operator. Host netgroups
- are matched using the host (both qualified and unqualified) and domain
- members only; the user member is not used when matching. If you specify
- a network number without a netmask, ssuuddoo will query each of the local
- host's network interfaces and, if the network number corresponds to one
- of the hosts's network interfaces, will use the netmask of that
- interface. The netmask may be specified either in standard IP address
- notation (e.g., 255.255.255.0 or ffff:ffff:ffff:ffff::), or CIDR notation
- (number of bits, e.g., 24 or 64). A host name may include shell-style
- wildcards (see the _W_i_l_d_c_a_r_d_s section below), but unless the host name
- command on your machine returns the fully qualified host name, you'll
- need to use the _f_q_d_n option for wildcards to be useful. Note that ssuuddoo
- only inspects actual network interfaces; this means that IP address
- 127.0.0.1 (localhost) will never match. Also, the host name "localhost"
- will only match if that is the actual host name, which is usually only
- the case for non-networked systems.
-
- digest ::= [A-Fa-f0-9]+ |
- [[A-Za-z0-9+/=]+
-
- Digest_Spec ::= "sha224" ':' digest |
- "sha256" ':' digest |
- "sha384" ':' digest |
- "sha512" ':' digest
-
- Cmnd_List ::= Cmnd |
- Cmnd ',' Cmnd_List
-
- command name ::= file name |
- file name args |
- file name '""'
-
- Cmnd ::= Digest_Spec? '!'* command name |
- '!'* directory |
- '!'* "sudoedit" |
- '!'* Cmnd_Alias
-
- A Cmnd_List is a list of one or more command names, directories, and
- other aliases. A command name is a fully qualified file name which may
- include shell-style wildcards (see the _W_i_l_d_c_a_r_d_s section below). A
- simple file name allows the user to run the command with any arguments
- he/she wishes. However, you may also specify command line arguments
- (including wildcards). Alternately, you can specify "" to indicate that
- the command may only be run wwiitthhoouutt command line arguments. A directory
- is a fully qualified path name ending in a `/'. When you specify a
- directory in a Cmnd_List, the user will be able to run any file within
- that directory (but not in any sub-directories therein).
-
- If a Cmnd has associated command line arguments, then the arguments in
- the Cmnd must match exactly those given by the user on the command line
- (or match the wildcards if there are any). Note that the following
- characters must be escaped with a `\' if they are used in command
- arguments: `,', `:', `=', `\'. The built-in command "sudoedit" is used
- to permit a user to run ssuuddoo with the --ee option (or as ssuuddooeeddiitt). It may
- take command line arguments just as a normal command does. Note that
- "sudoedit" is a command built into ssuuddoo itself and must be specified in
- the _s_u_d_o_e_r_s file without a leading path.
-
- If a command name is prefixed with a Digest_Spec, the command will only
- match successfully if it can be verified using the specified SHA-2
- digest. The following digest formats are supported: sha224, sha256,
- sha384 and sha512. The string may be specified in either hex or base64
- format (base64 is more compact). There are several utilities capable of
- generating SHA-2 digests in hex format such as openssl, shasum,
- sha224sum, sha256sum, sha384sum, sha512sum.
-
- For example, using openssl:
-
- $ openssl dgst -sha224 /bin/ls
- SHA224(/bin/ls)= 118187da8364d490b4a7debbf483004e8f3e053ec954309de2c41a25
-
- It is also possible to use openssl to generate base64 output:
-
- $ openssl dgst -binary -sha224 /bin/ls | openssl base64
- EYGH2oNk1JC0p9679IMATo8+BT7JVDCd4sQaJQ==
-
- Warning, if the user has write access to the command itself (directly or
- via a ssuuddoo command), it may be possible for the user to replace the
- command after the digest check has been performed but before the command
- is executed. A similar race condition exists on systems that lack the
- fexecve(2) system call when the directory in which the command is located
- is writable by the user. See the description of the _f_d_e_x_e_c setting for
- more information on how ssuuddoo executes commands that have an associated
- digest.
-
- Command digests are only supported by version 1.8.7 or higher.
-
- DDeeffaauullttss
- Certain configuration options may be changed from their default values at
- run-time via one or more Default_Entry lines. These may affect all users
- on any host, all users on a specific host, a specific user, a specific
- command, or commands being run as a specific user. Note that per-command
- entries may not include command line arguments. If you need to specify
- arguments, define a Cmnd_Alias and reference that instead.
-
- Default_Type ::= 'Defaults' |
- 'Defaults' '@' Host_List |
- 'Defaults' ':' User_List |
- 'Defaults' '!' Cmnd_List |
- 'Defaults' '>' Runas_List
-
- Default_Entry ::= Default_Type Parameter_List
-
- Parameter_List ::= Parameter |
- Parameter ',' Parameter_List
-
- Parameter ::= Parameter '=' Value |
- Parameter '+=' Value |
- Parameter '-=' Value |
- '!'* Parameter
-
- Parameters may be ffllaaggss, iinntteeggeerr values, ssttrriinnggss, or lliissttss. Flags are
- implicitly boolean and can be turned off via the `!' operator. Some
- integer, string and list parameters may also be used in a boolean context
- to disable them. Values may be enclosed in double quotes ("") when they
- contain multiple words. Special characters may be escaped with a
- backslash (`\').
-
- Lists have two additional assignment operators, += and -=. These
- operators are used to add to and delete from a list respectively. It is
- not an error to use the -= operator to remove an element that does not
- exist in a list.
-
- Defaults entries are parsed in the following order: generic, host, user
- and runas Defaults first, then command defaults. If there are multiple
- Defaults settings of the same type, the last matching setting is used.
- The following Defaults settings are parsed before all others since they
- may affect subsequent entries: _f_q_d_n, _g_r_o_u_p___p_l_u_g_i_n, _r_u_n_a_s___d_e_f_a_u_l_t,
- _s_u_d_o_e_r_s___l_o_c_a_l_e.
-
- See _S_U_D_O_E_R_S _O_P_T_I_O_N_S for a list of supported Defaults parameters.
-
- UUsseerr ssppeecciiffiiccaattiioonn
- User_Spec ::= User_List Host_List '=' Cmnd_Spec_List \
- (':' Host_List '=' Cmnd_Spec_List)*
-
- Cmnd_Spec_List ::= Cmnd_Spec |
- Cmnd_Spec ',' Cmnd_Spec_List
-
- Cmnd_Spec ::= Runas_Spec? Option_Spec* Tag_Spec* Cmnd
-
- Runas_Spec ::= '(' Runas_List? (':' Runas_List)? ')'
-
- Option_Spec ::= (SELinux_Spec | Solaris_Priv_Spec | Date_Spec | Timeout_Spec)
-
- SELinux_Spec ::= ('ROLE=role' | 'TYPE=type')
-
- Solaris_Priv_Spec ::= ('PRIVS=privset' | 'LIMITPRIVS=privset')
-
- Date_Spec ::= ('NOTBEFORE=timestamp' | 'NOTAFTER=timestamp')
-
- Timeout_Spec ::= 'TIMEOUT=timeout'
-
- Tag_Spec ::= ('EXEC:' | 'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' |
- 'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' |
- 'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' |
- 'NOPASSWD:' | 'SETENV:' | 'NOSETENV:')
-
- A uusseerr ssppeecciiffiiccaattiioonn determines which commands a user may run (and as
- what user) on specified hosts. By default, commands are run as rroooott, but
- this can be changed on a per-command basis.
-
- The basic structure of a user specification is "who where = (as_whom)
- what". Let's break that down into its constituent parts:
-
- RRuunnaass__SSppeecc
- A Runas_Spec determines the user and/or the group that a command may be
- run as. A fully-specified Runas_Spec consists of two Runas_Lists (as
- defined above) separated by a colon (`:') and enclosed in a set of
- parentheses. The first Runas_List indicates which users the command may
- be run as via ssuuddoo's --uu option. The second defines a list of groups that
- can be specified via ssuuddoo's --gg option in addition to any of the target
- user's groups. If both Runas_Lists are specified, the command may be run
- with any combination of users and groups listed in their respective
- Runas_Lists. If only the first is specified, the command may be run as
- any user in the list but no --gg option may be specified. If the first
- Runas_List is empty but the second is specified, the command may be run
- as the invoking user with the group set to any listed in the Runas_List.
- If both Runas_Lists are empty, the command may only be run as the
- invoking user. If no Runas_Spec is specified the command may be run as
- rroooott and no group may be specified.
-
- A Runas_Spec sets the default for the commands that follow it. What this
- means is that for the entry:
-
- dgb boulder = (operator) /bin/ls, /bin/kill, /usr/bin/lprm
-
- The user ddggbb may run _/_b_i_n_/_l_s, _/_b_i_n_/_k_i_l_l, and _/_u_s_r_/_b_i_n_/_l_p_r_m on the host
- boulder--but only as ooppeerraattoorr. E.g.,
-
- $ sudo -u operator /bin/ls
-
- It is also possible to override a Runas_Spec later on in an entry. If we
- modify the entry like so:
-
- dgb boulder = (operator) /bin/ls, (root) /bin/kill, /usr/bin/lprm
-
- Then user ddggbb is now allowed to run _/_b_i_n_/_l_s as ooppeerraattoorr, but _/_b_i_n_/_k_i_l_l
- and _/_u_s_r_/_b_i_n_/_l_p_r_m as rroooott.
-
- We can extend this to allow ddggbb to run /bin/ls with either the user or
- group set to ooppeerraattoorr:
-
- dgb boulder = (operator : operator) /bin/ls, (root) /bin/kill,\
- /usr/bin/lprm
-
- Note that while the group portion of the Runas_Spec permits the user to
- run as command with that group, it does not force the user to do so. If
- no group is specified on the command line, the command will run with the
- group listed in the target user's password database entry. The following
- would all be permitted by the sudoers entry above:
-
- $ sudo -u operator /bin/ls
- $ sudo -u operator -g operator /bin/ls
- $ sudo -g operator /bin/ls
-
- In the following example, user ttccmm may run commands that access a modem
- device file with the dialer group.
-
- tcm boulder = (:dialer) /usr/bin/tip, /usr/bin/cu,\
- /usr/local/bin/minicom
-
- Note that in this example only the group will be set, the command still
- runs as user ttccmm. E.g.
-
- $ sudo -g dialer /usr/bin/cu
-
- Multiple users and groups may be present in a Runas_Spec, in which case
- the user may select any combination of users and groups via the --uu and --gg
- options. In this example:
-
- alan ALL = (root, bin : operator, system) ALL
-
- user aallaann may run any command as either user root or bin, optionally
- setting the group to operator or system.
-
- OOppttiioonn__SSppeecc
- A Cmnd may have zero or more options associated with it. Options may
- consist of SELinux roles and/or types, Solaris privileges sets, start
- and/or end dates and command timeouts. Once an option is set for a Cmnd,
- subsequent Cmnds in the Cmnd_Spec_List, inherit that option unless it is
- overridden by another option.
-
- SSEELLiinnuuxx__SSppeecc
- On systems with SELinux support, _s_u_d_o_e_r_s file entries may optionally have
- an SELinux role and/or type associated with a command. If a role or type
- is specified with the command it will override any default values
- specified in _s_u_d_o_e_r_s. A role or type specified on the command line,
- however, will supersede the values in _s_u_d_o_e_r_s.
-
- SSoollaarriiss__PPrriivv__SSppeecc
- On Solaris systems, _s_u_d_o_e_r_s file entries may optionally specify Solaris
- privilege set and/or limit privilege set associated with a command. If
- privileges or limit privileges are specified with the command it will
- override any default values specified in _s_u_d_o_e_r_s.
-
- A privilege set is a comma-separated list of privilege names. The
- ppriv(1) command can be used to list all privileges known to the system.
- For example:
-
- $ ppriv -l
-
- In addition, there are several "special" privilege strings:
-
- none the empty set
-
- all the set of all privileges
-
- zone the set of all privileges available in the current zone
-
- basic the default set of privileges normal users are granted at login
- time
-
- Privileges can be excluded from a set by prefixing the privilege name
- with either an `!' or `-' character.
-
- DDaattee__SSppeecc
- ssuuddooeerrss rules can be specified with a start and end date via the
- NOTBEFORE and NOTAFTER settings. The time stamp must be specified in
- _G_e_n_e_r_a_l_i_z_e_d _T_i_m_e as defined by RFC 4517. The format is effectively
- yyyymmddHHMMSSZ where the minutes and seconds are optional. The `Z'
- suffix indicates that the time stamp is in Coordinated Universal Time
- (UTC). It is also possible to specify a timezone offset from UTC in
- hours and minutes instead of a `Z'. For example, `-0500' would
- correspond to Eastern Standard time in the US. As an extension, if no
- `Z' or timezone offset is specified, local time will be used.
-
- The following are all valid time stamps:
-
- 20170214083000Z
- 2017021408Z
- 20160315220000-0500
- 20151201235900
-
- TTiimmeeoouutt__SSppeecc
- A command may have a timeout associated with it. If the timeout expires
- before the command has exited, the command will be terminated. The
- timeout may be specified in combinations of days, hours, minutes and
- seconds with a single-letter case-insensitive suffix that indicates the
- unit of time. For example, a timeout of 7 days, 8 hours, 30 minutes and
- 10 seconds would be written as 7d8h30m10s. If a number is specified
- without a unit, seconds are assumed. Any of the days, minutes, hours or
- seconds may be omitted. The order must be from largest to smallest unit
- and a unit may not be specified more than once.
-
- The following are all _v_a_l_i_d timeout values: 7d8h30m10s, 14d, 8h30m, 600s,
- 3600. The following are _i_n_v_a_l_i_d timeout values: 12m2w1d, 30s10m4h,
- 1d2d3h.
-
- This option is only supported by version 1.8.20 or higher.
-
- TTaagg__SSppeecc
- A command may have zero or more tags associated with it. The following
- tag values are supported: EXEC, NOEXEC, FOLLOW, NOFOLLOW, LOG_INPUT,
- NOLOG_INPUT, LOG_OUTPUT, NOLOG_OUTPUT, MAIL, NOMAIL, PASSWD, NOPASSWD,
- SETENV, and NOSETENV. Once a tag is set on a Cmnd, subsequent Cmnds in
- the Cmnd_Spec_List, inherit the tag unless it is overridden by the
- opposite tag (in other words, PASSWD overrides NOPASSWD and NOEXEC
- overrides EXEC).
-
- _E_X_E_C and _N_O_E_X_E_C
-
- If ssuuddoo has been compiled with _n_o_e_x_e_c support and the underlying
- operating system supports it, the NOEXEC tag can be used to prevent a
- dynamically-linked executable from running further commands itself.
-
- In the following example, user aaaarroonn may run _/_u_s_r_/_b_i_n_/_m_o_r_e and
- _/_u_s_r_/_b_i_n_/_v_i but shell escapes will be disabled.
-
- aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
-
- See the _P_r_e_v_e_n_t_i_n_g _s_h_e_l_l _e_s_c_a_p_e_s section below for more details on how
- NOEXEC works and whether or not it will work on your system.
-
- _F_O_L_L_O_W and _N_O_F_O_L_L_O_W Starting with version 1.8.15, ssuuddooeeddiitt will not open
- a file that is a symbolic link unless the _s_u_d_o_e_d_i_t___f_o_l_l_o_w option is
- enabled. The _F_O_L_L_O_W and _N_O_F_O_L_L_O_W tags override the value of
- _s_u_d_o_e_d_i_t___f_o_l_l_o_w and can be used to permit (or deny) the editing of
- symbolic links on a per-command basis. These tags are only effective
- for the _s_u_d_o_e_d_i_t command and are ignored for all other commands.
-
- _L_O_G___I_N_P_U_T and _N_O_L_O_G___I_N_P_U_T
-
- These tags override the value of the _l_o_g___i_n_p_u_t option on a per-command
- basis. For more information, see the description of _l_o_g___i_n_p_u_t in the
- _S_U_D_O_E_R_S _O_P_T_I_O_N_S section below.
-
- _L_O_G___O_U_T_P_U_T and _N_O_L_O_G___O_U_T_P_U_T
-
- These tags override the value of the _l_o_g___o_u_t_p_u_t option on a per-command
- basis. For more information, see the description of _l_o_g___o_u_t_p_u_t in the
- _S_U_D_O_E_R_S _O_P_T_I_O_N_S section below.
-
- _M_A_I_L and _N_O_M_A_I_L
-
- These tags provide fine-grained control over whether mail will be sent
- when a user runs a command by overriding the value of the
- _m_a_i_l___a_l_l___c_m_n_d_s option on a per-command basis. They have no effect when
- ssuuddoo is run with the --ll or --vv options. A _N_O_M_A_I_L tag will also override
- the _m_a_i_l___a_l_w_a_y_s and _m_a_i_l___n_o___p_e_r_m_s options. For more information, see
- the descriptions of _m_a_i_l___a_l_l___c_m_n_d_s, _m_a_i_l___a_l_w_a_y_s, and _m_a_i_l___n_o___p_e_r_m_s in
- the _S_U_D_O_E_R_S _O_P_T_I_O_N_S section below.
-
- _P_A_S_S_W_D and _N_O_P_A_S_S_W_D
-
- By default, ssuuddoo requires that a user authenticate him or herself
- before running a command. This behavior can be modified via the
- NOPASSWD tag. Like a Runas_Spec, the NOPASSWD tag sets a default for
- the commands that follow it in the Cmnd_Spec_List. Conversely, the
- PASSWD tag can be used to reverse things. For example:
-
- ray rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm
-
- would allow the user rraayy to run _/_b_i_n_/_k_i_l_l, _/_b_i_n_/_l_s, and _/_u_s_r_/_b_i_n_/_l_p_r_m
- as rroooott on the machine rushmore without authenticating himself. If we
- only want rraayy to be able to run _/_b_i_n_/_k_i_l_l without a password the entry
- would be:
-
- ray rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm
-
- Note, however, that the PASSWD tag has no effect on users who are in
- the group specified by the _e_x_e_m_p_t___g_r_o_u_p option.
-
- By default, if the NOPASSWD tag is applied to any of the entries for a
- user on the current host, he or she will be able to run "sudo -l"
- without a password. Additionally, a user may only run "sudo -v"
- without a password if the NOPASSWD tag is present for all a user's
- entries that pertain to the current host. This behavior may be
- overridden via the _v_e_r_i_f_y_p_w and _l_i_s_t_p_w options.
-
- _S_E_T_E_N_V and _N_O_S_E_T_E_N_V
-
- These tags override the value of the _s_e_t_e_n_v option on a per-command
- basis. Note that if SETENV has been set for a command, the user may
- disable the _e_n_v___r_e_s_e_t option from the command line via the --EE option.
- Additionally, environment variables set on the command line are not
- subject to the restrictions imposed by _e_n_v___c_h_e_c_k, _e_n_v___d_e_l_e_t_e, or
- _e_n_v___k_e_e_p. As such, only trusted users should be allowed to set
- variables in this manner. If the command matched is AALLLL, the SETENV
- tag is implied for that command; this default may be overridden by use
- of the NOSETENV tag.
-
- WWiillddccaarrddss
- ssuuddoo allows shell-style _w_i_l_d_c_a_r_d_s (aka meta or glob characters) to be
- used in host names, path names and command line arguments in the _s_u_d_o_e_r_s
- file. Wildcard matching is done via the glob(3) and fnmatch(3) functions
- as specified by IEEE Std 1003.1 ("POSIX.1").
-
- * Matches any set of zero or more characters (including white
- space).
-
- ? Matches any single character (including white space).
-
- [...] Matches any character in the specified range.
-
- [!...] Matches any character _n_o_t in the specified range.
-
- \x For any character `x', evaluates to `x'. This is used to
- escape special characters such as: `*', `?', `[', and `]'.
-
- NNoottee tthhaatt tthheessee aarree nnoott rreegguullaarr eexxpprreessssiioonnss.. Unlike a regular expression
- there is no way to match one or more characters within a range.
-
- Character classes may be used if your system's glob(3) and fnmatch(3)
- functions support them. However, because the `:' character has special
- meaning in _s_u_d_o_e_r_s, it must be escaped. For example:
-
- /bin/ls [[\:alpha\:]]*
-
- Would match any file name beginning with a letter.
-
- Note that a forward slash (`/') will _n_o_t be matched by wildcards used in
- the file name portion of the command. This is to make a path like:
-
- /usr/bin/*
-
- match _/_u_s_r_/_b_i_n_/_w_h_o but not _/_u_s_r_/_b_i_n_/_X_1_1_/_x_t_e_r_m.
-
- When matching the command line arguments, however, a slash _d_o_e_s get
- matched by wildcards since command line arguments may contain arbitrary
- strings and not just path names.
-
- WWiillddccaarrddss iinn ccoommmmaanndd lliinnee aarrgguummeennttss sshhoouulldd bbee uusseedd wwiitthh ccaarree..
- Command line arguments are matched as a single, concatenated string.
- This mean a wildcard character such as `?' or `*' will match across word
- boundaries, which may be unexpected. For example, while a sudoers entry
- like:
-
- %operator ALL = /bin/cat /var/log/messages*
-
- will allow command like:
-
- $ sudo cat /var/log/messages.1
-
- It will also allow:
-
- $ sudo cat /var/log/messages /etc/shadow
-
- which is probably not what was intended. In most cases it is better to
- do command line processing outside of the _s_u_d_o_e_r_s file in a scripting
- language.
-
- EExxcceeppttiioonnss ttoo wwiillddccaarrdd rruulleess
- The following exceptions apply to the above rules:
-
- "" If the empty string "" is the only command line argument in the
- _s_u_d_o_e_r_s file entry it means that command is not allowed to be
- run with _a_n_y arguments.
-
- sudoedit Command line arguments to the _s_u_d_o_e_d_i_t built-in command should
- always be path names, so a forward slash (`/') will not be
- matched by a wildcard.
-
- IInncclluuddiinngg ootthheerr ffiilleess ffrroomm wwiitthhiinn ssuuddooeerrss
- It is possible to include other _s_u_d_o_e_r_s files from within the _s_u_d_o_e_r_s
- file currently being parsed using the #include and #includedir
- directives.
-
- This can be used, for example, to keep a site-wide _s_u_d_o_e_r_s file in
- addition to a local, per-machine file. For the sake of this example the
- site-wide _s_u_d_o_e_r_s file will be _/_e_t_c_/_s_u_d_o_e_r_s and the per-machine one will
- be _/_e_t_c_/_s_u_d_o_e_r_s_._l_o_c_a_l. To include _/_e_t_c_/_s_u_d_o_e_r_s_._l_o_c_a_l from within
- _/_e_t_c_/_s_u_d_o_e_r_s we would use the following line in _/_e_t_c_/_s_u_d_o_e_r_s:
-
- #include /etc/sudoers.local
-
- When ssuuddoo reaches this line it will suspend processing of the current
- file (_/_e_t_c_/_s_u_d_o_e_r_s) and switch to _/_e_t_c_/_s_u_d_o_e_r_s_._l_o_c_a_l. Upon reaching the
- end of _/_e_t_c_/_s_u_d_o_e_r_s_._l_o_c_a_l, the rest of _/_e_t_c_/_s_u_d_o_e_r_s will be processed.
- Files that are included may themselves include other files. A hard limit
- of 128 nested include files is enforced to prevent include file loops.
-
- If the path to the include file is not fully-qualified (does not begin
- with a `/'), it must be located in the same directory as the sudoers file
- it was included from. For example, if _/_e_t_c_/_s_u_d_o_e_r_s contains the line:
-
- #include sudoers.local
-
- the file that will be included is _/_e_t_c_/_s_u_d_o_e_r_s_._l_o_c_a_l.
-
- The file name may also include the %h escape, signifying the short form
- of the host name. In other words, if the machine's host name is
- "xerxes", then
-
- #include /etc/sudoers.%h
-
- will cause ssuuddoo to include the file _/_e_t_c_/_s_u_d_o_e_r_s_._x_e_r_x_e_s.
-
- The #includedir directive can be used to create a _s_u_d_o_e_r_s_._d directory
- that the system package manager can drop _s_u_d_o_e_r_s file rules into as part
- of package installation. For example, given:
-
- #includedir /etc/sudoers.d
-
- ssuuddoo will suspend processing of the current file and read each file in
- _/_e_t_c_/_s_u_d_o_e_r_s_._d, skipping file names that end in `~' or contain a `.'
- character to avoid causing problems with package manager or editor
- temporary/backup files. Files are parsed in sorted lexical order. That
- is, _/_e_t_c_/_s_u_d_o_e_r_s_._d_/_0_1___f_i_r_s_t will be parsed before
- _/_e_t_c_/_s_u_d_o_e_r_s_._d_/_1_0___s_e_c_o_n_d. Be aware that because the sorting is lexical,
- not numeric, _/_e_t_c_/_s_u_d_o_e_r_s_._d_/_1___w_h_o_o_p_s would be loaded _a_f_t_e_r
- _/_e_t_c_/_s_u_d_o_e_r_s_._d_/_1_0___s_e_c_o_n_d. Using a consistent number of leading zeroes in
- the file names can be used to avoid such problems. After parsing the
- files in the directory, control returns to the file that contained the
- #includedir directive.
-
- Note that unlike files included via #include, vviissuuddoo will not edit the
- files in a #includedir directory unless one of them contains a syntax
- error. It is still possible to run vviissuuddoo with the --ff flag to edit the
- files directly, but this will not catch the redefinition of an _a_l_i_a_s that
- is also present in a different file.
-
- OOtthheerr ssppeecciiaall cchhaarraacctteerrss aanndd rreesseerrvveedd wwoorrddss
- The pound sign (`#') is used to indicate a comment (unless it is part of
- a #include directive or unless it occurs in the context of a user name
- and is followed by one or more digits, in which case it is treated as a
- uid). Both the comment character and any text after it, up to the end of
- the line, are ignored.
-
- The reserved word AALLLL is a built-in _a_l_i_a_s that always causes a match to
- succeed. It can be used wherever one might otherwise use a Cmnd_Alias,
- User_Alias, Runas_Alias, or Host_Alias. You should not try to define
- your own _a_l_i_a_s called AALLLL as the built-in alias will be used in
- preference to your own. Please note that using AALLLL can be dangerous
- since in a command context, it allows the user to run _a_n_y command on the
- system.
-
- An exclamation point (`!') can be used as a logical _n_o_t operator in a
- list or _a_l_i_a_s as well as in front of a Cmnd. This allows one to exclude
- certain values. For the `!' operator to be effective, there must be
- something for it to exclude. For example, to match all users except for
- root one would use:
-
- ALL,!root
-
- If the AALLLL, is omitted, as in:
-
- !root
-
- it would explicitly deny root but not match any other users. This is
- different from a true "negation" operator.
-
- Note, however, that using a `!' in conjunction with the built-in AALLLL
- alias to allow a user to run "all but a few" commands rarely works as
- intended (see _S_E_C_U_R_I_T_Y _N_O_T_E_S below).
-
- Long lines can be continued with a backslash (`\') as the last character
- on the line.
-
- White space between elements in a list as well as special syntactic
- characters in a _U_s_e_r _S_p_e_c_i_f_i_c_a_t_i_o_n (`=', `:', `(', `)') is optional.
-
- The following characters must be escaped with a backslash (`\') when used
- as part of a word (e.g., a user name or host name): `!', `=', `:', `,',
- `(', `)', `\'.
-
-SSUUDDOOEERRSS OOPPTTIIOONNSS
- ssuuddoo's behavior can be modified by Default_Entry lines, as explained
- earlier. A list of all supported Defaults parameters, grouped by type,
- are listed below.
-
- BBoooolleeaann FFllaaggss:
-
- always_query_group_plugin
- If a _g_r_o_u_p___p_l_u_g_i_n is configured, use it to resolve
- groups of the form %group as long as there is not also
- a system group of the same name. Normally, only groups
- of the form %:group are passed to the _g_r_o_u_p___p_l_u_g_i_n.
- This flag is _o_f_f by default.
-
- always_set_home If enabled, ssuuddoo will set the HOME environment variable
- to the home directory of the target user (which is root
- unless the --uu option is used). This effectively means
- that the --HH option is always implied. Note that by
- default, HOME will be set to the home directory of the
- target user when the _e_n_v___r_e_s_e_t option is enabled, so
- _a_l_w_a_y_s___s_e_t___h_o_m_e only has an effect for configurations
- where either _e_n_v___r_e_s_e_t is disabled or HOME is present
- in the _e_n_v___k_e_e_p list. This flag is _o_f_f by default.
-
- authenticate If set, users must authenticate themselves via a
- password (or other means of authentication) before they
- may run commands. This default may be overridden via
- the PASSWD and NOPASSWD tags. This flag is _o_n by
- default.
-
- case_insensitive_group
- If enabled, group names in _s_u_d_o_e_r_s will be matched in a
- case insensitive manner. This may be necessary when
- users are stored in LDAP or AD. This flag is _o_n by
- default.
-
- case_insensitive_user
- If enabled, user names in _s_u_d_o_e_r_s will be matched in a
- case insensitive manner. This may be necessary when
- groups are stored in LDAP or AD. This flag is _o_n by
- default.
-
- closefrom_override
- If set, the user may use ssuuddoo's --CC option which
- overrides the default starting point at which ssuuddoo
- begins closing open file descriptors. This flag is _o_f_f
- by default.
-
- compress_io If set, and ssuuddoo is configured to log a command's input
- or output, the I/O logs will be compressed using zzlliibb.
- This flag is _o_n by default when ssuuddoo is compiled with
- zzlliibb support.
-
- exec_background By default, ssuuddoo runs a command as the foreground
- process as long as ssuuddoo itself is running in the
- foreground. When the _e_x_e_c___b_a_c_k_g_r_o_u_n_d flag is enabled
- and the command is being run in a pty (due to I/O
- logging or the _u_s_e___p_t_y flag), the command will be run
- as a background process. Attempts to read from the
- controlling terminal (or to change terminal settings)
- will result in the command being suspended with the
- SIGTTIN signal (or SIGTTOU in the case of terminal
- settings). If this happens when ssuuddoo is a foreground
- process, the command will be granted the controlling
- terminal and resumed in the foreground with no user
- intervention required. The advantage of initially
- running the command in the background is that ssuuddoo need
- not read from the terminal unless the command
- explicitly requests it. Otherwise, any terminal input
- must be passed to the command, whether it has required
- it or not (the kernel buffers terminals so it is not
- possible to tell whether the command really wants the
- input). This is different from historic _s_u_d_o behavior
- or when the command is not being run in a pty.
-
- For this to work seamlessly, the operating system must
- support the automatic restarting of system calls.
- Unfortunately, not all operating systems do this by
- default, and even those that do may have bugs. For
- example, macOS fails to restart the ttccggeettaattttrr() and
- ttccsseettaattttrr() system calls (this is a bug in macOS).
- Furthermore, because this behavior depends on the
- command stopping with the SIGTTIN or SIGTTOU signals,
- programs that catch these signals and suspend
- themselves with a different signal (usually SIGTOP)
- will not be automatically foregrounded. Some versions
- of the linux su(1) command behave this way. This flag
- is _o_f_f by default.
-
- This setting is only supported by version 1.8.7 or
- higher. It has no effect unless I/O logging is enabled
- or the _u_s_e___p_t_y flag is enabled.
-
- env_editor If set, vviissuuddoo will use the value of the SUDO_EDITOR,
- VISUAL or EDITOR environment variables before falling
- back on the default editor list. Note that this may
- create a security hole as it allows the user to run any
- arbitrary command as root without logging. A safer
- alternative is to place a colon-separated list of
- editors in the _e_d_i_t_o_r variable. vviissuuddoo will then only
- use SUDO_EDITOR, VISUAL or EDITOR if they match a value
- specified in _e_d_i_t_o_r. If the _e_n_v___r_e_s_e_t flag is enabled,
- the SUDO_EDITOR, VISUAL and/or EDITOR environment
- variables must be present in the _e_n_v___k_e_e_p list for the
- _e_n_v___e_d_i_t_o_r flag to function when vviissuuddoo is invoked via
- ssuuddoo. This flag is _o_f_f by default.
-
- env_reset If set, ssuuddoo will run the command in a minimal
- environment containing the TERM, PATH, HOME, MAIL,
- SHELL, LOGNAME, USER and SUDO_* variables. Any
- variables in the caller's environment or in the file
- specified by the _r_e_s_t_r_i_c_t_e_d___e_n_v___f_i_l_e option that match
- the env_keep and env_check lists are then added,
- followed by any variables present in the file specified
- by the _e_n_v___f_i_l_e option (if any). The contents of the
- env_keep and env_check lists, as modified by global
- Defaults parameters in _s_u_d_o_e_r_s, are displayed when ssuuddoo
- is run by root with the --VV option. If the _s_e_c_u_r_e___p_a_t_h
- option is set, its value will be used for the PATH
- environment variable. This flag is _o_n by default.
-
- fast_glob Normally, ssuuddoo uses the glob(3) function to do shell-
- style globbing when matching path names. However,
- since it accesses the file system, glob(3) can take a
- long time to complete for some patterns, especially
- when the pattern references a network file system that
- is mounted on demand (auto mounted). The _f_a_s_t___g_l_o_b
- option causes ssuuddoo to use the fnmatch(3) function,
- which does not access the file system to do its
- matching. The disadvantage of _f_a_s_t___g_l_o_b is that it is
- unable to match relative path names such as _._/_l_s or
- _._._/_b_i_n_/_l_s. This has security implications when path
- names that include globbing characters are used with
- the negation operator, `!', as such rules can be
- trivially bypassed. As such, this option should not be
- used when the _s_u_d_o_e_r_s file contains rules that contain
- negated path names which include globbing characters.
- This flag is _o_f_f by default.
-
- fqdn Set this flag if you want to put fully qualified host
- names in the _s_u_d_o_e_r_s file when the local host name (as
- returned by the hostname command) does not contain the
- domain name. In other words, instead of myhost you
- would use myhost.mydomain.edu. You may still use the
- short form if you wish (and even mix the two). This
- option is only effective when the "canonical" host
- name, as returned by the ggeettaaddddrriinnffoo() or
- ggeetthhoossttbbyynnaammee() function, is a fully-qualified domain
- name. This is usually the case when the system is
- configured to use DNS for host name resolution.
-
- If the system is configured to use the _/_e_t_c_/_h_o_s_t_s file
- in preference to DNS, the "canonical" host name may not
- be fully-qualified. The order that sources are queried
- for host name resolution is usually specified in the
- _/_e_t_c_/_n_s_s_w_i_t_c_h_._c_o_n_f, _/_e_t_c_/_n_e_t_s_v_c_._c_o_n_f, _/_e_t_c_/_h_o_s_t_._c_o_n_f,
- or, in some cases, _/_e_t_c_/_r_e_s_o_l_v_._c_o_n_f file. In the
- _/_e_t_c_/_h_o_s_t_s file, the first host name of the entry is
- considered to be the "canonical" name; subsequent names
- are aliases that are not used by ssuuddooeerrss. For example,
- the following hosts file line for the machine "xyzzy"
- has the fully-qualified domain name as the "canonical"
- host name, and the short version as an alias.
-
- 192.168.1.1 xyzzy.sudo.ws xyzzy
-
- If the machine's hosts file entry is not formatted
- properly, the _f_q_d_n option will not be effective if it
- is queried before DNS.
-
- Beware that when using DNS for host name resolution,
- turning on _f_q_d_n requires ssuuddooeerrss to make DNS lookups
- which renders ssuuddoo unusable if DNS stops working (for
- example if the machine is disconnected from the
- network). Also note that just like with the hosts
- file, you must use the "canonical" 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.
-
- This flag is _o_f_f by default.
-
- ignore_audit_errors
- Allow commands to be run even if ssuuddooeerrss cannot write
- to the audit log. If enabled, an audit log write
- failure is not treated as a fatal error. If disabled,
- a command may only be run after the audit event is
- successfully written. This flag is only effective on
- systems for which ssuuddooeerrss supports audit logging,
- including FreeBSD, Linux, macOS and Solaris. This flag
- is _o_n by default.
-
- ignore_dot If set, ssuuddoo will ignore "." or "" (both denoting
- current directory) in the PATH environment variable;
- the PATH itself is not modified. This flag is _o_f_f by
- default.
-
- ignore_iolog_errors
- Allow commands to be run even if ssuuddooeerrss cannot write
- to the I/O log. If enabled, an I/O log write failure
- is not treated as a fatal error. If disabled, the
- command will be terminated if the I/O log cannot be
- written to. This flag is _o_f_f by default.
-
- ignore_logfile_errors
- Allow commands to be run even if ssuuddooeerrss cannot write
- to the log file. If enabled, a log file write failure
- is not treated as a fatal error. If disabled, a
- command may only be run after the log file entry is
- successfully written. This flag only has an effect
- when ssuuddooeerrss is configured to use file-based logging
- via the _l_o_g_f_i_l_e option. This flag is _o_n by default.
-
- ignore_local_sudoers
- If set via LDAP, parsing of _/_e_t_c_/_s_u_d_o_e_r_s will be
- skipped. This is intended for Enterprises that wish to
- prevent the usage of local sudoers files so that only
- LDAP is used. This thwarts the efforts of rogue
- operators who would attempt to add roles to
- _/_e_t_c_/_s_u_d_o_e_r_s. When this option is present,
- _/_e_t_c_/_s_u_d_o_e_r_s does not even need to exist. Since this
- option tells ssuuddoo how to behave when no specific LDAP
- entries have been matched, this sudoOption is only
- meaningful for the cn=defaults section. This flag is
- _o_f_f by default.
-
- ignore_unknown_defaults
- If set, ssuuddoo will not produce a warning if it
- encounters an unknown Defaults entry in the _s_u_d_o_e_r_s
- file or an unknown sudoOption in LDAP. This flag is
- _o_f_f by default.
-
- insults If set, ssuuddoo will insult users when they enter an
- incorrect password. This flag is _o_f_f by default.
-
- log_host If set, the host name will be logged in the (non-
- syslog) ssuuddoo log file. This flag is _o_f_f by default.
-
- log_input If set, ssuuddoo will run the command in a pseudo-tty and
- log all user input. If the standard input is not
- connected to the user's tty, due to I/O redirection or
- because the command is part of a pipeline, that input
- is also captured and stored in a separate log file.
- Anything sent to the standard input will be consumed,
- regardless of whether or not the command run via ssuuddoo
- is actually reading the standard input. This may have
- unexpected results when using ssuuddoo in a shell script
- that expects to process the standard input. For more
- information about I/O logging, see the _I_/_O _L_O_G _F_I_L_E_S
- section. This flag is _o_f_f by default.
-
- log_output If set, ssuuddoo will run the command in a pseudo-tty and
- log all output that is sent to the screen, similar to
- the script(1) command. For more information about I/O
- logging, see the _I_/_O _L_O_G _F_I_L_E_S section. This flag is
- _o_f_f by default.
-
- log_year If set, the four-digit year will be logged in the (non-
- syslog) ssuuddoo log file. This flag is _o_f_f by default.
-
- long_otp_prompt When validating with a One Time Password (OTP) scheme
- such as SS//KKeeyy or OOPPIIEE, 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. This flag is _o_f_f
- by default.
-
- mail_all_cmnds Send mail to the _m_a_i_l_t_o user every time a user attempts
- to run a command via ssuuddoo (this includes ssuuddooeeddiitt). No
- mail will be sent if the user runs ssuuddoo with the --ll or
- --vv option unless there is an authentication error and
- the _m_a_i_l___b_a_d_p_a_s_s flag is also set. This flag is _o_f_f by
- default.
-
- mail_always Send mail to the _m_a_i_l_t_o user every time a user runs
- ssuuddoo. This flag is _o_f_f by default.
-
- mail_badpass Send mail to the _m_a_i_l_t_o user if the user running ssuuddoo
- does not enter the correct password. If the command
- the user is attempting to run is not permitted by
- ssuuddooeerrss and one of the _m_a_i_l___a_l_l___c_m_n_d_s, _m_a_i_l___a_l_w_a_y_s,
- _m_a_i_l___n_o___h_o_s_t, _m_a_i_l___n_o___p_e_r_m_s or _m_a_i_l___n_o___u_s_e_r flags are
- set, this flag will have no effect. This flag is _o_f_f
- by default.
-
- mail_no_host If set, mail will be sent to the _m_a_i_l_t_o user if the
- invoking user exists in the _s_u_d_o_e_r_s file, but is not
- allowed to run commands on the current host. This flag
- is _o_f_f by default.
-
- mail_no_perms If set, mail will be sent to the _m_a_i_l_t_o user if the
- invoking user is allowed to use ssuuddoo but the command
- they are trying is not listed in their _s_u_d_o_e_r_s file
- entry or is explicitly denied. This flag is _o_f_f by
- default.
-
- mail_no_user If set, mail will be sent to the _m_a_i_l_t_o user if the
- invoking user is not in the _s_u_d_o_e_r_s file. This flag is
- _o_n by default.
-
- match_group_by_gid
- By default, ssuuddooeerrss will look up each group the user is
- a member of by group ID to determine the group name
- (this is only done once). The resulting list of the
- user's group names is used when matching groups listed
- in the _s_u_d_o_e_r_s file. This works well on systems where
- the number of groups listed in the _s_u_d_o_e_r_s file is
- larger than the number of groups a typical user belongs
- to. On systems where group lookups are slow, where
- users may belong to a large number of groups, and where
- the number of groups listed in the _s_u_d_o_e_r_s file is
- relatively small, it may be prohibitively expensive and
- running commands via ssuuddoo may take longer than normal.
- On such systems it may be faster to use the
- _m_a_t_c_h___g_r_o_u_p___b_y___g_i_d flag to avoid resolving the user's
- group IDs to group names. In this case, ssuuddooeerrss must
- look up any group name listed in the _s_u_d_o_e_r_s file and
- use the group ID instead of the group name when
- determining whether the user is a member of the group.
-
- Note that if _m_a_t_c_h___g_r_o_u_p___b_y___g_i_d is enabled, group
- database lookups performed by ssuuddooeerrss will be keyed by
- group name as opposed to group ID. On systems where
- there are multiple sources for the group database, it
- is possible to have conflicting group names or group
- IDs in the local _/_e_t_c_/_g_r_o_u_p file and the remote group
- database. On such systems, enabling or disabling
- _m_a_t_c_h___g_r_o_u_p___b_y___g_i_d can be used to choose whether group
- database queries are performed by name (enabled) or ID
- (disabled), which may aid in working around group entry
- conflicts.
-
- The _m_a_t_c_h___g_r_o_u_p___b_y___g_i_d flag has no effect when _s_u_d_o_e_r_s
- data is stored in LDAP. This flag is _o_f_f by default.
-
- This setting is only supported by version 1.8.18 or
- higher.
-
- netgroup_tuple If set, netgroup lookups will be performed using the
- full netgroup tuple: host name, user name and domain
- (if one is set). Historically, ssuuddoo only matched the
- user name and domain for netgroups used in a User_List
- and only matched the host name and domain for netgroups
- used in a Host_List. This flag is _o_f_f by default.
-
- noexec If set, all commands run via ssuuddoo will behave as if the
- NOEXEC tag has been set, unless overridden by an EXEC
- tag. See the description of _E_X_E_C _a_n_d _N_O_E_X_E_C above as
- well as the _P_r_e_v_e_n_t_i_n_g _s_h_e_l_l _e_s_c_a_p_e_s section at the end
- of this manual. This flag is _o_f_f by default.
-
- pam_session On systems that use PAM for authentication, ssuuddoo will
- create a new PAM session for the command to be run in.
- Disabling _p_a_m___s_e_s_s_i_o_n 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. If _p_a_m___s_e_s_s_i_o_n,
- _p_a_m___s_e_t_c_r_e_d, and _u_s_e___p_t_y are disabled and I/O logging
- has not been configured, ssuuddoo will execute the command
- directly instead of running it as a child process.
- This flag is _o_n by default.
-
- This setting is only supported by version 1.8.7 or
- higher.
-
- pam_setcred On systems that use PAM for authentication, ssuuddoo will
- attempt to establish credentials for the target user by
- default, if supported by the underlying authentication
- system. One example of a credential is a Kerberos
- ticket. If _p_a_m___s_e_s_s_i_o_n, _p_a_m___s_e_t_c_r_e_d, and _u_s_e___p_t_y are
- disabled and I/O logging has not been configured, ssuuddoo
- will execute the command directly instead of running it
- as a child process. This flag is _o_n by default.
-
- This setting is only supported by version 1.8.8 or
- higher.
-
- passprompt_override
- If set, the prompt specified by _p_a_s_s_p_r_o_m_p_t or the
- SUDO_PROMPT environment variable will always be used
- and will replace the prompt provided by a PAM module or
- other authentication method. This flag is _o_f_f by
- default.
-
- path_info Normally, ssuuddoo will tell the user when a command could
- not be found in their PATH environment variable. 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, ssuuddoo will tell the user that they are
- not allowed to run it, which can be confusing. This
- flag is _o_n by default.
-
- preserve_groups By default, ssuuddoo will initialize the group vector to
- the list of groups the target user is in. When
- _p_r_e_s_e_r_v_e___g_r_o_u_p_s is set, the user's existing group
- vector is left unaltered. The real and effective group
- IDs, however, are still set to match the target user.
- This flag is _o_f_f by default.
-
- pwfeedback By default, ssuuddoo reads the password like most other
- Unix programs, by turning off echo until the user hits
- the return (or enter) key. Some users become confused
- by this as it appears to them that ssuuddoo has hung at
- this point. When _p_w_f_e_e_d_b_a_c_k is set, ssuuddoo will provide
- visual feedback when the user presses a key. Note that
- this does have a security impact as an onlooker may be
- able to determine the length of the password being
- entered. This flag is _o_f_f by default.
-
- requiretty If set, ssuuddoo will only run when the user is logged in
- to a real tty. When this flag is set, ssuuddoo can only be
- run from a login session and not via other means such
- as cron(1m) or cgi-bin scripts. This flag is _o_f_f by
- default.
-
- root_sudo If set, root is allowed to run ssuuddoo too. Disabling
- this prevents users from "chaining" ssuuddoo commands to
- get a root shell by doing something like "sudo sudo
- /bin/sh". Note, however, that turning off _r_o_o_t___s_u_d_o
- will also prevent root from running ssuuddooeeddiitt.
- Disabling _r_o_o_t___s_u_d_o provides no real additional
- security; it exists purely for historical reasons.
- This flag is _o_n by default.
-
- rootpw If set, ssuuddoo will prompt for the root password instead
- of the password of the invoking user when running a
- command or editing a file. This flag is _o_f_f by
- default.
-
- runaspw If set, ssuuddoo will prompt for the password of the user
- defined by the _r_u_n_a_s___d_e_f_a_u_l_t option (defaults to root)
- instead of the password of the invoking user when
- running a command or editing a file. This flag is _o_f_f
- by default.
-
- set_home If enabled and ssuuddoo is invoked with the --ss option the
- HOME environment variable will be set to the home
- directory of the target user (which is root unless the
- --uu option is used). This effectively makes the --ss
- option imply --HH. Note that HOME is already set when
- the _e_n_v___r_e_s_e_t option is enabled, so _s_e_t___h_o_m_e is only
- effective for configurations where either _e_n_v___r_e_s_e_t is
- disabled or HOME is present in the _e_n_v___k_e_e_p list. This
- flag is _o_f_f by default.
-
- set_logname Normally, ssuuddoo will set the LOGNAME and USER
- environment variables to the name of the target user
- (usually root unless the --uu option is given). However,
- since some programs (including the RCS revision control
- system) use LOGNAME to determine the real identity of
- the user, it may be desirable to change this behavior.
- This can be done by negating the set_logname option.
- Note that _s_e_t___l_o_g_n_a_m_e will have no effect if the
- _e_n_v___r_e_s_e_t option has not been disabled and the _e_n_v___k_e_e_p
- list contains LOGNAME or USER. This flag is _o_n by
- default.
-
- set_utmp When enabled, ssuuddoo will create an entry in the utmp (or
- utmpx) file when a pseudo-tty is allocated. A pseudo-
- tty is allocated by ssuuddoo when the _l_o_g___i_n_p_u_t, _l_o_g___o_u_t_p_u_t
- or _u_s_e___p_t_y flags are enabled. By default, the new
- entry will be a copy of the user's existing utmp entry
- (if any), with the tty, time, type and pid fields
- updated. This flag is _o_n by default.
-
- setenv Allow the user to disable the _e_n_v___r_e_s_e_t option from the
- command line via the --EE option. Additionally,
- environment variables set via the command line are not
- subject to the restrictions imposed by _e_n_v___c_h_e_c_k,
- _e_n_v___d_e_l_e_t_e, or _e_n_v___k_e_e_p. As such, only trusted users
- should be allowed to set variables in this manner.
- This flag is _o_f_f by default.
-
- shell_noargs If set and ssuuddoo is invoked with no arguments it acts as
- if the --ss option had been given. That is, it runs a
- shell as root (the shell is determined by the SHELL
- environment variable if it is set, falling back on the
- shell listed in the invoking user's /etc/passwd entry
- if not). This flag is _o_f_f by default.
-
- stay_setuid Normally, when ssuuddoo executes a command the real and
- effective UIDs are set to the target user (root by
- default). This option changes that behavior such that
- the real UID is left as the invoking user's UID. In
- other words, this makes ssuuddoo act as a setuid wrapper.
- This can be useful on systems that disable some
- potentially dangerous functionality when a program is
- run setuid. This option is only effective on systems
- that support either the setreuid(2) or setresuid(2)
- system call. This flag is _o_f_f by default.
-
- sudoedit_checkdir
- If set, ssuuddooeeddiitt will check all directory components of
- the path to be edited for writability by the invoking
- user. Symbolic links will not be followed in writable
- directories and ssuuddooeeddiitt will refuse to edit a file
- located in a writable directory. These restrictions
- are not enforced when ssuuddooeeddiitt is run by root. On some
- systems, if all directory components of the path to be
- edited are not readable by the target user, ssuuddooeeddiitt
- will be unable to edit the file. This flag is _o_n by
- default.
-
- This setting was first introduced in version 1.8.15 but
- initially suffered from a race condition. The check
- for symbolic links in writable intermediate directories
- was added in version 1.8.16.
-
- sudoedit_follow By default, ssuuddooeeddiitt will not follow symbolic links
- when opening files. The _s_u_d_o_e_d_i_t___f_o_l_l_o_w option can be
- enabled to allow ssuuddooeeddiitt to open symbolic links. It
- may be overridden on a per-command basis by the _F_O_L_L_O_W
- and _N_O_F_O_L_L_O_W tags. This flag is _o_f_f by default.
-
- This setting is only supported by version 1.8.15 or
- higher.
-
- syslog_pid When logging via syslog(3), include the process ID in
- the log entry. This flag is _o_f_f by default.
-
- This setting is only supported by version 1.8.21 or
- higher.
-
- targetpw If set, ssuuddoo will prompt for the password of the user
- specified by the --uu option (defaults to root) instead
- of the password of the invoking user when running a
- command or editing a file. Note that this flag
- precludes the use of a uid not listed in the passwd
- database as an argument to the --uu option. This flag is
- _o_f_f by default.
-
- tty_tickets If set, users must authenticate on a per-tty basis.
- With this flag enabled, ssuuddoo will use a separate record
- in the time stamp file for each terminal. If disabled,
- a single record is used for all login sessions.
-
- This option has been superseded by the _t_i_m_e_s_t_a_m_p___t_y_p_e
- option.
-
- umask_override If set, ssuuddoo will set the umask as specified in the
- _s_u_d_o_e_r_s file without modification. This makes it
- possible to specify a umask in the _s_u_d_o_e_r_s file that is
- more permissive than the user's own umask and matches
- historical behavior. If _u_m_a_s_k___o_v_e_r_r_i_d_e is not set,
- ssuuddoo will set the umask to be the union of the user's
- umask and what is specified in _s_u_d_o_e_r_s. This flag is
- _o_f_f by default.
-
- use_loginclass If set, ssuuddoo will apply the defaults specified for the
- target user's login class if one exists. Only
- available if ssuuddoo is configured with the
- --with-logincap option. This flag is _o_f_f by default.
-
- use_netgroups If set, netgroups (prefixed with `+'), may be used in
- place of a user or host. For LDAP-based sudoers,
- netgroup support requires an expensive sub-string match
- on the server unless the NNEETTGGRROOUUPP__BBAASSEE directive is
- present in the _/_e_t_c_/_l_d_a_p_._c_o_n_f file. If netgroups are
- not needed, this option can be disabled to reduce the
- load on the LDAP server. This flag is _o_n by default.
-
- use_pty If set, and ssuuddoo is running in a terminal, the command
- will be run in a pseudo-pty (even if no I/O logging is
- being done). If the ssuuddoo process is not attached to a
- terminal, _u_s_e___p_t_y has no effect.
-
- A malicious program run under ssuuddoo may be capable of
- injecting commands into the user's terminal or running
- a background process that retains access to the user's
- terminal device even after the main program has
- finished executing. By running the command in a
- separate pseudo-pty, this attack is no longer possible.
- This flag is _o_f_f by default.
-
- user_command_timeouts
- If set, the user may specify a timeout on the command
- line. If the timeout expires before the command has
- exited, the command will be terminated. If a timeout
- is specified both in the _s_u_d_o_e_r_s file and on the
- command line, the smaller of the two timeouts will be
- used. See the Timeout_Spec section for a description
- of the timeout syntax. This flag is _o_f_f by default.
-
- This setting is only supported by version 1.8.20 or
- higher.
-
- utmp_runas If set, ssuuddoo will store the name of the runas user when
- updating the utmp (or utmpx) file. By default, ssuuddoo
- stores the name of the invoking user. This flag is _o_f_f
- by default.
-
- visiblepw By default, ssuuddoo will refuse to run if the user must
- enter a password but it is not possible to disable echo
- on the terminal. If the _v_i_s_i_b_l_e_p_w flag is set, ssuuddoo
- will prompt for a password even when it would be
- visible on the screen. This makes it possible to run
- things like "ssh somehost sudo ls" since by default,
- ssh(1) does not allocate a tty when running a command.
- This flag is _o_f_f by default.
-
- IInntteeggeerrss:
-
- closefrom Before it executes a command, ssuuddoo will close all open
- file descriptors other than standard input, standard
- output and standard error (ie: file descriptors 0-2).
- The _c_l_o_s_e_f_r_o_m option can be used to specify a different
- file descriptor at which to start closing. The default
- is 3.
-
- command_timeout The maximum amount of time a command is allowed to run
- before it is terminated. See the Timeout_Spec section
- for a description of the timeout syntax.
-
- This setting is only supported by version 1.8.20 or
- higher.
-
- maxseq The maximum sequence number that will be substituted
- for the "%{seq}" escape in the I/O log file (see the
- _i_o_l_o_g___d_i_r description below for more information).
- While the value substituted for "%{seq}" is in base 36,
- _m_a_x_s_e_q itself should be expressed in decimal. Values
- larger than 2176782336 (which corresponds to the base
- 36 sequence number "ZZZZZZ") will be silently truncated
- to 2176782336. The default value is 2176782336.
-
- Once the local sequence number reaches the value of
- _m_a_x_s_e_q, it will "roll over" to zero, after which
- ssuuddooeerrss will truncate and re-use any existing I/O log
- path names.
-
- This setting is only supported by version 1.8.7 or
- higher.
-
- passwd_tries The number of tries a user gets to enter his/her
- password before ssuuddoo logs the failure and exits. The
- default is 3.
-
- syslog_maxlen On many systems, syslog(3) has a relatively small log
- buffer. IETF RFC 5424 states that syslog servers must
- support messages of at least 480 bytes and should
- support messages up to 2048 bytes. By default, ssuuddooeerrss
- creates log messages up to 980 bytes which corresponds
- to the historic BSD syslog implementation which used a
- 1024 byte buffer to store the message, date, hostname
- and program name. To prevent syslog messages from
- being truncated, ssuuddooeerrss will split up log messages
- that are larger than _s_y_s_l_o_g___m_a_x_l_e_n bytes. When a
- message is split, additional parts will include the
- string "(command continued)" after the user name and
- before the continued command line arguments.
-
- This setting is only supported by version 1.8.19 or
- higher.
-
- IInntteeggeerrss tthhaatt ccaann bbee uusseedd iinn aa bboooolleeaann ccoonntteexxtt:
-
- loglinelen Number of characters per line for the file log. This
- value is used to decide when to wrap lines for nicer
- log files. This has no effect on the syslog log file,
- only the file log. The default is 80 (use 0 or negate
- the option to disable word wrap).
-
- passwd_timeout Number of minutes before the ssuuddoo password prompt times
- out, or 0 for no timeout. The timeout may include a
- fractional component if minute granularity is
- insufficient, for example 2.5. The default is 5.
-
- timestamp_timeout
- Number of minutes that can elapse before ssuuddoo will ask
- for a passwd again. The timeout may include a
- fractional component if minute granularity is
- insufficient, for example 2.5. The default is 5. Set
- this to 0 to always prompt for a password. If set to a
- value less than 0 the user's time stamp will not expire
- until the system is rebooted. This can be used to
- allow users to create or delete their own time stamps
- via "sudo -v" and "sudo -k" respectively.
-
- umask Umask to use when running the command. Negate this
- option or set it to 0777 to preserve the user's umask.
- The actual umask that is used will be the union of the
- user's umask and the value of the _u_m_a_s_k option, which
- defaults to 0022. This guarantees that ssuuddoo never
- lowers the umask when running a command. Note: on
- systems that use PAM, the default PAM configuration may
- specify its own umask which will override the value set
- in _s_u_d_o_e_r_s.
-
- SSttrriinnggss:
-
- authfail_message Message that is displayed after a user fails to
- authenticate. The message may include the `%d' escape
- which will expand to the number of failed password
- attempts. If set, it overrides the default message, %d
- incorrect password attempt(s).
-
- badpass_message Message that is displayed if a user enters an incorrect
- password. The default is Sorry, try again. unless
- insults are enabled.
-
- editor A colon (`:') separated list of editors path names used
- by ssuuddooeeddiitt and vviissuuddoo. For ssuuddooeeddiitt, this list is
- used to find an editor when none of the SUDO_EDITOR,
- VISUAL or EDITOR environment variables are set to an
- editor that exists and is executable. For vviissuuddoo, it
- is used as a white list of allowed editors; vviissuuddoo will
- choose the editor that matches the user's SUDO_EDITOR,
- VISUAL or EDITOR environment variable if possible, or
- the first editor in the list that exists and is
- executable if not. Unless invoked as ssuuddooeeddiitt, ssuuddoo
- does not preserve the SUDO_EDITOR, VISUAL and EDITOR
- environment variables by default, even when the
- _e_n_v___r_e_s_e_t option is enabled. The default is _v_i.
-
- iolog_dir The top-level directory to use when constructing the
- path name for the input/output log directory. Only
- used if the _l_o_g___i_n_p_u_t or _l_o_g___o_u_t_p_u_t options are enabled
- or when the LOG_INPUT or LOG_OUTPUT tags are present
- for a command. The session sequence number, if any, is
- stored in the directory. The default is
- _/_v_a_r_/_l_o_g_/_s_u_d_o_-_i_o.
-
- The following percent (`%') escape sequences are
- supported:
-
- %{seq}
- expanded to a monotonically increasing base-36
- sequence number, such as 0100A5, where every two
- digits are used to form a new directory, e.g.,
- _0_1_/_0_0_/_A_5
-
- %{user}
- expanded to the invoking user's login name
-
- %{group}
- expanded to the name of the invoking user's real
- group ID
-
- %{runas_user}
- expanded to the login name of the user the
- command will be run as (e.g., root)
-
- %{runas_group}
- expanded to the group name of the user the
- command will be run as (e.g., wheel)
-
- %{hostname}
- expanded to the local host name without the
- domain name
-
- %{command}
- expanded to the base name of the command being
- run
-
- In addition, any escape sequences supported by the
- system's strftime(3) function will be expanded.
-
- To include a literal `%' character, the string `%%'
- should be used.
-
- iolog_file The path name, relative to _i_o_l_o_g___d_i_r, in which to store
- input/output logs when the _l_o_g___i_n_p_u_t or _l_o_g___o_u_t_p_u_t
- options are enabled or when the LOG_INPUT or LOG_OUTPUT
- tags are present for a command. Note that _i_o_l_o_g___f_i_l_e
- may contain directory components. The default is
- "%{seq}".
-
- See the _i_o_l_o_g___d_i_r option above for a list of supported
- percent (`%') escape sequences.
-
- In addition to the escape sequences, path names that
- end in six or more Xs will have the Xs replaced with a
- unique combination of digits and letters, similar to
- the mktemp(3) function.
-
- If the path created by concatenating _i_o_l_o_g___d_i_r and
- _i_o_l_o_g___f_i_l_e already exists, the existing I/O log file
- will be truncated and overwritten unless _i_o_l_o_g___f_i_l_e
- ends in six or more Xs.
-
- iolog_flush If set, ssuuddoo will flush I/O log data to disk after each
- write instead of buffering it. This makes it possible
- to view the logs in real-time as the program is
- executing but may significantly reduce the
- effectiveness of I/O log compression. This flag is _o_f_f
- by default.
-
- This setting is only supported by version 1.8.20 or
- higher.
-
- iolog_group The group name to look up when setting the group ID on
- new I/O log files and directories. If _i_o_l_o_g___g_r_o_u_p is
- not set, the primary group ID of the user specified by
- _i_o_l_o_g___u_s_e_r is used. If neither _i_o_l_o_g___g_r_o_u_p nor
- _i_o_l_o_g___u_s_e_r are set, I/O log files and directories are
- created with group ID 0.
-
- This setting is only supported by version 1.8.19 or
- higher.
-
- iolog_mode The file mode to use when creating I/O log files. Mode
- bits for read and write permissions for owner, group or
- other are honored, everything else is ignored. The
- file permissions will always include the owner read and
- write bits, even if they are not present in the
- specified mode. When creating I/O log directories,
- search (execute) bits are added to match the read and
- write bits specified by _i_o_l_o_g___m_o_d_e. Defaults to 0600
- (read and write by user only).
-
- This setting is only supported by version 1.8.19 or
- higher.
-
- iolog_user The user name to look up when setting the user and
- group IDs on new I/O log files and directories. If
- _i_o_l_o_g___g_r_o_u_p is set, it will be used instead of the
- user's primary group ID. By default, I/O log files and
- directories are created with user and group ID 0.
-
- This setting can be useful when the I/O logs are stored
- on a Network File System (NFS) share. Having a
- dedicated user own the I/O log files means that ssuuddooeerrss
- does not write to the log files as user ID 0, which is
- usually not permitted by NFS.
-
- This setting is only supported by version 1.8.19 or
- higher.
-
- lecture_status_dir
- The directory in which ssuuddoo stores per-user lecture
- status files. Once a user has received the lecture, a
- zero-length file is created in this directory so that
- ssuuddoo will not lecture the user again. This directory
- should _n_o_t be cleared when the system reboots. The
- default is _/_v_a_r_/_a_d_m_/_s_u_d_o_/_l_e_c_t_u_r_e_d.
-
- limitprivs The default Solaris limit privileges to use when
- constructing a new privilege set for a command. This
- bounds all privileges of the executing process. The
- default limit privileges may be overridden on a per-
- command basis in _s_u_d_o_e_r_s. This option is only
- available if ssuuddooeerrss is built on Solaris 10 or higher.
-
- mailsub Subject of the mail sent to the _m_a_i_l_t_o user. The
- escape %h will expand to the host name of the machine.
- Default is "*** SECURITY information for %h ***".
-
- noexec_file As of ssuuddoo version 1.8.1 this option is no longer
- supported. The path to the noexec file should now be
- set in the sudo.conf(4) file.
-
- pam_login_service
- On systems that use PAM for authentication, this is the
- service name used when the --ii option is specified. The
- default value is "sudo". See the description of
- _p_a_m___s_e_r_v_i_c_e for more information.
-
- This setting is only supported by version 1.8.8 or
- higher.
-
- pam_service On systems that use PAM for authentication, the service
- name specifies the PAM policy to apply. This usually
- corresponds to an entry in the _p_a_m_._c_o_n_f file or a file
- in the _/_e_t_c_/_p_a_m_._d directory. The default value is
- "sudo".
-
- This setting is only supported by version 1.8.8 or
- higher.
-
- passprompt The default prompt to use when asking for a password;
- can be overridden via the --pp option or the SUDO_PROMPT
- environment variable. The following percent (`%')
- escape sequences are supported:
-
- %H expanded to the local host name including the
- domain name (only if the machine's host name is
- fully qualified or the _f_q_d_n option is set)
-
- %h expanded to the local host name without the
- domain name
-
- %p expanded to the user whose password is being
- asked for (respects the _r_o_o_t_p_w, _t_a_r_g_e_t_p_w and
- _r_u_n_a_s_p_w flags in _s_u_d_o_e_r_s)
-
- %U expanded to the login name of the user the
- command will be run as (defaults to root)
-
- %u expanded to the invoking user's login name
-
- %% two consecutive % characters are collapsed into a
- single % character
-
- On systems that use PAM for authentication, _p_a_s_s_p_r_o_m_p_t
- will only be used if the prompt provided by the PAM
- module matches the string "Password: " or "username's
- Password: ". This ensures that the _p_a_s_s_p_r_o_m_p_t setting
- does not interfere with challenge-response style
- authentication. The _p_a_s_s_p_r_o_m_p_t___o_v_e_r_r_i_d_e flag can be
- used to change this behavior.
-
- The default value is "Password: ".
-
- privs The default Solaris privileges to use when constructing
- a new privilege set for a command. This is passed to
- the executing process via the inherited privilege set,
- but is bounded by the limit privileges. If the _p_r_i_v_s
- option is specified but the _l_i_m_i_t_p_r_i_v_s option is not,
- the limit privileges of the executing process is set to
- _p_r_i_v_s. The default privileges may be overridden on a
- per-command basis in _s_u_d_o_e_r_s. This option is only
- available if ssuuddooeerrss is built on Solaris 10 or higher.
-
- role The default SELinux role to use when constructing a new
- security context to run the command. The default role
- may be overridden on a per-command basis in the _s_u_d_o_e_r_s
- file or via command line options. This option is only
- available when ssuuddoo is built with SELinux support.
-
- runas_default The default user to run commands as if the --uu option is
- not specified on the command line. This defaults to
- root.
-
- sudoers_locale Locale to use when parsing the sudoers file, logging
- commands, and sending email. Note that changing the
- locale may affect how sudoers is interpreted. Defaults
- to "C".
-
- timestamp_type ssuuddooeerrss uses per-user time stamp files for credential
- caching. The _t_i_m_e_s_t_a_m_p___t_y_p_e option can be used to
- specify the type of time stamp record used. It has the
- following possible values:
-
- global A single time stamp record is used for all of a
- user's login sessions, regardless of the
- terminal or parent process ID. An additional
- record is used to serialize password prompts
- when ssuuddoo is used multiple times in a pipeline,
- but this does not affect authentication.
-
- ppid A single time stamp record is used for all
- processes with the same parent process ID
- (usually the shell). Commands run from the
- same shell (or other common parent process)
- will not require a password for
- _t_i_m_e_s_t_a_m_p___t_i_m_e_o_u_t minutes (5 by default).
- Commands run via ssuuddoo with a different parent
- process ID, for example from a shell script,
- will be authenticated separately.
-
- tty One time stamp record is used for each
- terminal, which means that a user's login
- sessions are authenticated separately. If no
- terminal is present, the behavior is the same
- as _p_p_i_d. Commands run from the same terminal
- will not require a password for
- _t_i_m_e_s_t_a_m_p___t_i_m_e_o_u_t minutes (5 by default).
-
- kernel The time stamp is stored in the kernel as an
- attribute of the terminal device. If no
- terminal is present, the behavior is the same
- as _p_p_i_d. Negative _t_i_m_e_s_t_a_m_p___t_i_m_e_o_u_t values are
- not supported and positive values are limited
- to a maximum of 60 minutes. This is currently
- only supported on OpenBSD.
-
- The default value is _t_t_y.
-
- This setting is only supported by version 1.8.21 or
- higher.
-
- timestampdir The directory in which ssuuddoo stores its time stamp
- files. This directory should be cleared when the
- system reboots. The default is _/_v_a_r_/_r_u_n_/_s_u_d_o_/_t_s.
-
- timestampowner The owner of the lecture status directory, time stamp
- directory and all files stored therein. The default is
- root.
-
- type The default SELinux type to use when constructing a new
- security context to run the command. The default type
- may be overridden on a per-command basis in the _s_u_d_o_e_r_s
- file or via command line options. This option is only
- available when ssuuddoo is built with SELinux support.
-
- SSttrriinnggss tthhaatt ccaann bbee uusseedd iinn aa bboooolleeaann ccoonntteexxtt:
-
- env_file The _e_n_v___f_i_l_e option specifies the fully qualified path to a
- file containing variables to be set in the environment of
- the program being run. Entries in this file should either
- be of the form "VARIABLE=value" or "export VARIABLE=value".
- The value may optionally be surrounded by single or double
- quotes. Variables in this file are only added if the
- variable does not already exist in the environment. This
- file is considered to be part of the security policy, its
- contents are not subject to other ssuuddoo environment
- restrictions such as _e_n_v___k_e_e_p and _e_n_v___c_h_e_c_k.
-
- exempt_group Users in this group are exempt from password and PATH
- requirements. The group name specified should not include
- a % prefix. This is not set by default.
-
- fdexec Determines whether ssuuddoo will execute a command by its path
- or by an open file descriptor. It has the following
- possible values:
-
- always Always execute by file descriptor.
-
- never Never execute by file descriptor.
-
- digest_only
- Only execute by file descriptor if the command has
- an associated digest in the _s_u_d_o_e_r_s file.
-
- The default value is _d_i_g_e_s_t___o_n_l_y. This avoids a time of
- check versus time of use race condition when the command is
- located in a directory writable by the invoking user.
-
- Note that _f_d_e_x_e_c will change the first element of the
- argument vector for scripts ($0 in the shell) due to the
- way the kernel runs script interpreters. Instead of being
- a normal path, it will refer to a file descriptor. For
- example, _/_d_e_v_/_f_d_/_4 on Solaris and _/_p_r_o_c_/_s_e_l_f_/_f_d_/_4 on Linux.
- A workaround is to use the SUDO_COMMAND environment
- variable instead.
-
- The _f_d_e_x_e_c setting is only used when the command is matched
- by path name. It has no effect if the command is matched
- by the built-in AALLLL alias.
-
- This setting is only supported by version 1.8.20 or higher.
- If the operating system does not support the fexecve(2)
- system call, this setting has no effect.
-
- group_plugin A string containing a ssuuddooeerrss group plugin with optional
- arguments. The string should consist of the plugin path,
- either fully-qualified or relative to the
- _/_u_s_r_/_l_o_c_a_l_/_l_i_b_e_x_e_c_/_s_u_d_o directory, followed by any
- configuration arguments the plugin requires. These
- arguments (if any) will be passed to the plugin's
- initialization function. If arguments are present, the
- string must be enclosed in double quotes ("").
-
- For more information see _G_R_O_U_P _P_R_O_V_I_D_E_R _P_L_U_G_I_N_S.
-
- lecture This option controls when a short lecture will be printed
- along with the password prompt. It has the following
- possible values:
-
- always Always lecture the user.
-
- never Never lecture the user.
-
- once Only lecture the user the first time they run ssuuddoo.
-
- If no value is specified, a value of _o_n_c_e is implied.
- Negating the option results in a value of _n_e_v_e_r being used.
- The default value is _o_n_c_e.
-
- lecture_file Path to a file containing an alternate ssuuddoo lecture that
- will be used in place of the standard lecture if the named
- file exists. By default, ssuuddoo uses a built-in lecture.
-
- listpw This option controls when a password will be required when
- a user runs ssuuddoo with the --ll option. It has the following
- possible values:
-
- all All the user's _s_u_d_o_e_r_s file entries for the
- current host must have the NOPASSWD flag set to
- avoid entering a password.
-
- always The user must always enter a password to use the
- --ll option.
-
- any At least one of the user's _s_u_d_o_e_r_s file entries
- for the current host must have the NOPASSWD flag
- set to avoid entering a password.
-
- never The user need never enter a password to use the
- --ll option.
-
- If no value is specified, a value of _a_n_y is implied.
- Negating the option results in a value of _n_e_v_e_r being used.
- The default value is _a_n_y.
-
- logfile Path to the ssuuddoo log file (not the syslog log file).
- Setting a path turns on logging to a file; negating this
- option turns it off. By default, ssuuddoo logs via syslog.
-
- mailerflags Flags to use when invoking mailer. Defaults to --tt.
-
- mailerpath Path to mail program used to send warning mail. Defaults
- to the path to sendmail found at configure time.
-
- mailfrom Address to use for the "from" address when sending warning
- and error mail. The address should be enclosed in double
- quotes ("") to protect against ssuuddoo interpreting the @
- sign. Defaults to the name of the user running ssuuddoo.
-
- mailto Address to send warning and error mail to. The address
- should be enclosed in double quotes ("") to protect against
- ssuuddoo interpreting the @ sign. Defaults to root.
-
- restricted_env_file
- The _r_e_s_t_r_i_c_t_e_d___e_n_v___f_i_l_e option specifies the fully
- qualified path to a file containing variables to be set in
- the environment of the program being run. Entries in this
- file should either be of the form "VARIABLE=value" or
- "export VARIABLE=value". The value may optionally be
- surrounded by single or double quotes. Variables in this
- file are only added if the variable does not already exist
- in the environment. Unlike _e_n_v___f_i_l_e, the file's contents
- are not trusted and are processed in a manner similar to
- that of the invoking user's environment. If _e_n_v___r_e_s_e_t is
- enabled, variables in the file will only be added if they
- are matched by either the _e_n_v___c_h_e_c_k or _e_n_v___k_e_e_p list. If
- _e_n_v___r_e_s_e_t is disabled, variables in the file are added as
- long as they are not matched by the _e_n_v___d_e_l_e_t_e list. In
- either case, the contents of _r_e_s_t_r_i_c_t_e_d___e_n_v___f_i_l_e are
- processed before the contents of _e_n_v___f_i_l_e.
-
- secure_path Path used for every command run from ssuuddoo. If you don't
- trust the people running ssuuddoo to have a sane 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". Users in the group specified by the
- _e_x_e_m_p_t___g_r_o_u_p option are not affected by _s_e_c_u_r_e___p_a_t_h. This
- option is not set by default.
-
- syslog Syslog facility if syslog is being used for logging (negate
- to disable syslog logging). Defaults to auth.
-
- The following syslog facilities are supported: aauutthhpprriivv (if
- your OS supports it), aauutthh, ddaaeemmoonn, uusseerr, llooccaall00, llooccaall11,
- llooccaall22, llooccaall33, llooccaall44, llooccaall55, llooccaall66, and llooccaall77.
-
- syslog_badpri
- Syslog priority to use when the user is not allowed to run
- a command or when authentication is unsuccessful. Defaults
- to alert.
-
- The following syslog priorities are supported: aalleerrtt, ccrriitt,
- ddeebbuugg, eemmeerrgg, eerrrr, iinnffoo, nnoottiiccee, wwaarrnniinngg, and nnoonnee.
- Negating the option or setting it to a value of nnoonnee will
- disable logging of unsuccessful commands.
-
- syslog_goodpri
- Syslog priority to use when the user is allowed to run a
- command and authentication is successful. Defaults to
- notice.
-
- See _s_y_s_l_o_g___b_a_d_p_r_i for the list of supported syslog
- priorities. Negating the option or setting it to a value
- of nnoonnee will disable logging of successful commands.
-
- verifypw This option controls when a password will be required when
- a user runs ssuuddoo with the --vv option. It has the following
- possible values:
-
- all All the user's _s_u_d_o_e_r_s file entries for the current
- host must have the NOPASSWD flag set to avoid
- entering a password.
-
- always The user must always enter a password to use the --vv
- option.
-
- any At least one of the user's _s_u_d_o_e_r_s file entries for
- the current host must have the NOPASSWD flag set to
- avoid entering a password.
-
- never The user need never enter a password to use the --vv
- option.
-
- If no value is specified, a value of _a_l_l is implied.
- Negating the option results in a value of _n_e_v_e_r being used.
- The default value is _a_l_l.
-
- LLiissttss tthhaatt ccaann bbee uusseedd iinn aa bboooolleeaann ccoonntteexxtt:
-
- env_check Environment variables to be removed from the user's
- environment unless they are considered "safe". For all
- variables except TZ, "safe" means that the variable's
- value does not contain any `%' or `/' characters. This
- can be used to guard against printf-style format
- vulnerabilities in poorly-written programs. The TZ
- variable is considered unsafe if any of the following
- are true:
-
- ++oo It consists of a fully-qualified path name,
- optionally prefixed with a colon (`:'), that does
- not match the location of the _z_o_n_e_i_n_f_o directory.
-
- ++oo It contains a _._. path element.
-
- ++oo It contains white space or non-printable characters.
-
- ++oo It is longer than the value of PATH_MAX.
-
- The argument may be a double-quoted, space-separated
- list or a single value without double-quotes. The list
- can be replaced, added to, deleted from, or disabled by
- using the =, +=, -=, and ! operators respectively.
- Regardless of whether the env_reset option is enabled
- or disabled, variables specified by env_check will be
- preserved in the environment if they pass the
- aforementioned check. The global list of environment
- variables to check is displayed when ssuuddoo is run by
- root with the --VV option.
-
- env_delete Environment variables to be removed from the user's
- environment when the _e_n_v___r_e_s_e_t option is not in effect.
- The argument may be a double-quoted, space-separated
- list or a single value without double-quotes. The list
- can be replaced, added to, deleted from, or disabled by
- using the =, +=, -=, and ! operators respectively. The
- global list of environment variables to remove is
- displayed when ssuuddoo is run by root with the --VV option.
- Note that many operating systems will remove
- potentially dangerous variables from the environment of
- any setuid process (such as ssuuddoo).
-
- env_keep Environment variables to be preserved in the user's
- environment when the _e_n_v___r_e_s_e_t option is in effect.
- This allows fine-grained control over the environment
- ssuuddoo-spawned processes will receive. The argument may
- be a double-quoted, space-separated list or a single
- value without double-quotes. The list can be replaced,
- added to, deleted from, or disabled by using the =, +=,
- -=, and ! operators respectively. The global list of
- variables to keep is displayed when ssuuddoo is run by root
- with the --VV option.
-
-GGRROOUUPP PPRROOVVIIDDEERR PPLLUUGGIINNSS
- The ssuuddooeerrss plugin supports its own plugin interface to allow non-Unix
- group lookups which can query a group source other than the standard Unix
- group database. This can be used to implement support for the
- nonunix_group syntax described earlier.
-
- Group provider plugins are specified via the _g_r_o_u_p___p_l_u_g_i_n Defaults
- setting. The argument to _g_r_o_u_p___p_l_u_g_i_n should consist of the plugin path,
- either fully-qualified or relative to the _/_u_s_r_/_l_o_c_a_l_/_l_i_b_e_x_e_c_/_s_u_d_o
- directory, followed by any configuration options the plugin requires.
- These options (if specified) will be passed to the plugin's
- initialization function. If options are present, the string must be
- enclosed in double quotes ("").
-
- The following group provider plugins are installed by default:
-
- group_file
- The _g_r_o_u_p___f_i_l_e plugin supports an alternate group file that
- uses the same syntax as the _/_e_t_c_/_g_r_o_u_p file. The path to the
- group file should be specified as an option to the plugin. For
- example, if the group file to be used is _/_e_t_c_/_s_u_d_o_-_g_r_o_u_p:
-
- Defaults group_plugin="group_file.so /etc/sudo-group"
-
- system_group
- The _s_y_s_t_e_m___g_r_o_u_p plugin supports group lookups via the standard
- C library functions ggeettggrrnnaamm() and ggeettggrriidd(). This plugin can
- be used in instances where the user belongs to groups not
- present in the user's supplemental group vector. This plugin
- takes no options:
-
- Defaults group_plugin=system_group.so
-
- The group provider plugin API is described in detail in sudo_plugin(4).
-
-LLOOGG FFOORRMMAATT
- ssuuddooeerrss can log events using either syslog(3) or a simple log file. The
- log format is almost identical in both cases.
-
- AAcccceepptteedd ccoommmmaanndd lloogg eennttrriieess
- Commands that sudo runs are logged using the following format (split into
- multiple lines for readability):
-
- date hostname progname: username : TTY=ttyname ; PWD=cwd ; \
- USER=runasuser ; GROUP=runasgroup ; TSID=logid ; \
- ENV=env_vars COMMAND=command
-
- Where the fields are as follows:
-
- date The date the command was run. Typically, this is in the
- format "MMM, DD, HH:MM:SS". If logging via syslog(3), the
- actual date format is controlled by the syslog daemon. If
- logging to a file and the _l_o_g___y_e_a_r option is enabled, the
- date will also include the year.
-
- hostname The name of the host ssuuddoo was run on. This field is only
- present when logging via syslog(3).
-
- progname The name of the program, usually _s_u_d_o or _s_u_d_o_e_d_i_t. This
- field is only present when logging via syslog(3).
-
- username The login name of the user who ran ssuuddoo.
-
- ttyname The short name of the terminal (e.g., "console", "tty01",
- or "pts/0") ssuuddoo was run on, or "unknown" if there was no
- terminal present.
-
- cwd The current working directory that ssuuddoo was run in.
-
- runasuser The user the command was run as.
-
- runasgroup The group the command was run as if one was specified on
- the command line.
-
- logid An I/O log identifier that can be used to replay the
- command's output. This is only present when the _l_o_g___i_n_p_u_t
- or _l_o_g___o_u_t_p_u_t option is enabled.
-
- env_vars A list of environment variables specified on the command
- line, if specified.
-
- command The actual command that was executed.
-
- Messages are logged using the locale specified by _s_u_d_o_e_r_s___l_o_c_a_l_e, which
- defaults to the "C" locale.
-
- DDeenniieedd ccoommmmaanndd lloogg eennttrriieess
- If the user is not allowed to run the command, the reason for the denial
- will follow the user name. Possible reasons include:
-
- user NOT in sudoers
- The user is not listed in the _s_u_d_o_e_r_s file.
-
- user NOT authorized on host
- The user is listed in the _s_u_d_o_e_r_s file but is not allowed to run
- commands on the host.
-
- command not allowed
- The user is listed in the _s_u_d_o_e_r_s file for the host but they are not
- allowed to run the specified command.
-
- 3 incorrect password attempts
- The user failed to enter their password after 3 tries. The actual
- number of tries will vary based on the number of failed attempts and
- the value of the _p_a_s_s_w_d___t_r_i_e_s option.
-
- a password is required
- ssuuddoo's --nn option was specified but a password was required.
-
- sorry, you are not allowed to set the following environment variables
- The user specified environment variables on the command line that were
- not allowed by _s_u_d_o_e_r_s.
-
- EErrrroorr lloogg eennttrriieess
- If an error occurs, ssuuddooeerrss will log a message and, in most cases, send a
- message to the administrator via email. Possible errors include:
-
- parse error in /etc/sudoers near line N
- ssuuddooeerrss encountered an error when parsing the specified file. In some
- cases, the actual error may be one line above or below the line number
- listed, depending on the type of error.
-
- problem with defaults entries
- The _s_u_d_o_e_r_s file contains one or more unknown Defaults settings. This
- does not prevent ssuuddoo from running, but the _s_u_d_o_e_r_s file should be
- checked using vviissuuddoo.
-
- timestamp owner (username): No such user
- The time stamp directory owner, as specified by the _t_i_m_e_s_t_a_m_p_o_w_n_e_r
- setting, could not be found in the password database.
-
- unable to open/read /etc/sudoers
- The _s_u_d_o_e_r_s file could not be opened for reading. This can happen
- when the _s_u_d_o_e_r_s file is located on a remote file system that maps
- user ID 0 to a different value. Normally, ssuuddooeerrss tries to open the
- _s_u_d_o_e_r_s file using group permissions to avoid this problem. Consider
- either changing the ownership of _/_e_t_c_/_s_u_d_o_e_r_s or adding an argument
- like "sudoers_uid=N" (where `N' is the user ID that owns the _s_u_d_o_e_r_s
- file) to the end of the ssuuddooeerrss Plugin line in the sudo.conf(4) file.
-
- unable to stat /etc/sudoers
- The _/_e_t_c_/_s_u_d_o_e_r_s file is missing.
-
- /etc/sudoers is not a regular file
- The _/_e_t_c_/_s_u_d_o_e_r_s file exists but is not a regular file or symbolic
- link.
-
- /etc/sudoers is owned by uid N, should be 0
- The _s_u_d_o_e_r_s file has the wrong owner. If you wish to change the
- _s_u_d_o_e_r_s file owner, please add "sudoers_uid=N" (where `N' is the user
- ID that owns the _s_u_d_o_e_r_s file) to the ssuuddooeerrss Plugin line in the
- sudo.conf(4) file.
-
- /etc/sudoers is world writable
- The permissions on the _s_u_d_o_e_r_s file allow all users to write to it.
- The _s_u_d_o_e_r_s file must not be world-writable, the default file mode is
- 0440 (readable by owner and group, writable by none). The default
- mode may be changed via the "sudoers_mode" option to the ssuuddooeerrss
- Plugin line in the sudo.conf(4) file.
-
- /etc/sudoers is owned by gid N, should be 1
- The _s_u_d_o_e_r_s file has the wrong group ownership. If you wish to change
- the _s_u_d_o_e_r_s file group ownership, please add "sudoers_gid=N" (where
- `N' is the group ID that owns the _s_u_d_o_e_r_s file) to the ssuuddooeerrss Plugin
- line in the sudo.conf(4) file.
-
- unable to open /var/run/sudo/ts/username
- ssuuddooeerrss was unable to read or create the user's time stamp file. This
- can happen when _t_i_m_e_s_t_a_m_p_o_w_n_e_r is set to a user other than root and
- the mode on _/_v_a_r_/_r_u_n_/_s_u_d_o is not searchable by group or other. The
- default mode for _/_v_a_r_/_r_u_n_/_s_u_d_o is 0711.
-
- unable to write to /var/run/sudo/ts/username
- ssuuddooeerrss was unable to write to the user's time stamp file.
-
- /var/run/sudo/ts is owned by uid X, should be Y
- The time stamp directory is owned by a user other than _t_i_m_e_s_t_a_m_p_o_w_n_e_r.
- This can occur when the value of _t_i_m_e_s_t_a_m_p_o_w_n_e_r has been changed.
- ssuuddooeerrss will ignore the time stamp directory until the owner is
- corrected.
-
- /var/run/sudo/ts is group writable
- The time stamp directory is group-writable; it should be writable only
- by _t_i_m_e_s_t_a_m_p_o_w_n_e_r. The default mode for the time stamp directory is
- 0700. ssuuddooeerrss will ignore the time stamp directory until the mode is
- corrected.
-
- NNootteess oonn llooggggiinngg vviiaa ssyysslloogg
- By default, ssuuddooeerrss logs messages via syslog(3). The _d_a_t_e, _h_o_s_t_n_a_m_e, and
- _p_r_o_g_n_a_m_e fields are added by the system's ssyysslloogg() function, not ssuuddooeerrss
- itself. As such, they may vary in format on different systems.
-
- The maximum size of syslog messages varies from system to system. The
- _s_y_s_l_o_g___m_a_x_l_e_n setting can be used to change the maximum syslog message
- size from the default value of 980 bytes. For more information, see the
- description of _s_y_s_l_o_g___m_a_x_l_e_n.
-
- NNootteess oonn llooggggiinngg ttoo aa ffiillee
- If the _l_o_g_f_i_l_e option is set, ssuuddooeerrss will log to a local file, such as
- _/_v_a_r_/_l_o_g_/_s_u_d_o. When logging to a file, ssuuddooeerrss uses a format similar to
- syslog(3), with a few important differences:
-
- 1. The _p_r_o_g_n_a_m_e and _h_o_s_t_n_a_m_e fields are not present.
-
- 2. If the _l_o_g___y_e_a_r option is enabled, the date will also include the
- year.
-
- 3. Lines that are longer than _l_o_g_l_i_n_e_l_e_n characters (80 by default) are
- word-wrapped and continued on the next line with a four character
- indent. This makes entries easier to read for a human being, but
- makes it more difficult to use grep(1) on the log files. If the
- _l_o_g_l_i_n_e_l_e_n option is set to 0 (or negated with a `!'), word wrap
- will be disabled.
-
-II//OO LLOOGG FFIILLEESS
- When I/O logging is enabled, ssuuddoo will run the command in a pseudo-tty
- and log all user input and/or output, depending on which options are
- enabled. I/O is logged to the directory specified by the _i_o_l_o_g___d_i_r
- option (_/_v_a_r_/_l_o_g_/_s_u_d_o_-_i_o by default) using a unique session ID that is
- included in the ssuuddoo log line, prefixed with "TSID=". The _i_o_l_o_g___f_i_l_e
- option may be used to control the format of the session ID.
-
- Each I/O log is stored in a separate directory that contains the
- following files:
-
- _l_o_g a text file containing the time the command was run, the name
- of the user who ran ssuuddoo, the name of the target user, the name
- of the target group (optional), the terminal that ssuuddoo was run
- from, the number of rows and columns of the terminal, the
- working directory the command was run from and the path name of
- the command itself (with arguments if present)
-
- _t_i_m_i_n_g a log of the amount of time between, and the number of bytes
- in, each I/O log entry (used for session playback)
-
- _t_t_y_i_n input from the user's tty (what the user types)
-
- _s_t_d_i_n input from a pipe or file
-
- _t_t_y_o_u_t output from the pseudo-tty (what the command writes to the
- screen)
-
- _s_t_d_o_u_t standard output to a pipe or redirected to a file
-
- _s_t_d_e_r_r standard error to a pipe or redirected to a file
-
- All files other than _l_o_g are compressed in gzip format unless the
- _c_o_m_p_r_e_s_s___i_o flag has been disabled. Due to buffering, it is not normally
- possible to display the I/O logs in real-time as the program is executing
- The I/O log data will not be complete until the program run by ssuuddoo has
- exited or has been terminated by a signal. The _i_o_l_o_g___f_l_u_s_h flag can be
- used to disable buffering, in which case I/O log data is written to disk
- as soon as it is available. The output portion of an I/O log file can be
- viewed with the sudoreplay(1m) utility, which can also be used to list or
- search the available logs.
-
- Note that user input may contain sensitive information such as passwords
- (even if they are not echoed to the screen), which will be stored in the
- log file unencrypted. In most cases, logging the command output via
- _l_o_g___o_u_t_p_u_t or LOG_OUTPUT is all that is required.
-
- Since each session's I/O logs are stored in a separate directory,
- traditional log rotation utilities cannot be used to limit the number of
- I/O logs. The simplest way to limit the number of I/O is by setting the
- _m_a_x_s_e_q option to the maximum number of logs you wish to store. Once the
- I/O log sequence number reaches _m_a_x_s_e_q, it will be reset to zero and
- ssuuddooeerrss will truncate and re-use any existing I/O logs.
-
-FFIILLEESS
- _/_e_t_c_/_s_u_d_o_._c_o_n_f Sudo front end configuration
-
- _/_e_t_c_/_s_u_d_o_e_r_s List of who can run what
-
- _/_e_t_c_/_g_r_o_u_p Local groups file
-
- _/_e_t_c_/_n_e_t_g_r_o_u_p List of network groups
-
- _/_v_a_r_/_l_o_g_/_s_u_d_o_-_i_o I/O log files
-
- _/_v_a_r_/_r_u_n_/_s_u_d_o_/_t_s Directory containing time stamps for the
- ssuuddooeerrss security policy
-
- _/_v_a_r_/_a_d_m_/_s_u_d_o_/_l_e_c_t_u_r_e_d Directory containing lecture status files for
- the ssuuddooeerrss security policy
-
- _/_e_t_c_/_e_n_v_i_r_o_n_m_e_n_t Initial environment for --ii mode on AIX and
- Linux systems
-
-EEXXAAMMPPLLEESS
- Below are example _s_u_d_o_e_r_s file entries. Admittedly, some of these are a
- bit contrived. First, we allow a few environment variables to pass and
- then define our _a_l_i_a_s_e_s:
-
- # Run X applications through sudo; HOME is used to find the
- # .Xauthority file. Note that other programs use HOME to find
- # configuration files and this may lead to privilege escalation!
- Defaults env_keep += "DISPLAY HOME"
-
- # User alias specification
- User_Alias FULLTIMERS = millert, mikef, dowdy
- User_Alias PARTTIMERS = bostley, jwfox, crawl
- User_Alias WEBMASTERS = will, wendy, wim
-
- # Runas alias specification
- Runas_Alias OP = root, operator
- Runas_Alias DB = oracle, sybase
- Runas_Alias ADMINGRP = adm, oper
-
- # Host alias specification
- Host_Alias SPARC = bigtime, eclipse, moet, anchor :\
- SGI = grolsch, dandelion, black :\
- ALPHA = widget, thalamus, foobar :\
- HPPA = boa, nag, python
- Host_Alias CUNETS = 128.138.0.0/255.255.0.0
- Host_Alias CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0
- Host_Alias SERVERS = master, mail, www, ns
- Host_Alias CDROM = orion, perseus, hercules
-
- # Cmnd alias specification
- Cmnd_Alias DUMPS = /usr/bin/mt, /usr/sbin/dump, /usr/sbin/rdump,\
- /usr/sbin/restore, /usr/sbin/rrestore,\
- sha224:0GomF8mNN3wlDt1HD9XldjJ3SNgpFdbjO1+NsQ== \
- /home/operator/bin/start_backups
- Cmnd_Alias KILL = /usr/bin/kill
- Cmnd_Alias PRINTING = /usr/sbin/lpc, /usr/bin/lprm
- Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown
- Cmnd_Alias HALT = /usr/sbin/halt
- Cmnd_Alias REBOOT = /usr/sbin/reboot
- Cmnd_Alias SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh,\
- /usr/local/bin/tcsh, /usr/bin/rsh,\
- /usr/local/bin/zsh
- Cmnd_Alias SU = /usr/bin/su
- Cmnd_Alias PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less
-
- Here we override some of the compiled in default values. We want ssuuddoo to
- log via syslog(3) using the _a_u_t_h facility in all cases. We don't want to
- subject the full time staff to the ssuuddoo lecture, user mmiilllleerrtt need not
- give a password, and we don't want to reset the LOGNAME or USER
- environment variables when running commands as root. Additionally, on
- the machines in the _S_E_R_V_E_R_S Host_Alias, we keep an additional local log
- file and make sure we log the year in each log line since the log entries
- will be kept around for several years. Lastly, we disable shell escapes
- for the commands in the PAGERS Cmnd_Alias (_/_u_s_r_/_b_i_n_/_m_o_r_e, _/_u_s_r_/_b_i_n_/_p_g and
- _/_u_s_r_/_b_i_n_/_l_e_s_s). Note that this will not effectively constrain users with
- ssuuddoo AALLLL privileges.
-
- # Override built-in defaults
- Defaults syslog=auth
- Defaults>root !set_logname
- Defaults:FULLTIMERS !lecture
- Defaults:millert !authenticate
- Defaults@SERVERS log_year, logfile=/var/log/sudo.log
- Defaults!PAGERS noexec
-
- The _U_s_e_r _s_p_e_c_i_f_i_c_a_t_i_o_n is the part that actually determines who may run
- what.
-
- root ALL = (ALL) ALL
- %wheel ALL = (ALL) ALL
-
- We let rroooott and any user in group wwhheeeell run any command on any host as
- any user.
-
- FULLTIMERS ALL = NOPASSWD: ALL
-
- Full time sysadmins (mmiilllleerrtt, mmiikkeeff, and ddoowwddyy) may run any command on
- any host without authenticating themselves.
-
- PARTTIMERS ALL = ALL
-
- Part time sysadmins bboossttlleeyy, jjwwffooxx, and ccrraawwll) may run any command on any
- host but they must authenticate themselves first (since the entry lacks
- the NOPASSWD tag).
-
- jack CSNETS = ALL
-
- The user jjaacckk may run any command on the machines in the _C_S_N_E_T_S alias
- (the networks 128.138.243.0, 128.138.204.0, and 128.138.242.0). Of those
- networks, only 128.138.204.0 has an explicit netmask (in CIDR notation)
- indicating it is a class C network. For the other networks in _C_S_N_E_T_S,
- the local machine's netmask will be used during matching.
-
- lisa CUNETS = ALL
-
- The user lliissaa may run any command on any host in the _C_U_N_E_T_S alias (the
- class B network 128.138.0.0).
-
- operator ALL = DUMPS, KILL, SHUTDOWN, HALT, REBOOT, PRINTING,\
- sudoedit /etc/printcap, /usr/oper/bin/
-
- The ooppeerraattoorr user may run commands limited to simple maintenance. Here,
- those are commands related to backups, killing processes, the printing
- system, shutting down the system, and any commands in the directory
- _/_u_s_r_/_o_p_e_r_/_b_i_n_/. Note that one command in the DUMPS Cmnd_Alias includes a
- sha224 digest, _/_h_o_m_e_/_o_p_e_r_a_t_o_r_/_b_i_n_/_s_t_a_r_t___b_a_c_k_u_p_s. This is because the
- directory containing the script is writable by the operator user. If the
- script is modified (resulting in a digest mismatch) it will no longer be
- possible to run it via ssuuddoo.
-
- joe ALL = /usr/bin/su operator
-
- The user jjooee may only su(1) to operator.
-
- pete HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd *root*
-
- %opers ALL = (: ADMINGRP) /usr/sbin/
-
- Users in the ooppeerrss group may run commands in _/_u_s_r_/_s_b_i_n_/ as themselves
- with any group in the _A_D_M_I_N_G_R_P Runas_Alias (the aaddmm and ooppeerr groups).
-
- The user ppeettee is allowed to change anyone's password except for root on
- the _H_P_P_A machines. Because command line arguments are matched as a
- single, concatenated string, the `*' wildcard will match _m_u_l_t_i_p_l_e words.
- This example assumes that passwd(1) does not take multiple user names on
- the command line. Note that on GNU systems, options to passwd(1) may be
- specified after the user argument. As a result, this rule will also
- allow:
-
- passwd username --expire
-
- which may not be desirable.
-
- bob SPARC = (OP) ALL : SGI = (OP) ALL
-
- The user bboobb may run anything on the _S_P_A_R_C and _S_G_I machines as any user
- listed in the _O_P Runas_Alias (rroooott and ooppeerraattoorr.)
-
- jim +biglab = ALL
-
- The user jjiimm may run any command on machines in the _b_i_g_l_a_b netgroup.
- ssuuddoo knows that "biglab" is a netgroup due to the `+' prefix.
-
- +secretaries ALL = PRINTING, /usr/bin/adduser, /usr/bin/rmuser
-
- Users in the sseeccrreettaarriieess netgroup need to help manage the printers as
- well as add and remove users, so they are allowed to run those commands
- on all machines.
-
- fred ALL = (DB) NOPASSWD: ALL
-
- The user ffrreedd can run commands as any user in the _D_B Runas_Alias (oorraaccllee
- or ssyybbaassee) without giving a password.
-
- john ALPHA = /usr/bin/su [!-]*, !/usr/bin/su *root*
-
- On the _A_L_P_H_A machines, user jjoohhnn may su to anyone except root but he is
- not allowed to specify any options to the su(1) command.
-
- jen ALL, !SERVERS = ALL
-
- The user jjeenn may run any command on any machine except for those in the
- _S_E_R_V_E_R_S Host_Alias (master, mail, www and ns).
-
- jill SERVERS = /usr/bin/, !SU, !SHELLS
-
- For any machine in the _S_E_R_V_E_R_S Host_Alias, jjiillll may run any commands in
- the directory _/_u_s_r_/_b_i_n_/ except for those commands belonging to the _S_U and
- _S_H_E_L_L_S Cmnd_Aliases. While not specifically mentioned in the rule, the
- commands in the _P_A_G_E_R_S Cmnd_Alias all reside in _/_u_s_r_/_b_i_n and have the
- _n_o_e_x_e_c option set.
-
- steve CSNETS = (operator) /usr/local/op_commands/
-
- The user sstteevvee may run any command in the directory
- /usr/local/op_commands/ but only as user operator.
-
- matt valkyrie = KILL
-
- On his personal workstation, valkyrie, mmaatttt needs to be able to kill hung
- processes.
-
- WEBMASTERS www = (www) ALL, (root) /usr/bin/su www
-
- On the host www, any user in the _W_E_B_M_A_S_T_E_R_S User_Alias (will, wendy, and
- wim), may run any command as user www (which owns the web pages) or
- simply su(1) to www.
-
- ALL CDROM = NOPASSWD: /sbin/umount /CDROM,\
- /sbin/mount -o nosuid\,nodev /dev/cd0a /CDROM
-
- Any user may mount or unmount a CD-ROM on the machines in the CDROM
- Host_Alias (orion, perseus, hercules) without entering a password. This
- is a bit tedious for users to type, so it is a prime candidate for
- encapsulating in a shell script.
-
-SSEECCUURRIITTYY NNOOTTEESS
- LLiimmiittaattiioonnss ooff tthhee ``!!'' ooppeerraattoorr
- It is generally not effective to "subtract" commands from AALLLL using the
- `!' operator. A user can trivially circumvent this by copying the
- desired command to a different name and then executing that. For
- example:
-
- bill ALL = ALL, !SU, !SHELLS
-
- Doesn't really prevent bbiillll from running the commands listed in _S_U or
- _S_H_E_L_L_S since he can simply copy those commands to a different name, or
- use a shell escape from an editor or other program. Therefore, these
- kind of restrictions should be considered advisory at best (and
- reinforced by policy).
-
- In general, if a user has sudo AALLLL there is nothing to prevent them from
- creating their own program that gives them a root shell (or making their
- own copy of a shell) regardless of any `!' elements in the user
- specification.
-
- SSeeccuurriittyy iimmpplliiccaattiioonnss ooff _f_a_s_t___g_l_o_b
- If the _f_a_s_t___g_l_o_b option is in use, it is not possible to reliably negate
- commands where the path name includes globbing (aka wildcard) characters.
- This is because the C library's fnmatch(3) function cannot resolve
- relative paths. While this is typically only an inconvenience for rules
- that grant privileges, it can result in a security issue for rules that
- subtract or revoke privileges.
-
- For example, given the following _s_u_d_o_e_r_s file entry:
-
- john ALL = /usr/bin/passwd [a-zA-Z0-9]*, /usr/bin/chsh [a-zA-Z0-9]*,\
- /usr/bin/chfn [a-zA-Z0-9]*, !/usr/bin/* root
-
- User jjoohhnn can still run /usr/bin/passwd root if _f_a_s_t___g_l_o_b is enabled by
- changing to _/_u_s_r_/_b_i_n and running ./passwd root instead.
-
- PPrreevveennttiinngg sshheellll eessccaappeess
- Once ssuuddoo executes a program, that program is free to do whatever it
- pleases, including run other programs. This can be a security issue
- since it is not uncommon for a program to allow shell escapes, which lets
- a user bypass ssuuddoo's access control and logging. Common programs that
- permit shell escapes include shells (obviously), editors, paginators,
- mail and terminal programs.
-
- There are two basic approaches to this problem:
-
- restrict Avoid giving users access to commands that allow the user to
- run arbitrary commands. Many editors have a restricted mode
- where shell escapes are disabled, though ssuuddooeeddiitt is a better
- solution to running editors via ssuuddoo. Due to the large number
- of programs that offer shell escapes, restricting users to the
- set of programs that do not is often unworkable.
-
- noexec Many systems that support shared libraries have the ability to
- override default library functions by pointing an environment
- variable (usually LD_PRELOAD) to an alternate shared library.
- On such systems, ssuuddoo's _n_o_e_x_e_c functionality can be used to
- prevent a program run by ssuuddoo from executing any other
- programs. Note, however, that this applies only to native
- dynamically-linked executables. Statically-linked executables
- and foreign executables running under binary emulation are not
- affected.
-
- The _n_o_e_x_e_c feature is known to work on SunOS, Solaris, *BSD,
- Linux, IRIX, Tru64 UNIX, macOS, HP-UX 11.x and AIX 5.3 and
- above. It should be supported on most operating systems that
- support the LD_PRELOAD environment variable. Check your
- operating system's manual pages for the dynamic linker (usually
- ld.so, ld.so.1, dyld, dld.sl, rld, or loader) to see if
- LD_PRELOAD is supported.
-
- On Solaris 10 and higher, _n_o_e_x_e_c uses Solaris privileges
- instead of the LD_PRELOAD environment variable.
-
- To enable _n_o_e_x_e_c for a command, use the NOEXEC tag as
- documented in the User Specification section above. Here is
- that example again:
-
- aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
-
- This allows user aaaarroonn to run _/_u_s_r_/_b_i_n_/_m_o_r_e and _/_u_s_r_/_b_i_n_/_v_i
- with _n_o_e_x_e_c enabled. This will prevent those two commands from
- executing other commands (such as a shell). If you are unsure
- whether or not your system is capable of supporting _n_o_e_x_e_c you
- can always just try it out and check whether shell escapes work
- when _n_o_e_x_e_c is enabled.
-
- Note that restricting shell escapes is not a panacea. Programs running
- as root are still capable of many potentially hazardous operations (such
- as changing or overwriting files) that could lead to unintended privilege
- escalation. In the specific case of an editor, a safer approach is to
- give the user permission to run ssuuddooeeddiitt (see below).
-
- SSeeccuurree eeddiittiinngg
- The ssuuddooeerrss plugin includes ssuuddooeeddiitt support which allows users to
- securely edit files with the editor of their choice. As ssuuddooeeddiitt is a
- built-in command, it must be specified in the _s_u_d_o_e_r_s file without a
- leading path. However, it may take command line arguments just as a
- normal command does. Wildcards used in _s_u_d_o_e_d_i_t command line arguments
- are expected to be path names, so a forward slash (`/') will not be
- matched by a wildcard.
-
- Unlike other ssuuddoo commands, the editor is run with the permissions of the
- invoking user and with the environment unmodified. More information may
- be found in the description of the --ee option in sudo(1m).
-
- For example, to allow user operator to edit the "message of the day"
- file:
-
- operator sudoedit /etc/motd
-
- The operator user then runs ssuuddooeeddiitt as follows:
-
- $ sudoedit /etc/motd
-
- The editor will run as the operator user, not root, on a temporary copy
- of _/_e_t_c_/_m_o_t_d. After the file has been edited, _/_e_t_c_/_m_o_t_d will be updated
- with the contents of the temporary copy.
-
- Users should _n_e_v_e_r be granted ssuuddooeeddiitt permission to edit a file that
- resides in a directory the user has write access to, either directly or
- via a wildcard. If the user has write access to the directory it is
- possible to replace the legitimate file with a link to another file,
- allowing the editing of arbitrary files. To prevent this, starting with
- version 1.8.16, symbolic links will not be followed in writable
- directories and ssuuddooeeddiitt will refuse to edit a file located in a writable
- directory unless the _s_u_d_o_e_d_i_t___c_h_e_c_k_d_i_r option has been disabled or the
- invoking user is root. Additionally, in version 1.8.15 and higher,
- ssuuddooeeddiitt will refuse to open a symbolic link unless either the
- _s_u_d_o_e_d_i_t___f_o_l_l_o_w option is enabled or the _s_u_d_o_e_d_i_t command is prefixed
- with the FOLLOW tag in the _s_u_d_o_e_r_s file.
-
- TTiimmee ssttaammpp ffiillee cchheecckkss
- ssuuddooeerrss will check the ownership of its time stamp directory
- (_/_v_a_r_/_r_u_n_/_s_u_d_o_/_t_s by default) and ignore the directory's contents if it
- is not owned by root or if it is writable by a user other than root.
- Older versions of ssuuddoo stored time stamp files in _/_t_m_p; this is no longer
- recommended as it may be possible for a user to create the time stamp
- themselves on systems that allow unprivileged users to change the
- ownership of files they create.
-
- While the time stamp directory _s_h_o_u_l_d be cleared at reboot time, not all
- systems contain a _/_r_u_n or _/_v_a_r_/_r_u_n directory. To avoid potential
- problems, ssuuddooeerrss will ignore time stamp files that date from before the
- machine booted on systems where the boot time is available.
-
- Some systems with graphical desktop environments allow unprivileged users
- to change the system clock. Since ssuuddooeerrss relies on the system clock for
- time stamp validation, it may be possible on such systems for a user to
- run ssuuddoo for longer than _t_i_m_e_s_t_a_m_p___t_i_m_e_o_u_t by setting the clock back. To
- combat this, ssuuddooeerrss uses a monotonic clock (which never moves backwards)
- for its time stamps if the system supports it.
-
- ssuuddooeerrss will not honor time stamps set far in the future. Time stamps
- with a date greater than current_time + 2 * TIMEOUT will be ignored and
- ssuuddooeerrss will log and complain.
-
- If the _t_i_m_e_s_t_a_m_p___t_y_p_e option is set to "tty", the time stamp record
- includes the device number of the terminal the user authenticated with.
- This provides per-terminal granularity but time stamp records may still
- outlive the user's session.
-
- Unless the _t_i_m_e_s_t_a_m_p___t_y_p_e option is set to "global", the time stamp
- record also includes the session ID of the process that last
- authenticated. This prevents processes in different terminal sessions
- from using the same time stamp record. On systems where a process's
- start time can be queried, the start time of the session leader is
- recorded in the time stamp record. If no terminal is present or the
- _t_i_m_e_s_t_a_m_p___t_y_p_e option is set to "ppid", the start time of the parent
- process is used instead. In most cases this will prevent a time stamp
- record from being re-used without the user entering a password when
- logging out and back in again.
-
-DDEEBBUUGGGGIINNGG
- Versions 1.8.4 and higher of the ssuuddooeerrss plugin support a flexible
- debugging framework that can help track down what the plugin is doing
- internally if there is a problem. This can be configured in the
- sudo.conf(4) file.
-
- The ssuuddooeerrss plugin uses the same debug flag format as the ssuuddoo front-end:
- _s_u_b_s_y_s_t_e_m@_p_r_i_o_r_i_t_y.
-
- The priorities used by ssuuddooeerrss, in order of decreasing severity, are:
- _c_r_i_t, _e_r_r, _w_a_r_n, _n_o_t_i_c_e, _d_i_a_g, _i_n_f_o, _t_r_a_c_e and _d_e_b_u_g. Each priority,
- when specified, also includes all priorities higher than it. For
- example, a priority of _n_o_t_i_c_e would include debug messages logged at
- _n_o_t_i_c_e and higher.
-
- The following subsystems are used by the ssuuddooeerrss plugin:
-
- _a_l_i_a_s User_Alias, Runas_Alias, Host_Alias and Cmnd_Alias processing
-
- _a_l_l matches every subsystem
-
- _a_u_d_i_t BSM and Linux audit code
-
- _a_u_t_h user authentication
-
- _d_e_f_a_u_l_t_s _s_u_d_o_e_r_s file _D_e_f_a_u_l_t_s settings
-
- _e_n_v environment handling
-
- _l_d_a_p LDAP-based sudoers
-
- _l_o_g_g_i_n_g logging support
-
- _m_a_t_c_h matching of users, groups, hosts and netgroups in the _s_u_d_o_e_r_s
- file
-
- _n_e_t_i_f network interface handling
-
- _n_s_s network service switch handling in ssuuddooeerrss
-
- _p_a_r_s_e_r _s_u_d_o_e_r_s file parsing
-
- _p_e_r_m_s permission setting
-
- _p_l_u_g_i_n The equivalent of _m_a_i_n for the plugin.
-
- _p_t_y pseudo-tty related code
-
- _r_b_t_r_e_e redblack tree internals
-
- _s_s_s_d SSSD-based sudoers
-
- _u_t_i_l utility functions
- For example:
-
- Debug sudo /var/log/sudo_debug match@info,nss@info
-
- For more information, see the sudo.conf(4) manual.
-
-SSEEEE AALLSSOO
- ssh(1), su(1), fnmatch(3), glob(3), mktemp(3), strftime(3), sudo.conf(4),
- sudo_plugin(4), sudoers.ldap(4), sudoers_timestamp(4), sudo(1m), visudo(1m)
-
-AAUUTTHHOORRSS
- Many people have worked on ssuuddoo over the years; this version consists of
- code written primarily by:
-
- Todd C. Miller
-
- See the CONTRIBUTORS file in the ssuuddoo distribution
- (https://www.sudo.ws/contributors.html) for an exhaustive list of people
- who have contributed to ssuuddoo.
-
-CCAAVVEEAATTSS
- The _s_u_d_o_e_r_s file should aallwwaayyss be edited by the vviissuuddoo command which
- locks the file and does grammatical checking. It is imperative that the
- _s_u_d_o_e_r_s file be free of syntax errors since ssuuddoo will not run with a
- syntactically incorrect _s_u_d_o_e_r_s file.
-
- When using netgroups of machines (as opposed to users), if you store
- fully qualified host name in the netgroup (as is usually the case), you
- either need to have the machine's host name be fully qualified as
- returned by the hostname command or use the _f_q_d_n option in _s_u_d_o_e_r_s.
-
-BBUUGGSS
- If you feel you have found a bug in ssuuddoo, please submit a bug report at
- https://bugzilla.sudo.ws/
-
-SSUUPPPPOORRTT
- Limited free support is available via the sudo-users mailing list, see
- https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search
- the archives.
-
-DDIISSCCLLAAIIMMEERR
- ssuuddoo is provided "AS IS" and any express or implied warranties,
- including, but not limited to, the implied warranties of merchantability
- and fitness for a particular purpose are disclaimed. See the LICENSE
- file distributed with ssuuddoo or https://www.sudo.ws/license.html for
- complete details.
-
-Sudo 1.8.26 December 20, 2018 Sudo 1.8.26
diff --git a/doc/sudoers.ldap.cat b/doc/sudoers.ldap.cat
deleted file mode 100644
index 0d48b9a..0000000
--- a/doc/sudoers.ldap.cat
+++ /dev/null
@@ -1,1033 +0,0 @@
-SUDOERS.LDAP(4) File Formats Manual SUDOERS.LDAP(4)
-
-NNAAMMEE
- ssuuddooeerrss..llddaapp - sudo LDAP configuration
-
-DDEESSCCRRIIPPTTIIOONN
- In addition to the standard _s_u_d_o_e_r_s file, ssuuddoo may be configured via
- LDAP. This can be especially useful for synchronizing _s_u_d_o_e_r_s in a
- large, distributed environment.
-
- Using LDAP for _s_u_d_o_e_r_s has several benefits:
-
- ++oo ssuuddoo no longer needs to read _s_u_d_o_e_r_s in its entirety. When LDAP is
- used, there are only two or three LDAP queries per invocation. This
- makes it especially fast and particularly usable in LDAP environments.
-
- ++oo ssuuddoo no longer exits if there is a typo in _s_u_d_o_e_r_s. It is not
- possible to load LDAP data into the server that does not conform to
- the sudoers schema, so proper syntax is guaranteed. It is still
- possible to have typos in a user or host name, but this will not
- prevent ssuuddoo from running.
-
- ++oo It is possible to specify per-entry options that override the global
- default options. _/_e_t_c_/_s_u_d_o_e_r_s only supports default options and
- limited options associated with user/host/commands/aliases. The
- syntax is complicated and can be difficult for users to understand.
- Placing the options directly in the entry is more natural.
-
- ++oo The vviissuuddoo program is no longer needed. vviissuuddoo provides locking and
- syntax checking of the _/_e_t_c_/_s_u_d_o_e_r_s file. Since LDAP updates are
- atomic, locking is no longer necessary. Because syntax is checked
- when the data is inserted into LDAP, there is no need for a
- specialized tool to check syntax.
-
- SSUUDDOOeerrss LLDDAAPP ccoonnttaaiinneerr
- The _s_u_d_o_e_r_s configuration is contained in the ou=SUDOers LDAP container.
-
- Sudo first looks for the cn=defaults entry in the SUDOers container. If
- found, the multi-valued sudoOption attribute is parsed in the same manner
- as a global Defaults line in _/_e_t_c_/_s_u_d_o_e_r_s. In the following example, the
- SSH_AUTH_SOCK variable will be preserved in the environment for all
- users.
-
- dn: cn=defaults,ou=SUDOers,dc=my-domain,dc=com
- objectClass: top
- objectClass: sudoRole
- cn: defaults
- description: Default sudoOption's go here
- sudoOption: env_keep+=SSH_AUTH_SOCK
-
- The equivalent of a sudoer in LDAP is a sudoRole. It consists of the
- following attributes:
-
- ssuuddooUUsseerr
- A user name, user ID (prefixed with `#'), Unix group name or ID
- (prefixed with `%' or `%#' respectively), user netgroup (prefixed
- with `+'), or non-Unix group name or ID (prefixed with `%:' or
- `%:#' respectively). User netgroups are matched using the user and
- domain members only; the host member is not used when matching.
- Non-Unix group support is only available when an appropriate
- _g_r_o_u_p___p_l_u_g_i_n is defined in the global _d_e_f_a_u_l_t_s sudoRole object.
-
- ssuuddooHHoosstt
- A host name, IP address, IP network, or host netgroup (prefixed
- with a `+'). The special value ALL will match any host. Host
- netgroups are matched using the host (both qualified and
- unqualified) and domain members only; the user member is not used
- when matching. If a sudoHost entry is preceded by an exclamation
- point, `!', and the entry matches, the sudoRole in which it resides
- will be ignored. Negated sudoHost entries are only supported by
- version 1.8.18 or higher.
-
- ssuuddooCCoommmmaanndd
- A fully-qualified Unix command name with optional command line
- arguments, potentially including globbing characters (aka wild
- cards). If a command name is preceded by an exclamation point,
- `!', the user will be prohibited from running that command.
-
- The built-in command "sudoedit" is used to permit a user to run
- ssuuddoo with the --ee option (or as ssuuddooeeddiitt). It may take command line
- arguments just as a normal command does. Note that "sudoedit" is a
- command built into ssuuddoo itself and must be specified in without a
- leading path.
-
- The special value ALL will match any command.
-
- If a command name is prefixed with a SHA-2 digest, it will only be
- allowed if the digest matches. This may be useful in situations
- where the user invoking ssuuddoo has write access to the command or its
- parent directory. The following digest formats are supported:
- sha224, sha256, sha384 and sha512. The digest name must be
- followed by a colon (`:') and then the actual digest, in either hex
- or base64 format. For example, given the following value for
- sudoCommand:
-
- sha224:0GomF8mNN3wlDt1HD9XldjJ3SNgpFdbjO1+NsQ /bin/ls
-
- The user may only run _/_b_i_n_/_l_s if its sha224 digest matches the
- specified value. Command digests are only supported by version
- 1.8.7 or higher.
-
- ssuuddooOOppttiioonn
- Identical in function to the global options described above, but
- specific to the sudoRole in which it resides.
-
- ssuuddooRRuunnAAssUUsseerr
- A user name or uid (prefixed with `#') that commands may be run as
- or a Unix group (prefixed with a `%') or user netgroup (prefixed
- with a `+') that contains a list of users that commands may be run
- as. The special value ALL will match any user. If a sudoRunAsUser
- entry is preceded by an exclamation point, `!', and the entry
- matches, the sudoRole in which it resides will be ignored. If
- sudoRunAsUser is specified but empty, it will match the invoking
- user. If neither sudoRunAsUser nor sudoRunAsGroup are present, the
- value of the _r_u_n_a_s___d_e_f_a_u_l_t sudoOption is used (defaults to root).
-
- The sudoRunAsUser attribute is only available in ssuuddoo versions
- 1.7.0 and higher. Older versions of ssuuddoo use the sudoRunAs
- attribute instead. Negated sudoRunAsUser entries are only
- supported by version 1.8.26 or higher.
-
- ssuuddooRRuunnAAssGGrroouupp
- A Unix group or gid (prefixed with `#') that commands may be run
- as. The special value ALL will match any group. If a
- sudoRunAsGroup entry is preceded by an exclamation point, `!', and
- the entry matches, the sudoRole in which it resides will be
- ignored.
-
- The sudoRunAsGroup attribute is only available in ssuuddoo versions
- 1.7.0 and higher. Negated sudoRunAsGroup entries are only
- supported by version 1.8.26 or higher.
-
- ssuuddooNNoottBBeeffoorree
- A timestamp in the form yyyymmddHHMMSSZ that can be used to provide
- a start date/time for when the sudoRole will be valid. If multiple
- sudoNotBefore entries are present, the earliest is used. Note that
- timestamps must be in Coordinated Universal Time (UTC), not the
- local timezone. The minute and seconds portions are optional, but
- some LDAP servers require that they be present (contrary to the
- RFC).
-
- The sudoNotBefore attribute is only available in ssuuddoo versions
- 1.7.5 and higher and must be explicitly enabled via the
- SSUUDDOOEERRSS__TTIIMMEEDD option in _/_e_t_c_/_l_d_a_p_._c_o_n_f.
-
- ssuuddooNNoottAAfftteerr
- A timestamp in the form yyyymmddHHMMSSZ that indicates an
- expiration date/time, after which the sudoRole will no longer be
- valid. If multiple sudoNotAfter entries are present, the last one
- is used. Note that timestamps must be in Coordinated Universal
- Time (UTC), not the local timezone. The minute and seconds
- portions are optional, but some LDAP servers require that they be
- present (contrary to the RFC).
-
- The sudoNotAfter attribute is only available in ssuuddoo versions 1.7.5
- and higher and must be explicitly enabled via the SSUUDDOOEERRSS__TTIIMMEEDD
- option in _/_e_t_c_/_l_d_a_p_._c_o_n_f.
-
- ssuuddooOOrrddeerr
- The sudoRole entries retrieved from the LDAP directory have no
- inherent order. The sudoOrder attribute is an integer (or floating
- point value for LDAP servers that support it) that is used to sort
- the matching entries. This allows LDAP-based sudoers entries to
- more closely mimic the behavior of the sudoers file, where the
- order of the entries influences the result. If multiple entries
- match, the entry with the highest sudoOrder attribute is chosen.
- This corresponds to the "last match" behavior of the sudoers file.
- If the sudoOrder attribute is not present, a value of 0 is assumed.
-
- The sudoOrder attribute is only available in ssuuddoo versions 1.7.5
- and higher.
-
- Each attribute listed above should contain a single value, but there may
- be multiple instances of each attribute type. A sudoRole must contain at
- least one sudoUser, sudoHost and sudoCommand.
-
- The following example allows users in group wheel to run any command on
- any host via ssuuddoo:
-
- dn: cn=%wheel,ou=SUDOers,dc=my-domain,dc=com
- objectClass: top
- objectClass: sudoRole
- cn: %wheel
- sudoUser: %wheel
- sudoHost: ALL
- sudoCommand: ALL
-
- AAnnaattoommyy ooff LLDDAAPP ssuuddooeerrss llooookkuupp
- When looking up a sudoer using LDAP there are only two or three LDAP
- queries per invocation. The first query is to parse the global options.
- The second is to match against the user's name and the groups that the
- user belongs to. (The special ALL tag is matched in this query too.) If
- no match is returned for the user's name and groups, a third query
- returns all entries containing user netgroups and other non-Unix groups
- and checks to see if the user belongs to any of them.
-
- If timed entries are enabled with the SSUUDDOOEERRSS__TTIIMMEEDD configuration
- directive, the LDAP queries include a sub-filter that limits retrieval to
- entries that satisfy the time constraints, if any.
-
- If the NNEETTGGRROOUUPP__BBAASSEE configuration directive is present (see _C_o_n_f_i_g_u_r_i_n_g
- _l_d_a_p_._c_o_n_f below), queries are performed to determine the list of
- netgroups the user belongs to before the sudoers query. This makes it
- possible to include netgroups in the sudoers query string in the same
- manner as Unix groups. The third query mentioned above is not performed
- unless a group provider plugin is also configured. The actual LDAP
- queries performed by ssuuddoo are as follows:
-
- 1. Match all nisNetgroup records with a nisNetgroupTriple containing
- the user, host and NIS domain. The query will match
- nisNetgroupTriple entries with either the short or long form of the
- host name or no host name specified in the tuple. If the NIS domain
- is set, the query will match only match entries that include the
- domain or for which there is no domain present. If the NIS domain
- is _n_o_t set, a wildcard is used to match any domain name but be aware
- that the NIS schema used by some LDAP servers may not support wild
- cards for nisNetgroupTriple.
-
- 2. Repeated queries are performed to find any nested nisNetgroup
- records with a memberNisNetgroup entry that refers to an already-
- matched record.
-
- For sites with a large number of netgroups, using NNEETTGGRROOUUPP__BBAASSEE can
- significantly speed up ssuuddoo's execution time.
-
- DDiiffffeerreenncceess bbeettwweeeenn LLDDAAPP aanndd nnoonn--LLDDAAPP ssuuddooeerrss
- One of the major differences between LDAP and file-based _s_u_d_o_e_r_s is that
- in LDAP, ssuuddoo-specific Aliases are not supported.
-
- For the most part, there is little need for ssuuddoo-specific Aliases. Unix
- groups, non-Unix groups (via the _g_r_o_u_p___p_l_u_g_i_n) or user netgroups can be
- used in place of User_Aliases and Runas_Aliases. Host netgroups can be
- used in place of Host_Aliases. Since groups and netgroups can also be
- stored in LDAP there is no real need for ssuuddoo-specific aliases.
-
- There are also some subtle differences in the way sudoers is handled once
- in LDAP. Probably the biggest is that according to the RFC, LDAP
- ordering is arbitrary and you cannot expect that Attributes and Entries
- are returned in any specific order.
-
- The order in which different entries are applied can be controlled using
- the sudoOrder attribute, but there is no way to guarantee the order of
- attributes within a specific entry. If there are conflicting command
- rules in an entry, the negative takes precedence. This is called
- paranoid behavior (not necessarily the most specific match).
-
- Here is an example:
-
- # /etc/sudoers:
- # Allow all commands except shell
- johnny ALL=(root) ALL,!/bin/sh
- # Always allows all commands because ALL is matched last
- puddles ALL=(root) !/bin/sh,ALL
-
- # LDAP equivalent of johnny
- # Allows all commands except shell
- dn: cn=role1,ou=Sudoers,dc=my-domain,dc=com
- objectClass: sudoRole
- objectClass: top
- cn: role1
- sudoUser: johnny
- sudoHost: ALL
- sudoCommand: ALL
- sudoCommand: !/bin/sh
-
- # LDAP equivalent of puddles
- # Notice that even though ALL comes last, it still behaves like
- # role1 since the LDAP code assumes the more paranoid configuration
- dn: cn=role2,ou=Sudoers,dc=my-domain,dc=com
- objectClass: sudoRole
- objectClass: top
- cn: role2
- sudoUser: puddles
- sudoHost: ALL
- sudoCommand: !/bin/sh
- sudoCommand: ALL
-
- Another difference is that it is not possible to use negation in a
- sudoUser, sudoRunAsUser or sudoRunAsGroup attribute. For example, the
- following attributes do not behave the way one might expect.
-
- # does not match all but joe
- # rather, does not match anyone
- sudoUser: !joe
-
- # does not match all but joe
- # rather, matches everyone including Joe
- sudoUser: ALL
- sudoUser: !joe
-
- CCoonnvveerrttiinngg bbeettwweeeenn ffiillee--bbaasseedd aanndd LLDDAAPP ssuuddooeerrss
- The cvtsudoers(1) utility can be used to convert between file-based and
- LDAP _s_u_d_o_e_r_s. However, there are features in the file-based sudoers that
- have no equivalent in LDAP-based sudoers (and vice versa). These cannot
- be converted automatically.
-
- For example, a Cmnd_Alias in a _s_u_d_o_e_r_s file may be converted to a
- sudoRole that contains multiple commands. Multiple users and/or groups
- may be assigned to the sudoRole.
-
- Also, host, user, runas and command-based Defaults entries are not
- supported. However, a sudoRole may contain one or more sudoOption
- attributes which can often serve the same purpose.
-
- Consider the following _s_u_d_o_e_r_s lines:
-
- Cmnd_Alias PAGERS = /usr/bin/more, /usr/bin/pg, /usr/bin/less
- Defaults!PAGERS noexec
- alice, bob ALL = ALL
-
- In this example, alice and bob are allowed to run all commands, but the
- commands listed in PAGERS will have the noexec flag set, preventing shell
- escapes.
-
- When converting this to LDAP, two sudoRole objects can be used:
-
- dn: cn=PAGERS,ou=SUDOers,dc=my-domain,dc=com
- objectClass: top
- objectClass: sudoRole
- cn: PAGERS
- sudoUser: alice
- sudoUser: bob
- sudoHost: ALL
- sudoCommand: /usr/bin/more
- sudoCommand: /usr/bin/pg
- sudoCommand: /usr/bin/less
- sudoOption: noexec
- sudoOrder: 900
-
- dn: cn=ADMINS,ou=SUDOers,dc=my-domain,dc=com
- objectClass: top
- objectClass: sudoRole
- cn: ADMINS
- sudoUser: alice
- sudoUser: bob
- sudoHost: ALL
- sudoCommand: ALL
- sudoOrder: 100
-
- In the LDAP version, the sudoOrder attribute is used to guarantee that
- the PAGERS sudoRole with _n_o_e_x_e_c has precedence. Unlike the _s_u_d_o_e_r_s
- version, the LDAP version requires that all users for whom the
- restriction should apply be assigned to the PAGERS sudoRole. Using a
- Unix group or netgroup in PAGERS rather than listing each user would make
- this easier to maintain.
-
- Per-user Defaults entries can be emulated by using one or more sudoOption
- attributes in a sudoRole. Consider the following _s_u_d_o_e_r_s lines:
-
- User_Alias ADMINS = john, sally
- Defaults:ADMINS !authenticate
- ADMINS ALL = (ALL:ALL) ALL
-
- In this example, john and sally are allowed to run any command as any
- user or group.
-
- When converting this to LDAP, we can use a Unix group instead of the
- User_Alias.
-
- dn: cn=admins,ou=SUDOers,dc=my-domain,dc=com
- objectClass: top
- objectClass: sudoRole
- cn: admins
- sudoUser: %admin
- sudoHost: ALL
- sudoRunAsUser: ALL
- sudoRunAsGroup: ALL
- sudoCommand: ALL
- sudoOption: !authenticate
-
- This assumes that users john and sally are members of the "admins" Unix
- group.
-
- SSuuddooeerrss sscchheemmaa
- In order to use ssuuddoo's LDAP support, the ssuuddoo schema must be installed on
- your LDAP server. In addition, be sure to index the sudoUser attribute.
-
- The ssuuddoo distribution includes versions of the ssuuddooeerrss schema for
- multiple LDAP servers:
-
- _s_c_h_e_m_a_._O_p_e_n_L_D_A_P
- OpenLDAP slapd and OpenBSD ldapd
-
- _s_c_h_e_m_a_._o_l_c_S_u_d_o
- OpenLDAP slapd 2.3 and higher when on-line configuration is enabled
-
- _s_c_h_e_m_a_._i_P_l_a_n_e_t
- Netscape-derived servers such as the iPlanet, Oracle, and 389
- Directory Servers
-
- _s_c_h_e_m_a_._A_c_t_i_v_e_D_i_r_e_c_t_o_r_y
- Microsoft Active Directory
-
- The schema in OpenLDAP format is also included in the _E_X_A_M_P_L_E_S section.
-
- CCoonnffiigguurriinngg llddaapp..ccoonnff
- Sudo reads the _/_e_t_c_/_l_d_a_p_._c_o_n_f file for LDAP-specific configuration.
- Typically, this file is shared between different LDAP-aware clients. As
- such, most of the settings are not ssuuddoo-specific. Note that ssuuddoo parses
- _/_e_t_c_/_l_d_a_p_._c_o_n_f itself and may support options that differ from those
- described in the system's ldap.conf(4) manual. The path to _l_d_a_p_._c_o_n_f may
- be overridden via the _l_d_a_p___c_o_n_f plugin argument in sudo.conf(4).
-
- Also note that on systems using the OpenLDAP libraries, default values
- specified in _/_e_t_c_/_o_p_e_n_l_d_a_p_/_l_d_a_p_._c_o_n_f or the user's _._l_d_a_p_r_c files are not
- used.
-
- Only those options explicitly listed in _/_e_t_c_/_l_d_a_p_._c_o_n_f as being supported
- by ssuuddoo are honored. Configuration options are listed below in upper
- case but are parsed in a case-independent manner.
-
- Lines beginning with a pound sign (`#') are ignored. Leading white space
- is removed from the beginning of lines.
-
- BBIINNDD__TTIIMMEELLIIMMIITT _s_e_c_o_n_d_s
- The BBIINNDD__TTIIMMEELLIIMMIITT parameter specifies the amount of time, in
- seconds, to wait while trying to connect to an LDAP server. If
- multiple UURRIIs or HHOOSSTTs are specified, this is the amount of time to
- wait before trying the next one in the list.
-
- BBIINNDDDDNN _D_N
- The BBIINNDDDDNN parameter specifies the identity, in the form of a
- Distinguished Name (DN), to use when performing LDAP operations.
- If not specified, LDAP operations are performed with an anonymous
- identity. By default, most LDAP servers will allow anonymous
- access.
-
- BBIINNDDPPWW _s_e_c_r_e_t
- The BBIINNDDPPWW parameter specifies the password to use when performing
- LDAP operations. This is typically used in conjunction with the
- BBIINNDDDDNN parameter. The _s_e_c_r_e_t may be a plain text password or a
- base64-encoded string with a "base64:" prefix. For example:
-
- BINDPW base64:dGVzdA==
-
- If a plain text password is used, it should be a simple string
- without quotes. Plain text passwords may not include the comment
- character (`#') and the escaping of special characters with a
- backslash (`\') is not supported.
-
- DDEERREEFF _n_e_v_e_r_/_s_e_a_r_c_h_i_n_g_/_f_i_n_d_i_n_g_/_a_l_w_a_y_s
- How alias dereferencing is to be performed when searching. See the
- ldap.conf(4) manual for a full description of this option.
-
- HHOOSSTT _n_a_m_e_[_:_p_o_r_t_] _._._.
- If no UURRII is specified (see below), the HHOOSSTT parameter specifies a
- white space-delimited list of LDAP servers to connect to. Each
- host may include an optional _p_o_r_t separated by a colon (`:'). The
- HHOOSSTT parameter is deprecated in favor of the UURRII specification and
- is included for backwards compatibility only.
-
- KKRRBB55__CCCCNNAAMMEE _f_i_l_e _n_a_m_e
- The path to the Kerberos 5 credential cache to use when
- authenticating with the remote server. This option is only
- relevant when using SASL authentication (see below).
-
- LLDDAAPP__VVEERRSSIIOONN _n_u_m_b_e_r
- The version of the LDAP protocol to use when connecting to the
- server. The default value is protocol version 3.
-
- NNEETTGGRROOUUPP__BBAASSEE _b_a_s_e
- The base DN to use when performing LDAP netgroup queries.
- Typically this is of the form ou=netgroup,dc=my-domain,dc=com for
- the domain my-domain.com. Multiple NNEETTGGRROOUUPP__BBAASSEE lines may be
- specified, in which case they are queried in the order specified.
-
- This option can be used to query a user's netgroups directly via
- LDAP which is usually faster than fetching every sudoRole object
- containing a sudoUser that begins with a `+' prefix. The NIS
- schema used by some LDAP servers need a modification to support
- querying the nisNetgroup object by its nisNetgroupTriple member.
- OpenLDAP's ssllaappdd requires the following change to the
- nisNetgroupTriple attribute:
-
- attributetype ( 1.3.6.1.1.1.1.14 NAME 'nisNetgroupTriple'
- DESC 'Netgroup triple'
- EQUALITY caseIgnoreIA5Match
- SUBSTR caseIgnoreIA5SubstringsMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
- NNEETTGGRROOUUPP__SSEEAARRCCHH__FFIILLTTEERR _l_d_a_p___f_i_l_t_e_r
- An LDAP filter which is used to restrict the set of records
- returned when performing an LDAP netgroup query. Typically, this
- is of the form attribute=value or
- (&(attribute=value)(attribute2=value2)). The default search filter
- is: objectClass=nisNetgroup. If _l_d_a_p___f_i_l_t_e_r is omitted, no search
- filter will be used. This option is only when querying netgroups
- directly via LDAP.
-
- NNEETTWWOORRKK__TTIIMMEEOOUUTT _s_e_c_o_n_d_s
- An alias for BBIINNDD__TTIIMMEELLIIMMIITT provided for OpenLDAP compatibility.
-
- PPOORRTT _p_o_r_t___n_u_m_b_e_r
- If no UURRII is specified, the PPOORRTT parameter specifies the default
- port to connect to on the LDAP server if a HHOOSSTT parameter does not
- specify the port itself. If no PPOORRTT parameter is used, the default
- is port 389 for LDAP and port 636 for LDAP over TLS (SSL). The
- PPOORRTT parameter is deprecated in favor of the UURRII specification and
- is included for backwards compatibility only.
-
- RROOOOTTBBIINNDDDDNN _D_N
- The RROOOOTTBBIINNDDDDNN parameter specifies the identity, in the form of a
- Distinguished Name (DN), to use when performing privileged LDAP
- operations, such as _s_u_d_o_e_r_s queries. The password corresponding to
- the identity should be stored in the or the path specified by the
- _l_d_a_p___s_e_c_r_e_t plugin argument in sudo.conf(4), which defaults to
- _/_e_t_c_/_l_d_a_p_._s_e_c_r_e_t. If no RROOOOTTBBIINNDDDDNN is specified, the BBIINNDDDDNN
- identity is used (if any).
-
- RROOOOTTUUSSEE__SSAASSLL _o_n_/_t_r_u_e_/_y_e_s_/_o_f_f_/_f_a_l_s_e_/_n_o
- Enable RROOOOTTUUSSEE__SSAASSLL to enable SASL authentication when connecting
- to an LDAP server from a privileged process, such as ssuuddoo.
-
- SSAASSLL__AAUUTTHH__IIDD _i_d_e_n_t_i_t_y
- The SASL user name to use when connecting to the LDAP server. By
- default, ssuuddoo will use an anonymous connection. This option is
- only relevant when using SASL authentication.
-
- SSAASSLL__MMEECCHH _m_e_c_h_a_n_i_s_m_s
- A white space-delimited list of SASL authentication mechanisms to
- use. By default, ssuuddoo will use GSSAPI authentication.
-
- SSAASSLL__SSEECCPPRROOPPSS _n_o_n_e_/_p_r_o_p_e_r_t_i_e_s
- SASL security properties or _n_o_n_e for no properties. See the SASL
- programmer's manual for details. This option is only relevant when
- using SASL authentication.
-
- SSSSLL _o_n_/_t_r_u_e_/_y_e_s_/_o_f_f_/_f_a_l_s_e_/_n_o
- If the SSSSLL parameter is set to on, true or yes, TLS (SSL)
- encryption is always used when communicating with the LDAP server.
- Typically, this involves connecting to the server on port 636
- (ldaps).
-
- SSSSLL _s_t_a_r_t___t_l_s
- If the SSSSLL parameter is set to start_tls, the LDAP server
- connection is initiated normally and TLS encryption is begun before
- the bind credentials are sent. This has the advantage of not
- requiring a dedicated port for encrypted communications. This
- parameter is only supported by LDAP servers that honor the
- _s_t_a_r_t___t_l_s extension, such as the OpenLDAP and Tivoli Directory
- servers.
-
- SSUUDDOOEERRSS__BBAASSEE _b_a_s_e
- The base DN to use when performing ssuuddoo LDAP queries. Typically
- this is of the form ou=SUDOers,dc=my-domain,dc=com for the domain
- my-domain.com. Multiple SSUUDDOOEERRSS__BBAASSEE lines may be specified, in
- which case they are queried in the order specified.
-
- SSUUDDOOEERRSS__DDEEBBUUGG _d_e_b_u_g___l_e_v_e_l
- This sets the debug level for ssuuddoo LDAP queries. Debugging
- information is printed to the standard error. A value of 1 results
- in a moderate amount of debugging information. A value of 2 shows
- the results of the matches themselves. This parameter should not
- be set in a production environment as the extra information is
- likely to confuse users.
-
- The SSUUDDOOEERRSS__DDEEBBUUGG parameter is deprecated and will be removed in a
- future release. The same information is now logged via the ssuuddoo
- debugging framework using the "ldap" subsystem at priorities _d_i_a_g
- and _i_n_f_o for _d_e_b_u_g___l_e_v_e_l values 1 and 2 respectively. See the
- sudo.conf(4) manual for details on how to configure ssuuddoo debugging.
-
- SSUUDDOOEERRSS__SSEEAARRCCHH__FFIILLTTEERR _l_d_a_p___f_i_l_t_e_r
- An LDAP filter which is used to restrict the set of records
- returned when performing a ssuuddoo LDAP query. Typically, this is of
- the form attribute=value or
- (&(attribute=value)(attribute2=value2)). The default search filter
- is: objectClass=sudoRole. If _l_d_a_p___f_i_l_t_e_r is omitted, no search
- filter will be used.
-
- SSUUDDOOEERRSS__TTIIMMEEDD _o_n_/_t_r_u_e_/_y_e_s_/_o_f_f_/_f_a_l_s_e_/_n_o
- Whether or not to evaluate the sudoNotBefore and sudoNotAfter
- attributes that implement time-dependent sudoers entries.
-
- TTIIMMEELLIIMMIITT _s_e_c_o_n_d_s
- The TTIIMMEELLIIMMIITT parameter specifies the amount of time, in seconds,
- to wait for a response to an LDAP query.
-
- TTIIMMEEOOUUTT _s_e_c_o_n_d_s
- The TTIIMMEEOOUUTT parameter specifies the amount of time, in seconds, to
- wait for a response from the various LDAP APIs.
-
- TTLLSS__CCAACCEERRTT _f_i_l_e _n_a_m_e
- An alias for TTLLSS__CCAACCEERRTTFFIILLEE for OpenLDAP compatibility.
-
- TTLLSS__CCAACCEERRTTFFIILLEE _f_i_l_e _n_a_m_e
- The path to a certificate authority bundle which contains the
- certificates for all the Certificate Authorities the client knows
- to be valid, e.g., _/_e_t_c_/_s_s_l_/_c_a_-_b_u_n_d_l_e_._p_e_m. This option is only
- supported by the OpenLDAP libraries. Netscape-derived LDAP
- libraries use the same certificate database for CA and client
- certificates (see TTLLSS__CCEERRTT).
-
- TTLLSS__CCAACCEERRTTDDIIRR _d_i_r_e_c_t_o_r_y
- Similar to TTLLSS__CCAACCEERRTTFFIILLEE but instead of a file, it is a directory
- containing individual Certificate Authority certificates, e.g.,
- _/_e_t_c_/_s_s_l_/_c_e_r_t_s. The directory specified by TTLLSS__CCAACCEERRTTDDIIRR is
- checked after TTLLSS__CCAACCEERRTTFFIILLEE. This option is only supported by the
- OpenLDAP libraries.
-
- TTLLSS__CCEERRTT _f_i_l_e _n_a_m_e
- The path to a file containing the client certificate which can be
- used to authenticate the client to the LDAP server. The
- certificate type depends on the LDAP libraries used.
-
- OpenLDAP:
- tls_cert /etc/ssl/client_cert.pem
-
- Netscape-derived:
- tls_cert /var/ldap/cert7.db
-
- Tivoli Directory Server:
- Unused, the key database specified by TTLLSS__KKEEYY contains both
- keys and certificates.
-
- When using Netscape-derived libraries, this file may also
- contain Certificate Authority certificates.
-
- TTLLSS__CCHHEECCKKPPEEEERR _o_n_/_t_r_u_e_/_y_e_s_/_o_f_f_/_f_a_l_s_e_/_n_o
- If enabled, TTLLSS__CCHHEECCKKPPEEEERR will cause the LDAP server's TLS
- certificated to be verified. If the server's TLS certificate
- cannot be verified (usually because it is signed by an unknown
- certificate authority), ssuuddoo will be unable to connect to it. If
- TTLLSS__CCHHEECCKKPPEEEERR is disabled, no check is made. Note that disabling
- the check creates an opportunity for man-in-the-middle attacks
- since the server's identity will not be authenticated. If
- possible, the CA's certificate should be installed locally so it
- can be verified. This option is not supported by the Tivoli
- Directory Server LDAP libraries.
-
- TTLLSS__KKEEYY _f_i_l_e _n_a_m_e
- The path to a file containing the private key which matches the
- certificate specified by TTLLSS__CCEERRTT. The private key must not be
- password-protected. The key type depends on the LDAP libraries
- used.
-
- OpenLDAP:
- tls_key /etc/ssl/client_key.pem
-
- Netscape-derived:
- tls_key /var/ldap/key3.db
-
- Tivoli Directory Server:
- tls_key /usr/ldap/ldapkey.kdb
- When using Tivoli LDAP libraries, this file may also contain
- Certificate Authority and client certificates and may be encrypted.
-
- TTLLSS__CCIIPPHHEERRSS _c_i_p_h_e_r _l_i_s_t
- The TTLLSS__CCIIPPHHEERRSS parameter allows the administer to restrict which
- encryption algorithms may be used for TLS (SSL) connections. See
- the OpenLDAP or Tivoli Directory Server manual for a list of valid
- ciphers. This option is not supported by Netscape-derived
- libraries.
-
- TTLLSS__KKEEYYPPWW _s_e_c_r_e_t
- The TTLLSS__KKEEYYPPWW contains the password used to decrypt the key
- database on clients using the Tivoli Directory Server LDAP library.
- The _s_e_c_r_e_t may be a plain text password or a base64-encoded string
- with a "base64:" prefix. For example:
-
- TLS_KEYPW base64:dGVzdA==
-
- If a plain text password is used, it should be a simple string
- without quotes. Plain text passwords may not include the comment
- character (`#') and the escaping of special characters with a
- backslash (`\') is not supported. If this option is used,
- _/_e_t_c_/_l_d_a_p_._c_o_n_f must not be world-readable to avoid exposing the
- password. Alternately, a _s_t_a_s_h _f_i_l_e can be used to store the
- password in encrypted form (see below).
-
- If no TTLLSS__KKEEYYPPWW is specified, a _s_t_a_s_h _f_i_l_e will be used if it
- exists. The _s_t_a_s_h _f_i_l_e must have the same path as the file
- specified by TTLLSS__KKEEYY, but use a .sth file extension instead of
- .kdb, e.g., ldapkey.sth. The default ldapkey.kdb that ships with
- Tivoli Directory Server is encrypted with the password
- ssl_password. The _g_s_k_8_c_a_p_i_c_m_d utility can be used to manage the
- key database and create a _s_t_a_s_h _f_i_l_e. This option is only
- supported by the Tivoli LDAP libraries.
-
- TTLLSS__RREEQQCCEERRTT _l_e_v_e_l
- The TTLLSS__RREEQQCCEERRTT parameter controls how the LDAP server's TLS
- certificated will be verified (if at all). If the server's TLS
- certificate cannot be verified (usually because it is signed by an
- unknown certificate authority), ssuuddoo will be unable to connect to
- it. The following _l_e_v_e_l values are supported:
-
- never The server certificate will not be requested or
- checked.
-
- allow The server certificate will be requested. A missing
- or invalid certificate is ignored and not considered
- an error.
-
- try The server certificate will be requested. A missing
- certificate is ignored but an invalid certificate
- will result in a connection error.
-
- demand | _h_a_r_d
- The server certificate will be requested. A missing
- or invalid certificate will result in a connection
- error. This is the default behavior.
-
- This option is only supported by the OpenLDAP libraries. Other
- LDAP libraries only support the TTLLSS__CCHHEECCKKPPEEEERR parameter.
-
- TTLLSS__RRAANNDDFFIILLEE _f_i_l_e _n_a_m_e
- The TTLLSS__RRAANNDDFFIILLEE parameter specifies the path to an entropy source
- for systems that lack a random device. It is generally used in
- conjunction with _p_r_n_g_d or _e_g_d. This option is only supported by
- the OpenLDAP libraries.
-
- UURRII _l_d_a_p_[_s_]_:_/_/_[_h_o_s_t_n_a_m_e_[_:_p_o_r_t_]_] _._._.
- Specifies a white space-delimited list of one or more URIs
- describing the LDAP server(s) to connect to. The _p_r_o_t_o_c_o_l may be
- either _l_d_a_p _l_d_a_p_s, the latter being for servers that support TLS
- (SSL) encryption. If no _p_o_r_t is specified, the default is port 389
- for ldap:// or port 636 for ldaps://. If no _h_o_s_t_n_a_m_e is specified,
- ssuuddoo will connect to _l_o_c_a_l_h_o_s_t. Multiple UURRII lines are treated
- identically to a UURRII line containing multiple entries. Only
- systems using the OpenSSL libraries support the mixing of ldap://
- and ldaps:// URIs. Both the Netscape-derived and Tivoli LDAP
- libraries used on most commercial versions of Unix are only capable
- of supporting one or the other.
-
- UUSSEE__SSAASSLL _o_n_/_t_r_u_e_/_y_e_s_/_o_f_f_/_f_a_l_s_e_/_n_o
- Enable UUSSEE__SSAASSLL for LDAP servers that support SASL authentication.
-
- RROOOOTTSSAASSLL__AAUUTTHH__IIDD _i_d_e_n_t_i_t_y
- The SASL user name to use when RROOOOTTUUSSEE__SSAASSLL is enabled.
-
- See the _l_d_a_p_._c_o_n_f entry in the _E_X_A_M_P_L_E_S section.
-
- CCoonnffiigguurriinngg nnsssswwiittcchh..ccoonnff
- Unless it is disabled at build time, ssuuddoo consults the Name Service
- Switch file, _/_e_t_c_/_n_s_s_w_i_t_c_h_._c_o_n_f, to specify the _s_u_d_o_e_r_s search order.
- Sudo looks for a line beginning with sudoers: and uses this to determine
- the search order. Note that ssuuddoo does not stop searching after the first
- match and later matches take precedence over earlier ones. The following
- sources are recognized:
-
- files read sudoers from _/_e_t_c_/_s_u_d_o_e_r_s
- ldap read sudoers from LDAP
-
- In addition, the entry [NOTFOUND=return] will short-circuit the search if
- the user was not found in the preceding source.
-
- To consult LDAP first followed by the local sudoers file (if it exists),
- use:
-
- sudoers: ldap files
-
- The local _s_u_d_o_e_r_s file can be ignored completely by using:
-
- sudoers: ldap
-
- If the _/_e_t_c_/_n_s_s_w_i_t_c_h_._c_o_n_f file is not present or there is no sudoers
- line, the following default is assumed:
-
- sudoers: files
-
- Note that _/_e_t_c_/_n_s_s_w_i_t_c_h_._c_o_n_f is supported even when the underlying
- operating system does not use an nsswitch.conf file, except on AIX (see
- below).
-
- CCoonnffiigguurriinngg nneettssvvcc..ccoonnff
- On AIX systems, the _/_e_t_c_/_n_e_t_s_v_c_._c_o_n_f file is consulted instead of
- _/_e_t_c_/_n_s_s_w_i_t_c_h_._c_o_n_f. ssuuddoo simply treats _n_e_t_s_v_c_._c_o_n_f as a variant of
- _n_s_s_w_i_t_c_h_._c_o_n_f; information in the previous section unrelated to the file
- format itself still applies.
-
- To consult LDAP first followed by the local sudoers file (if it exists),
- use:
-
- sudoers = ldap, files
-
- The local _s_u_d_o_e_r_s file can be ignored completely by using:
-
- sudoers = ldap
-
- To treat LDAP as authoritative and only use the local sudoers file if the
- user is not present in LDAP, use:
-
- sudoers = ldap = auth, files
-
- Note that in the above example, the auth qualifier only affects user
- lookups; both LDAP and _s_u_d_o_e_r_s will be queried for Defaults entries.
-
- If the _/_e_t_c_/_n_e_t_s_v_c_._c_o_n_f file is not present or there is no sudoers line,
- the following default is assumed:
-
- sudoers = files
-
- IInntteeggrraattiioonn wwiitthh ssssssdd
- On systems with the _S_y_s_t_e_m _S_e_c_u_r_i_t_y _S_e_r_v_i_c_e_s _D_a_e_m_o_n (SSSD) and where ssuuddoo
- has been built with SSSD support, it is possible to use SSSD to cache
- LDAP _s_u_d_o_e_r_s rules. To use SSSD as the _s_u_d_o_e_r_s source, you should use
- sssd instead of ldap for the sudoers entry in _/_e_t_c_/_n_s_s_w_i_t_c_h_._c_o_n_f. Note
- that the _/_e_t_c_/_l_d_a_p_._c_o_n_f file is not used by the SSSD ssuuddoo back end.
- Please see sssd-sudo(4) for more information on configuring ssuuddoo to work
- with SSSD.
-
-FFIILLEESS
- _/_e_t_c_/_l_d_a_p_._c_o_n_f LDAP configuration file
-
- _/_e_t_c_/_n_s_s_w_i_t_c_h_._c_o_n_f determines sudoers source order
-
- _/_e_t_c_/_n_e_t_s_v_c_._c_o_n_f determines sudoers source order on AIX
-
-EEXXAAMMPPLLEESS
- EExxaammppllee llddaapp..ccoonnff
- # Either specify one or more URIs or one or more host:port pairs.
- # If neither is specified sudo will default to localhost, port 389.
- #
- #host ldapserver
- #host ldapserver1 ldapserver2:390
- #
- # Default port if host is specified without one, defaults to 389.
- #port 389
- #
- # URI will override the host and port settings.
- uri ldap://ldapserver
- #uri ldaps://secureldapserver
- #uri ldaps://secureldapserver ldap://ldapserver
- #
- # The amount of time, in seconds, to wait while trying to connect to
- # an LDAP server.
- bind_timelimit 30
- #
- # The amount of time, in seconds, to wait while performing an LDAP query.
- timelimit 30
- #
- # Must be set or sudo will ignore LDAP; may be specified multiple times.
- sudoers_base ou=SUDOers,dc=my-domain,dc=com
- #
- # verbose sudoers matching from ldap
- #sudoers_debug 2
- #
- # Enable support for time-based entries in sudoers.
- #sudoers_timed yes
- #
- # optional proxy credentials
- #binddn <who to search as>
- #bindpw <password>
- #rootbinddn <who to search as, uses /etc/ldap.secret for bindpw>
- #
- # LDAP protocol version, defaults to 3
- #ldap_version 3
- #
- # Define if you want to use an encrypted LDAP connection.
- # Typically, you must also set the port to 636 (ldaps).
- #ssl on
- #
- # Define if you want to use port 389 and switch to
- # encryption before the bind credentials are sent.
- # Only supported by LDAP servers that support the start_tls
- # extension such as OpenLDAP.
- #ssl start_tls
- #
- # Additional TLS options follow that allow tweaking of the
- # SSL/TLS connection.
- #
- #tls_checkpeer yes # verify server SSL certificate
- #tls_checkpeer no # ignore server SSL certificate
- #
- # If you enable tls_checkpeer, specify either tls_cacertfile
- # or tls_cacertdir. Only supported when using OpenLDAP.
- #
- #tls_cacertfile /etc/certs/trusted_signers.pem
- #tls_cacertdir /etc/certs
- #
- # For systems that don't have /dev/random
- # use this along with PRNGD or EGD.pl to seed the
- # random number pool to generate cryptographic session keys.
- # Only supported when using OpenLDAP.
- #
- #tls_randfile /etc/egd-pool
- #
- # You may restrict which ciphers are used. Consult your SSL
- # documentation for which options go here.
- # Only supported when using OpenLDAP.
- #
- #tls_ciphers <cipher-list>
- #
- # Sudo can provide a client certificate when communicating to
- # the LDAP server.
- # Tips:
- # * Enable both lines at the same time.
- # * Do not password protect the key file.
- # * Ensure the keyfile is only readable by root.
- #
- # For OpenLDAP:
- #tls_cert /etc/certs/client_cert.pem
- #tls_key /etc/certs/client_key.pem
- #
- # For SunONE or iPlanet LDAP, tls_cert and tls_key may specify either
- # a directory, in which case the files in the directory must have the
- # default names (e.g., cert8.db and key4.db), or the path to the cert
- # and key files themselves. However, a bug in version 5.0 of the LDAP
- # SDK will prevent specific file names from working. For this reason
- # it is suggested that tls_cert and tls_key be set to a directory,
- # not a file name.
- #
- # The certificate database specified by tls_cert may contain CA certs
- # and/or the client's cert. If the client's cert is included, tls_key
- # should be specified as well.
- # For backward compatibility, "sslpath" may be used in place of tls_cert.
- #tls_cert /var/ldap
- #tls_key /var/ldap
- #
- # If using SASL authentication for LDAP (OpenSSL)
- # use_sasl yes
- # sasl_auth_id <SASL user name>
- # rootuse_sasl yes
- # rootsasl_auth_id <SASL user name for root access>
- # sasl_secprops none
- # krb5_ccname /etc/.ldapcache
-
- SSuuddooeerrss sscchheemmaa ffoorr OOppeennLLDDAAPP
- The following schema, in OpenLDAP format, is included with ssuuddoo source
- and binary distributions as _s_c_h_e_m_a_._O_p_e_n_L_D_A_P. Simply copy it to the
- schema directory (e.g., _/_e_t_c_/_o_p_e_n_l_d_a_p_/_s_c_h_e_m_a), add the proper include
- line in _s_l_a_p_d_._c_o_n_f and restart ssllaappdd. Sites using the optional on-line
- configuration supported by OpenLDAP 2.3 and higher should apply the
- _s_c_h_e_m_a_._o_l_c_S_u_d_o file instead.
-
- attributetype ( 1.3.6.1.4.1.15953.9.1.1
- NAME 'sudoUser'
- DESC 'User(s) who may run sudo'
- EQUALITY caseExactIA5Match
- SUBSTR caseExactIA5SubstringsMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
- attributetype ( 1.3.6.1.4.1.15953.9.1.2
- NAME 'sudoHost'
- DESC 'Host(s) who may run sudo'
- EQUALITY caseExactIA5Match
- SUBSTR caseExactIA5SubstringsMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
- attributetype ( 1.3.6.1.4.1.15953.9.1.3
- NAME 'sudoCommand'
- DESC 'Command(s) to be executed by sudo'
- EQUALITY caseExactIA5Match
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
- attributetype ( 1.3.6.1.4.1.15953.9.1.4
- NAME 'sudoRunAs'
- DESC 'User(s) impersonated by sudo'
- EQUALITY caseExactIA5Match
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
- attributetype ( 1.3.6.1.4.1.15953.9.1.5
- NAME 'sudoOption'
- DESC 'Options(s) followed by sudo'
- EQUALITY caseExactIA5Match
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
- attributetype ( 1.3.6.1.4.1.15953.9.1.6
- NAME 'sudoRunAsUser'
- DESC 'User(s) impersonated by sudo'
- EQUALITY caseExactIA5Match
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
- attributetype ( 1.3.6.1.4.1.15953.9.1.7
- NAME 'sudoRunAsGroup'
- DESC 'Group(s) impersonated by sudo'
- EQUALITY caseExactIA5Match
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
-
- attributetype ( 1.3.6.1.4.1.15953.9.1.8
- NAME 'sudoNotBefore'
- DESC 'Start of time interval for which the entry is valid'
- EQUALITY generalizedTimeMatch
- ORDERING generalizedTimeOrderingMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )
-
- attributetype ( 1.3.6.1.4.1.15953.9.1.9
- NAME 'sudoNotAfter'
- DESC 'End of time interval for which the entry is valid'
- EQUALITY generalizedTimeMatch
- ORDERING generalizedTimeOrderingMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )
-
- attributetype ( 1.3.6.1.4.1.15953.9.1.10
- NAME 'sudoOrder'
- DESC 'an integer to order the sudoRole entries'
- EQUALITY integerMatch
- ORDERING integerOrderingMatch
- SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
-
- objectclass ( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' SUP top STRUCTURAL
- DESC 'Sudoer Entries'
- MUST ( cn )
- MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $
- sudoRunAsGroup $ sudoOption $ sudoNotBefore $ sudoNotAfter $
- sudoOrder $ description )
- )
-
-SSEEEE AALLSSOO
- cvtsudoers(1), ldap.conf(4), sssd-sudo(4), sudo.conf(4), sudoers(4)
-
-AAUUTTHHOORRSS
- Many people have worked on ssuuddoo over the years; this version consists of
- code written primarily by:
-
- Todd C. Miller
-
- See the CONTRIBUTORS file in the ssuuddoo distribution
- (https://www.sudo.ws/contributors.html) for an exhaustive list of people
- who have contributed to ssuuddoo.
-
-CCAAVVEEAATTSS
- Note that there are differences in the way that LDAP-based _s_u_d_o_e_r_s is
- parsed compared to file-based _s_u_d_o_e_r_s. See the _D_i_f_f_e_r_e_n_c_e_s _b_e_t_w_e_e_n _L_D_A_P
- _a_n_d _n_o_n_-_L_D_A_P _s_u_d_o_e_r_s section for more information.
-
-BBUUGGSS
- If you feel you have found a bug in ssuuddoo, please submit a bug report at
- https://bugzilla.sudo.ws/
-
-SSUUPPPPOORRTT
- Limited free support is available via the sudo-users mailing list, see
- https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search
- the archives.
-
-DDIISSCCLLAAIIMMEERR
- ssuuddoo is provided "AS IS" and any express or implied warranties,
- including, but not limited to, the implied warranties of merchantability
- and fitness for a particular purpose are disclaimed. See the LICENSE
- file distributed with ssuuddoo or https://www.sudo.ws/license.html for
- complete details.
-
-Sudo 1.8.26 November 9, 2018 Sudo 1.8.26
diff --git a/doc/sudoers.ldap.man.in b/doc/sudoers.ldap.man.in
index a767d64..5791e4c 100644
--- a/doc/sudoers.ldap.man.in
+++ b/doc/sudoers.ldap.man.in
@@ -1,6 +1,8 @@
.\" Automatically generated from an mdoc input file. Do not edit.
.\"
-.\" Copyright (c) 2003-2018 Todd C. Miller <Todd.Miller@sudo.ws>
+.\" SPDX-License-Identifier: ISC
+.\"
+.\" Copyright (c) 2003-2019 Todd C. Miller <Todd.Miller@sudo.ws>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -14,7 +16,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.TH "SUDOERS.LDAP" "@mansectform@" "November 9, 2018" "Sudo @PACKAGE_VERSION@" "File Formats Manual"
+.TH "SUDOERS.LDAP" "@mansectform@" "February 26, 2018" "Sudo @PACKAGE_VERSION@" "File Formats Manual"
.nh
.if n .ad l
.SH "NAME"
@@ -1432,7 +1434,7 @@ rules.
To use SSSD as the
\fIsudoers\fR
source, you should use
-\fRsssd\fR
+\fRsss\fR
instead of
\fRldap\fR
for the sudoers entry in
diff --git a/doc/sudoers.ldap.mdoc.in b/doc/sudoers.ldap.mdoc.in
index c7ab8a8..d88d48b 100644
--- a/doc/sudoers.ldap.mdoc.in
+++ b/doc/sudoers.ldap.mdoc.in
@@ -1,5 +1,7 @@
.\"
-.\" Copyright (c) 2003-2018 Todd C. Miller <Todd.Miller@sudo.ws>
+.\" SPDX-License-Identifier: ISC
+.\"
+.\" Copyright (c) 2003-2019 Todd C. Miller <Todd.Miller@sudo.ws>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -13,7 +15,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd November 9, 2018
+.Dd February 26, 2018
.Dt SUDOERS.LDAP @mansectform@
.Os Sudo @PACKAGE_VERSION@
.Sh NAME
@@ -1294,7 +1296,7 @@ rules.
To use SSSD as the
.Em sudoers
source, you should use
-.Li sssd
+.Li sss
instead of
.Li ldap
for the sudoers entry in
diff --git a/doc/sudoers.man.in b/doc/sudoers.man.in
index e2470b5..82b0bcf 100644
--- a/doc/sudoers.man.in
+++ b/doc/sudoers.man.in
@@ -1,6 +1,8 @@
.\" Automatically generated from an mdoc input file. Do not edit.
.\"
-.\" Copyright (c) 1994-1996, 1998-2005, 2007-2018
+.\" SPDX-License-Identifier: ISC
+.\"
+.\" Copyright (c) 1994-1996, 1998-2005, 2007-2019
.\" Todd C. Miller <Todd.Miller@sudo.ws>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
@@ -23,7 +25,7 @@
.nr BA @BAMAN@
.nr LC @LCMAN@
.nr PS @PSMAN@
-.TH "SUDOERS" "@mansectform@" "December 20, 2018" "Sudo @PACKAGE_VERSION@" "File Formats Manual"
+.TH "SUDOERS" "@mansectform@" "September 16, 2019" "Sudo @PACKAGE_VERSION@" "File Formats Manual"
.nh
.if n .ad l
.SH "NAME"
@@ -259,7 +261,7 @@ See
for a description of the log file format.
.PP
\fBsudoers\fR
-is also capable of running a command in a pseudo-tty and logging all
+is also capable of running a command in a pseudo-terminal and logging all
input and/or output.
The standard input, standard output and standard error can be logged
even when not associated with a terminal.
@@ -309,31 +311,42 @@ and
settings in
\fI/etc/login.conf\fR.
.\}
-The new environment contains the
-\fRTERM\fR,
-\fRPATH\fR,
+The
\fRHOME\fR,
\fRMAIL\fR,
\fRSHELL\fR,
-\fRLOGNAME\fR,
-\fRUSER\fR
+\fRLOGNAME\fR
and
+\fRUSER\fR
+environment variables are initialized based on the target user
+and the
\fRSUDO_*\fR
-variables
-in addition to variables from the invoking process permitted by the
-\fIenv_check\fR
+variables are set based on the invoking user.
+Additional variables, such as
+\fRDISPLAY\fR,
+\fRPATH\fR
and
+\fRTERM\fR,
+are preserved from the invoking user's environment if permitted by the
+\fIenv_check\fR
+or
\fIenv_keep\fR
options.
-This is effectively a whitelist
-for environment variables.
-The environment variables
+This is effectively a whitelist for environment variables.
+A few environment variables are treated specially.
+If the
+\fRPATH\fR
+and
+\fRTERM\fR
+variables are not preserved from the user's environment, they will be set
+to default values.
+The
\fRLOGNAME\fR
and
\fRUSER\fR
-are treated specially.
-If one of them is preserved (or removed) from user's environment, the other
-will be as well.
+are handled as a single entity.
+If one of them is preserved (or removed) from the user's environment,
+the other will be as well.
If
\fRLOGNAME\fR
and
@@ -343,6 +356,7 @@ the other will be set to the same value.
This avoids an inconsistent environment where one of the variables
describing the user name is set to the invoking user and one is
set to the target user.
+Environment variables with a value beginning with
\fR()\fR
are removed unless both the name and value parts are matched by
\fIenv_keep\fR
@@ -411,15 +425,28 @@ suffix, this would not match, as
\fBbash\fR
shell functions are not preserved by default.
.PP
-The complete list of environment variables that
+The complete list of environment variables that are preserved or removed,
+as modified by global Defaults parameters in
+\fIsudoers\fR,
+is displayed when
\fBsudo\fR
-allows or denies is contained in the output of
-\(lq\fRsudo -V\fR\(rq
-when run as root.
-Please note that this list varies based on the operating system
+is run by root with the
+\fB\-V\fR
+option.
+Please note that the list of environment variables to remove
+varies based on the operating system
\fBsudo\fR
is running on.
.PP
+Other
+\fBsudoers\fR
+options may influence the command environment, such as
+\fIalways_set_home\fR,
+\fIsecure_path\fR,
+\fIset_logname\fR,
+and
+\fIset_home\fR.
+.PP
On systems that support PAM where the
\fBpam_env\fR
module is enabled for
@@ -838,7 +865,7 @@ only the case for non-networked systems.
.sp
.RS 0n
digest ::= [A-Fa-f0-9]+ |
- [[A-Za-z0-9\+/=]+
+ [A-Za-z0-9\e+/=]+
Digest_Spec ::= "sha224" ':' digest |
"sha256" ':' digest |
@@ -867,7 +894,7 @@ shell-style wildcards (see the
\fIWildcards\fR
section below).
A simple file name allows the user to run the command with any
-arguments he/she wishes.
+arguments they wish.
However, you may also specify command line arguments (including
wildcards).
Alternately, you can specify
@@ -1607,15 +1634,16 @@ option.
.sp
By default, if the
\fRNOPASSWD\fR
-tag is applied to any of the entries for a user on the current host,
-he or she will be able to run
+tag is applied to any of a user's entries for the current host,
+the user will be able to run
\(lq\fRsudo -l\fR\(rq
without a password.
Additionally, a user may only run
\(lq\fRsudo -v\fR\(rq
-without a password if the
+without a password if all of the user's entries for the current
+host have the
\fRNOPASSWD\fR
-tag is present for all a user's entries that pertain to the current host.
+tag.
This behavior may be overridden via the
\fIverifypw\fR
and
@@ -2060,25 +2088,17 @@ If enabled,
will set the
\fRHOME\fR
environment variable to the home directory of the target user
-(which is root unless the
+(which is root unless
+\fBsudo\fR's
\fB\-u\fR
option is used).
-This effectively means that the
-\fB\-H\fR
-option is always implied.
-Note that by default,
-\fRHOME\fR
-will be set to the home directory of the target user when the
-\fIenv_reset\fR
-option is enabled, so
-\fIalways_set_home\fR
-only has an effect for configurations where either
+This option is largely obsolete and has no effect unless the
\fIenv_reset\fR
-is disabled or
+option has been disabled or
\fRHOME\fR
is present in the
\fIenv_keep\fR
-list.
+list, both of which are strongly discouraged.
This flag is
\fIoff\fR
by default.
@@ -2146,8 +2166,8 @@ runs a command as the foreground process as long as
itself is running in the foreground.
When the
\fIexec_background\fR
-flag is enabled and the command is being run in a pty (due to I/O logging
-or the
+flag is enabled and the command is being run in a pseudo-terminal
+(due to I/O logging or the
\fIuse_pty\fR
flag), the command will be run as a background process.
Attempts to read from the controlling terminal (or to change terminal
@@ -2168,7 +2188,7 @@ has required it or not (the kernel buffers terminals so it is not possible
to tell whether the command really wants the input).
This is different from historic
\fIsudo\fR
-behavior or when the command is not being run in a pty.
+behavior or when the command is not being run in a pseudo-terminal.
.sp
For this to work seamlessly, the operating system must support the
automatic restarting of system calls.
@@ -2208,10 +2228,14 @@ will use the value of the
or
\fREDITOR\fR
environment variables before falling back on the default editor list.
-Note that this may create a security hole as it allows the user to
-run any arbitrary command as root without logging.
-A safer alternative is to place a colon-separated list of editors
-in the
+Note that
+\fBvisudo\fR
+is typically run as root so this option may allow a user with
+\fBvisudo\fR
+privileges to run arbitrary commands as root without logging.
+An alternative is to place a colon-separated list of
+\(lqsafe\(rq
+editors int the
\fIeditor\fR
variable.
\fBvisudo\fR
@@ -2366,7 +2390,7 @@ has the fully-qualified domain name as the
host name, and the short version as an alias.
.sp
.RS 24n
-192.168.1.1 xyzzy.sudo.ws xyzzy
+192.168.1.1 xyzzy.sudo.ws xyzzy
.RE
.RS 18n
.sp
@@ -2501,7 +2525,7 @@ by default.
log_input
If set,
\fBsudo\fR
-will run the command in a pseudo-tty and log all user input.
+will run the command in a pseudo-terminal and log all user input.
If the standard input is not connected to the user's tty, due to
I/O redirection or because the command is part of a pipeline, that
input is also captured and stored in a separate log file.
@@ -2522,7 +2546,7 @@ by default.
log_output
If set,
\fBsudo\fR
-will run the command in a pseudo-tty and log all output that is sent
+will run the command in a pseudo-terminal and log all output that is sent
to the screen, similar to the
script(1)
command.
@@ -2720,10 +2744,34 @@ This flag is
\fIoff\fR
by default.
.TP 18n
+pam_acct_mgmt
+On systems that use PAM for authentication,
+\fBsudo\fR
+will perform PAM account validation for the invoking user by default.
+The actual checks performed depend on which PAM modules are configured.
+If enabled, account validation will be performed regardless of whether
+or not a password is required.
+This flag is
+\fIon\fR
+by default.
+.sp
+This setting is only supported by version 1.8.28 or higher.
+.TP 18n
pam_session
On systems that use PAM for authentication,
\fBsudo\fR
will create a new PAM session for the command to be run in.
+Unless
+\fBsudo\fR
+is given the
+\fB\-i\fR
+or
+\fB\-s\fR
+options, PAM session modules are run with the
+\(lqsilent\(rq
+flag enabled.
+This prevents last login information from being displayed for every
+command on some systems.
Disabling
\fIpam_session\fR
may be needed on older PAM implementations or on operating systems where
@@ -2887,30 +2935,20 @@ If enabled and
\fBsudo\fR
is invoked with the
\fB\-s\fR
-option the
+option, the
\fRHOME\fR
environment variable will be set to the home directory of the target
-user (which is root unless the
+user (which is root unless
+\fBsudo\fR's
\fB\-u\fR
option is used).
-This effectively makes the
-\fB\-s\fR
-option imply
-\fB\-H\fR.
-Note that
-\fRHOME\fR
-is already set when the
-\fIenv_reset\fR
-option is enabled, so
-\fIset_home\fR
-is only effective for configurations where either
+This option is largely obsolete and has no effect unless the
\fIenv_reset\fR
-is disabled
-or
+option has been disabled or
\fRHOME\fR
is present in the
\fIenv_keep\fR
-list.
+list, both of which are strongly discouraged.
This flag is
\fIoff\fR
by default.
@@ -2948,16 +2986,16 @@ by default.
set_utmp
When enabled,
\fBsudo\fR
-will create an entry in the utmp (or utmpx) file when a pseudo-tty
+will create an entry in the utmp (or utmpx) file when a pseudo-terminal
is allocated.
-A pseudo-tty is allocated by
+A pseudo-terminal is allocated by
\fBsudo\fR
-when the
+when it is running in a terminal and one or more of the
\fIlog_input\fR,
\fIlog_output\fR
or
\fIuse_pty\fR
-flags are enabled.
+flags is enabled.
By default, the new entry will be a copy of the user's existing utmp
entry (if any), with the tty, time, type and pid fields updated.
This flag is
@@ -3155,7 +3193,7 @@ by default.
use_pty
If set, and
\fBsudo\fR
-is running in a terminal, the command will be run in a pseudo-pty
+is running in a terminal, the command will be run in a pseudo-terminal
(even if no I/O logging is being done).
If the
\fBsudo\fR
@@ -3169,7 +3207,7 @@ may be capable of injecting commands into the user's
terminal or running a background process that retains access to the
user's terminal device even after the main program has finished
executing.
-By running the command in a separate pseudo-pty, this attack is
+By running the command in a separate pseudo-terminal, this attack is
no longer possible.
This flag is
\fIoff\fR
@@ -3412,11 +3450,13 @@ Unless invoked as
does not preserve the
\fRSUDO_EDITOR\fR,
\fRVISUAL\fR
-and
+or
\fREDITOR\fR
-environment variables by default, even when the
+environment variables unless they are present in the
+\fIenv_keep\fR
+list or the
\fIenv_reset\fR
-option is enabled.
+option is disabled.
The default is
\fI@editor@\fR.
.TP 18n
@@ -3942,7 +3982,7 @@ A string containing a
group plugin with optional arguments.
The string should consist of the plugin
path, either fully-qualified or relative to the
-\fI@PLUGINDIR@\fR
+\fI@plugindir@\fR
directory, followed by any configuration arguments the plugin requires.
These arguments (if any) will be passed to the plugin's initialization function.
If arguments are present, the string must be enclosed in double quotes
@@ -4118,18 +4158,17 @@ are processed before the contents of
\fIenv_file\fR.
.TP 14n
secure_path
-Path used for every command run from
-\fBsudo\fR.
-If you don't trust the
-people running
+If set,
\fBsudo\fR
-to have a sane
+will use this value in place of the user's
+\fRPATH\fR
+environment variable.
+This option can be used to reset the
\fRPATH\fR
-environment variable you may want to use this.
-Another use is if you want to have the
-\(lqroot path\(rq
-be separate from the
-\(lquser path\(rq.
+to a known good value that contains directories for system administrator
+commands such as
+\fI/usr/sbin\fR.
+.sp
Users in the group specified by the
\fIexempt_group\fR
option are not affected by
@@ -4352,6 +4391,26 @@ is displayed when
is run by root with the
\fB\-V\fR
option.
+.sp
+Preserving the
+\fRHOME\fR
+environment variable has security implications since many programs use it
+when searching for configuration or data files.
+Adding
+\fRHOME\fR
+to
+\fIenv_keep\fR
+may enable a user to run unrestricted commands via
+\fBsudo\fR
+and is strongly discouraged.
+Users wishing to edit files with
+\fBsudo\fR
+should run
+\fBsudoedit\fR
+(or
+\fBsudo\fR \fB\-e\fR)
+to get their accustomed editor configuration instead of
+invoking the editor directly.
.SH "GROUP PROVIDER PLUGINS"
The
\fBsudoers\fR
@@ -4368,7 +4427,7 @@ Defaults setting.
The argument to
\fIgroup_plugin\fR
should consist of the plugin path, either fully-qualified or relative to the
-\fI@PLUGINDIR@\fR
+\fI@plugindir@\fR
directory, followed by any configuration options the plugin requires.
These options (if specified) will be passed to the plugin's initialization
function.
@@ -4762,7 +4821,7 @@ word wrap will be disabled.
.SH "I/O LOG FILES"
When I/O logging is enabled,
\fBsudo\fR
-will run the command in a pseudo-tty and log all user input and/or output,
+will run the command in a pseudo-terminal and log all user input and/or output,
depending on which options are enabled.
I/O is logged to the directory specified by the
\fIiolog_dir\fR
@@ -4781,34 +4840,82 @@ Each I/O log is stored in a separate directory that contains the
following files:
.TP 10n
\fIlog\fR
-a text file containing the time the command was run, the name of the user
+A text file containing information about the command.
+The first line consists of the following colon-delimited fields:
+the time the command was run, the name of the user
who ran
\fBsudo\fR,
the name of the target user, the name of the target group (optional),
the terminal that
\fBsudo\fR
-was run from, the number of rows and columns of the terminal,
-the working directory the command was run from and the path name of
-the command itself (with arguments if present)
+was run from, and the number of lines and columns of the terminal.
+The second and third lines contain the working directory the command
+was run from and the path name of the command itself (with arguments
+if present).
.TP 10n
\fItiming\fR
-a log of the amount of time between, and the number of bytes in, each
-I/O log entry (used for session playback)
+Timing information used to replay the session.
+Each line consists of the I/O log entry type and amount of time
+since the last entry, followed by type-specific data.
+The I/O log entry types and their corresponding type-specific data are:
+.PP
+.RS 10n
+.PD 0
+.TP 6n
+0
+standard input, number of bytes in the entry
+.TP 6n
+1
+standard output, number of bytes in the entry
+.TP 6n
+2
+standard error, number of bytes in the entry
+.TP 6n
+3
+terminal input, number of bytes in the entry
+.TP 6n
+4
+terminal output, number of bytes in the entry
+.TP 6n
+5
+window change, new number lines and columns
+.TP 6n
+6
+bug compatibility for
+\fBsudo\fR
+1.8.7 terminal output
+.TP 6n
+7
+command suspend or resume, signal received
+.PP
+.RE
+.PD
.TP 10n
\fIttyin\fR
-input from the user's tty (what the user types)
+Raw input from the user's terminal, exactly as it was received.
+No post-processing is performed.
+For manual viewing, you may wish to convert carriage return characters
+in the log to line feeds.
+For example:
+\(oqgunzip -c ttyin | tr \&"\er\&" \&"\en\&"\(cq
.TP 10n
\fIstdin\fR
-input from a pipe or file
+The standard input when no terminal is present, or input redirected from
+a pipe or file.
.TP 10n
\fIttyout\fR
-output from the pseudo-tty (what the command writes to the screen)
+Output from the pseudo-terminal (what the command writes to the screen).
+Note that terminal-specific post-processing is performed before the
+data is logged.
+This means that, for example, line feeds are usually converted to
+line feed/carriage return pairs and tabs may be expanded to spaces.
.TP 10n
\fIstdout\fR
-standard output to a pipe or redirected to a file
+The standard output when no terminal is present, or output redirected to
+a pipe or file.
.TP 10n
\fIstderr\fR
-standard error to a pipe or redirected to a file
+The standard error redirected to a pipe or file.
.PP
All files other than
\fIlog\fR
@@ -4816,7 +4923,7 @@ are compressed in gzip format unless the
\fIcompress_io\fR
flag has been disabled.
Due to buffering, it is not normally possible to display the I/O logs in
-real-time as the program is executing
+real-time as the program is executing.
The I/O log data will not be complete until the program run by
\fBsudo\fR
has exited or has been terminated by a signal.
@@ -5734,7 +5841,7 @@ The equivalent of
for the plugin.
.TP 10n
\fIpty\fR
-pseudo-tty related code
+pseudo-terminal related code
.TP 10n
\fIrbtree\fR
redblack tree internals
diff --git a/doc/sudoers.mdoc.in b/doc/sudoers.mdoc.in
index 2053b5d..ade2b0d 100644
--- a/doc/sudoers.mdoc.in
+++ b/doc/sudoers.mdoc.in
@@ -1,5 +1,7 @@
.\"
-.\" Copyright (c) 1994-1996, 1998-2005, 2007-2018
+.\" SPDX-License-Identifier: ISC
+.\"
+.\" Copyright (c) 1994-1996, 1998-2005, 2007-2019
.\" Todd C. Miller <Todd.Miller@sudo.ws>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
@@ -22,7 +24,7 @@
.nr BA @BAMAN@
.nr LC @LCMAN@
.nr PS @PSMAN@
-.Dd December 20, 2018
+.Dd September 16, 2019
.Dt SUDOERS @mansectform@
.Os Sudo @PACKAGE_VERSION@
.Sh NAME
@@ -249,7 +251,7 @@ See
for a description of the log file format.
.Pp
.Nm sudoers
-is also capable of running a command in a pseudo-tty and logging all
+is also capable of running a command in a pseudo-terminal and logging all
input and/or output.
The standard input, standard output and standard error can be logged
even when not associated with a terminal.
@@ -299,31 +301,42 @@ and
settings in
.Pa /etc/login.conf .
.\}
-The new environment contains the
-.Ev TERM ,
-.Ev PATH ,
+The
.Ev HOME ,
.Ev MAIL ,
.Ev SHELL ,
-.Ev LOGNAME ,
-.Ev USER
+.Ev LOGNAME
and
+.Ev USER
+environment variables are initialized based on the target user
+and the
.Ev SUDO_*
-variables
-in addition to variables from the invoking process permitted by the
-.Em env_check
+variables are set based on the invoking user.
+Additional variables, such as
+.Ev DISPLAY ,
+.Ev PATH
and
+.Ev TERM ,
+are preserved from the invoking user's environment if permitted by the
+.Em env_check
+or
.Em env_keep
options.
-This is effectively a whitelist
-for environment variables.
-The environment variables
+This is effectively a whitelist for environment variables.
+A few environment variables are treated specially.
+If the
+.Ev PATH
+and
+.Ev TERM
+variables are not preserved from the user's environment, they will be set
+to default values.
+The
.Ev LOGNAME
and
.Ev USER
-are treated specially.
-If one of them is preserved (or removed) from user's environment, the other
-will be as well.
+are handled as a single entity.
+If one of them is preserved (or removed) from the user's environment,
+the other will be as well.
If
.Ev LOGNAME
and
@@ -333,6 +346,7 @@ the other will be set to the same value.
This avoids an inconsistent environment where one of the variables
describing the user name is set to the invoking user and one is
set to the target user.
+Environment variables with a value beginning with
.Li ()
are removed unless both the name and value parts are matched by
.Em env_keep
@@ -398,15 +412,28 @@ suffix, this would not match, as
.Sy bash
shell functions are not preserved by default.
.Pp
-The complete list of environment variables that
+The complete list of environment variables that are preserved or removed,
+as modified by global Defaults parameters in
+.Em sudoers ,
+is displayed when
.Nm sudo
-allows or denies is contained in the output of
-.Dq Li sudo -V
-when run as root.
-Please note that this list varies based on the operating system
+is run by root with the
+.Fl V
+option.
+Please note that the list of environment variables to remove
+varies based on the operating system
.Nm sudo
is running on.
.Pp
+Other
+.Nm
+options may influence the command environment, such as
+.Em always_set_home ,
+.Em secure_path ,
+.Em set_logname ,
+and
+.Em set_home .
+.Pp
On systems that support PAM where the
.Sy pam_env
module is enabled for
@@ -803,7 +830,7 @@ will only match if that is the actual host name, which is usually
only the case for non-networked systems.
.Bd -literal
digest ::= [A-Fa-f0-9]+ |
- [[A-Za-z0-9\+/=]+
+ [A-Za-z0-9\e+/=]+
Digest_Spec ::= "sha224" ':' digest |
"sha256" ':' digest |
@@ -831,7 +858,7 @@ shell-style wildcards (see the
.Sx Wildcards
section below).
A simple file name allows the user to run the command with any
-arguments he/she wishes.
+arguments they wish.
However, you may also specify command line arguments (including
wildcards).
Alternately, you can specify
@@ -1511,15 +1538,16 @@ option.
.Pp
By default, if the
.Li NOPASSWD
-tag is applied to any of the entries for a user on the current host,
-he or she will be able to run
+tag is applied to any of a user's entries for the current host,
+the user will be able to run
.Dq Li sudo -l
without a password.
Additionally, a user may only run
.Dq Li sudo -v
-without a password if the
+without a password if all of the user's entries for the current
+host have the
.Li NOPASSWD
-tag is present for all a user's entries that pertain to the current host.
+tag.
This behavior may be overridden via the
.Em verifypw
and
@@ -1932,25 +1960,17 @@ If enabled,
will set the
.Ev HOME
environment variable to the home directory of the target user
-(which is root unless the
+(which is root unless
+.Nm sudo Ns 's
.Fl u
option is used).
-This effectively means that the
-.Fl H
-option is always implied.
-Note that by default,
-.Ev HOME
-will be set to the home directory of the target user when the
-.Em env_reset
-option is enabled, so
-.Em always_set_home
-only has an effect for configurations where either
+This option is largely obsolete and has no effect unless the
.Em env_reset
-is disabled or
+option has been disabled or
.Ev HOME
is present in the
.Em env_keep
-list.
+list, both of which are strongly discouraged.
This flag is
.Em off
by default.
@@ -2012,8 +2032,8 @@ runs a command as the foreground process as long as
itself is running in the foreground.
When the
.Em exec_background
-flag is enabled and the command is being run in a pty (due to I/O logging
-or the
+flag is enabled and the command is being run in a pseudo-terminal
+(due to I/O logging or the
.Em use_pty
flag), the command will be run as a background process.
Attempts to read from the controlling terminal (or to change terminal
@@ -2034,7 +2054,7 @@ has required it or not (the kernel buffers terminals so it is not possible
to tell whether the command really wants the input).
This is different from historic
.Em sudo
-behavior or when the command is not being run in a pty.
+behavior or when the command is not being run in a pseudo-terminal.
.Pp
For this to work seamlessly, the operating system must support the
automatic restarting of system calls.
@@ -2073,10 +2093,14 @@ will use the value of the
or
.Ev EDITOR
environment variables before falling back on the default editor list.
-Note that this may create a security hole as it allows the user to
-run any arbitrary command as root without logging.
-A safer alternative is to place a colon-separated list of editors
-in the
+Note that
+.Nm visudo
+is typically run as root so this option may allow a user with
+.Nm visudo
+privileges to run arbitrary commands as root without logging.
+An alternative is to place a colon-separated list of
+.Dq safe
+editors int the
.Em editor
variable.
.Nm visudo
@@ -2227,7 +2251,7 @@ has the fully-qualified domain name as the
.Dq canonical
host name, and the short version as an alias.
.sp
-.Dl 192.168.1.1 xyzzy.sudo.ws xyzzy
+.Dl 192.168.1.1 xyzzy.sudo.ws xyzzy
.sp
If the machine's hosts file entry is not formatted properly, the
.Em fqdn
@@ -2352,7 +2376,7 @@ by default.
.It log_input
If set,
.Nm sudo
-will run the command in a pseudo-tty and log all user input.
+will run the command in a pseudo-terminal and log all user input.
If the standard input is not connected to the user's tty, due to
I/O redirection or because the command is part of a pipeline, that
input is also captured and stored in a separate log file.
@@ -2372,7 +2396,7 @@ by default.
.It log_output
If set,
.Nm sudo
-will run the command in a pseudo-tty and log all output that is sent
+will run the command in a pseudo-terminal and log all output that is sent
to the screen, similar to the
.Xr script 1
command.
@@ -2558,10 +2582,33 @@ section at the end of this manual.
This flag is
.Em off
by default.
+.It pam_acct_mgmt
+On systems that use PAM for authentication,
+.Nm sudo
+will perform PAM account validation for the invoking user by default.
+The actual checks performed depend on which PAM modules are configured.
+If enabled, account validation will be performed regardless of whether
+or not a password is required.
+This flag is
+.Em on
+by default.
+.Pp
+This setting is only supported by version 1.8.28 or higher.
.It pam_session
On systems that use PAM for authentication,
.Nm sudo
will create a new PAM session for the command to be run in.
+Unless
+.Nm sudo
+is given the
+.Fl i
+or
+.Fl s
+options, PAM session modules are run with the
+.Dq silent
+flag enabled.
+This prevents last login information from being displayed for every
+command on some systems.
Disabling
.Em pam_session
may be needed on older PAM implementations or on operating systems where
@@ -2715,30 +2762,20 @@ If enabled and
.Nm sudo
is invoked with the
.Fl s
-option the
+option, the
.Ev HOME
environment variable will be set to the home directory of the target
-user (which is root unless the
+user (which is root unless
+.Nm sudo Ns 's
.Fl u
option is used).
-This effectively makes the
-.Fl s
-option imply
-.Fl H .
-Note that
-.Ev HOME
-is already set when the
+This option is largely obsolete and has no effect unless the
.Em env_reset
-option is enabled, so
-.Em set_home
-is only effective for configurations where either
-.Em env_reset
-is disabled
-or
+option has been disabled or
.Ev HOME
is present in the
.Em env_keep
-list.
+list, both of which are strongly discouraged.
This flag is
.Em off
by default.
@@ -2774,16 +2811,16 @@ by default.
.It set_utmp
When enabled,
.Nm sudo
-will create an entry in the utmp (or utmpx) file when a pseudo-tty
+will create an entry in the utmp (or utmpx) file when a pseudo-terminal
is allocated.
-A pseudo-tty is allocated by
+A pseudo-terminal is allocated by
.Nm sudo
-when the
+when it is running in a terminal and one or more of the
.Em log_input ,
.Em log_output
or
.Em use_pty
-flags are enabled.
+flags is enabled.
By default, the new entry will be a copy of the user's existing utmp
entry (if any), with the tty, time, type and pid fields updated.
This flag is
@@ -2968,7 +3005,7 @@ by default.
.It use_pty
If set, and
.Nm sudo
-is running in a terminal, the command will be run in a pseudo-pty
+is running in a terminal, the command will be run in a pseudo-terminal
(even if no I/O logging is being done).
If the
.Nm sudo
@@ -2982,7 +3019,7 @@ may be capable of injecting commands into the user's
terminal or running a background process that retains access to the
user's terminal device even after the main program has finished
executing.
-By running the command in a separate pseudo-pty, this attack is
+By running the command in a separate pseudo-terminal, this attack is
no longer possible.
This flag is
.Em off
@@ -3215,11 +3252,13 @@ Unless invoked as
does not preserve the
.Ev SUDO_EDITOR ,
.Ev VISUAL
-and
+or
.Ev EDITOR
-environment variables by default, even when the
+environment variables unless they are present in the
+.Em env_keep
+list or the
.Em env_reset
-option is enabled.
+option is disabled.
The default is
.Pa @editor@ .
.It iolog_dir
@@ -3692,7 +3731,7 @@ A string containing a
group plugin with optional arguments.
The string should consist of the plugin
path, either fully-qualified or relative to the
-.Pa @PLUGINDIR@
+.Pa @plugindir@
directory, followed by any configuration arguments the plugin requires.
These arguments (if any) will be passed to the plugin's initialization function.
If arguments are present, the string must be enclosed in double quotes
@@ -3845,18 +3884,17 @@ In either case, the contents of
are processed before the contents of
.Em env_file .
.It secure_path
-Path used for every command run from
-.Nm sudo .
-If you don't trust the
-people running
+If set,
.Nm sudo
-to have a sane
+will use this value in place of the user's
+.Ev PATH
+environment variable.
+This option can be used to reset the
.Ev PATH
-environment variable you may want to use this.
-Another use is if you want to have the
-.Dq root path
-be separate from the
-.Dq user path .
+to a known good value that contains directories for system administrator
+commands such as
+.Pa /usr/sbin .
+.Pp
Users in the group specified by the
.Em exempt_group
option are not affected by
@@ -4058,6 +4096,26 @@ is displayed when
is run by root with the
.Fl V
option.
+.Pp
+Preserving the
+.Ev HOME
+environment variable has security implications since many programs use it
+when searching for configuration or data files.
+Adding
+.Ev HOME
+to
+.Em env_keep
+may enable a user to run unrestricted commands via
+.Nm sudo
+and is strongly discouraged.
+Users wishing to edit files with
+.Nm sudo
+should run
+.Nm sudoedit
+(or
+.Nm sudo Fl e )