Troubleshooting tips and FAQ for Sudo
=====================================

Q) When I run configure, it says "C compiler cannot create executables".
A) This usually means you either don't have a working compiler.  This
   could be due to the lack of a license or that some component of the
   compiler suite could not be found.  Check config.log for clues as
   to why this is happening.  On many systems, compiler components live
   in /usr/ccs/bin which may not be in your PATH environment variable.

Q) Sudo compiles but when I run it I get "Sorry, sudo must be setuid root."
   and sudo quits.
A) Sudo must be setuid root to do its work.  You need to do something like
   `chmod 4111 /usr/local/bin/sudo'.  Also, the file system sudo resides
   on must *not* be mounted (or exported) with the nosuid option or sudo
   will not be able to work.  Another possibility is you may have '.' in
   your $PATH before the directory containing sudo.  If you are going
   to have '.' in your path you should make sure it is at the end.

Q) Sudo never gives me a chance to enter a password using PAM, it just
   says 'Sorry, try again.' three times and exits.
A) You didn't setup PAM to work with sudo.  On Redhat Linux or Fedora
   Core this generally means installing sample.pam as /etc/pam.d/sudo.
   See the sample.pam file for hints on what to use for other Linux
   systems.

Q) Sudo says 'Account expired or PAM config lacks an "account"
   section for sudo, contact your system administrator' and exits
   but I know my account has not expired.
A) Your PAM config lacks an "account" specification.  On Linux this
   usually means you are missing a line like:
	account    required    pam_unix.so
   in /etc/pam.d/sudo.

Q) Sudo is setup to log via syslog(3) but I'm not getting any log
   messages.
A) Make sure you have an entry in your syslog.conf file to save
   the sudo messages (see the sample.syslog.conf file).  The default
   log facility is authpriv (changeable via configure or in sudoers).
   Don't forget to send a SIGHUP to your syslogd so that it re-reads
   its conf file.  Also, remember that syslogd does *not* create
   log files, you need to create the file before syslogd will log
   to it (ie: touch /var/log/sudo).
   Note:  the facility (e.g. "auth.debug") must be separated from the 
	  destination (e.g. "/var/log/auth" or "@loghost") by
	  tabs, *not* spaces.  This is a common error.

Q) When sudo asks me for my password it never accepts what I enter even
   though I know I entered my password correctly.
A) If your system uses shadow passwords, it is possible that sudo
   didn't detect this.  Take a look at the generated config.h file
   and verify that the C function used for shadow password lookups
   was detected.  For instance, for SVR4-style shadow passwords,
   HAVE_GETSPNAM should be defined (you can search for the string
   "shadow passwords" in config.h with your editor).  Note that
   there is no define for 4.4BSD-based shadow passwords since that
   just uses the standard getpw* routines.

Q) I don't want the sudoers file in /etc, how can I specify where it
   should go?
A) Use the --sysconfdir option to configure.  Ie:
   configure --sysconfdir=/dir/you/want/sudoers/in

Q) Can I put the sudoers file in NIS/NIS+ or do I have to have a
   copy on each machine?
A) There is no support for making an NIS/NIS+ map/table out of
   the sudoers file at this time.  A good way to distribute the
   sudoers file is via rdist(1).  It is also possible to NFS-mount
   the sudoers file.

Q) I don't run sendmail on my machine.  Does this mean that I cannot
   use sudo?
A) No, you just need to run use the --without-sendmail argument to configure
   or add "!mailerpath" to the Defaults line in /etc/sudoers.

Q) When I run visudo it uses vi as the editor and I hate vi.  How
   can I make it use another editor?
A) Your best bet is to run configure with the --with-env-editor switch.
   This will make visudo use the editor specified by the user's
   EDITOR environment variable.  Alternately, you can run configure
   with the --with-editor=/path/to/another/editor.

Q) Sudo appears to be removing some variables from my environment, why?
A) Sudo removes the following "dangerous" environment variables
   to guard against shared library spoofing, shell voodoo, and
   kerberos server spoofing.
     IFS
     LOCALDOMAIN
     RES_OPTIONS
     HOSTALIASES
     NLSPATH
     PATH_LOCALE
     TERMINFO
     TERMINFO_DIRS
     TERMPATH
     TERMCAP
     ENV
     BASH_ENV
     LC_ (if it contains a '/' or '%')
     LANG (if it contains a '/' or '%')
     LANGUAGE (if it contains a '/' or '%')
     LD_*
     _RLD_*
     SHLIB_PATH (HP-UX only)
     LIBPATH (AIX only)
     KRB_CONF (kerb4 only)
     KRBCONFDIR (kerb4 only)
     KRBTKFILE (kerb4 only)
     KRB5_CONFIG (kerb5 only)
     VAR_ACE (SecurID only)
     USR_ACE (SecurID only)
     DLC_ACE (SecurID only)

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 'NOPASSWD'
   tag right before the command list in sudoers.  See the sudoers man page
   and sample.sudoers for details.  To disable passwords completely,
   run configure with the --without-passwd option or add "!authenticate"
   to the Defaults line in /etc/sudoers.  You can also turn off authentication
   on a per-user or per-host basis using a user or host-specific Defaults
   entry in sudoers.

Q) When I run configure, it dies with the following error:
   "no acceptable cc found in $PATH".
A) /usr/ucb/cc was the only C compiler that configure could find.
   You need to tell configure the path to the "real" C compiler
   via the --with-CC option.  On Solaris, the path is probably
   something like "/opt/SUNWspro/SC4.0/bin/cc".  If you have gcc
   that will also work.

Q) When I run configure, it dies with the following error:
   Fatal Error: config.cache exists from another platform!
   Please remove it and re-run configure.
A) configure caches the results of its tests in a file called
   config.cache to make re-running configure speedy.  However,
   if you are building sudo for a different platform the results
   in config.cache will be wrong so you need to remove config.cache.
   You can do this by "rm config.cache" or "make realclean".
   Note that "make realclean" will also remove any object files
   and configure temp files that are laying around as well.

Q) I built sudo on a Solaris >= 2.6 machine but the resulting binary
   doesn't work on Solaris <= 2.5.1.  Why?
A) Starting with Solaris 2.6, snprintf(3) is included in the standard
   C library.  To build a version of sudo on a >= 2.6 machine that
   will run on a <= 2.5.1 machine, edit config.h and comment out the lines:
	#define HAVE_SNPRINTF 1
	#define HAVE_VSNPRINTF 1
   and run make.

Q) When I run "visudo" it says "sudoers file busy, try again later."
   and doesn't do anything.
A) Someone else is currently editing the sudoers file with visudo.

Q) When I try to use "cd" with sudo it says "cd: command not found".
A) "cd" is a shell built-in command, you can't run it as a command
   since a child process (sudo) cannot affect the current working
   directory of the parent (your shell).

Q) When I try to use "cd" with sudo the command completes without
   errors but nothing happens.
A) Even though "cd" is a shell built-in command, some operating systems
   include a /usr/bin/cd command for some reason.  A standalone
   "cd" command is totally useless since a child process (cd) cannot
   affect the current working directory of the parent (your shell).
   Thus, "sudo cd /foo" will start a child process, change the
   directory and immediately exit without doing anything useful.

Q) When I run sudo it says I am not allowed to run the command as root
   but I don't want to run it as root, I want to run it as another user.
   My sudoers file entry looks like:
    bob	ALL=(oracle) ALL
A) The default user sudo tries to run things as is always root, even if
   the invoking user can only run commands as a single, specific user.
   This may change in the future but at the present time you have to
   work around this using the 'runas_default' option in sudoers.
   For example:
    Defaults:bob	runas_default=oracle
   would achieve the desired result ofr 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.

Q) How do you pronounce `sudo'?
A) The official pronunciation is soo-doo (for su "do").  However, an
   alternate pronunciation, a homophone of "pseudo", is also common.
