Annotation of embedaddon/sudo/doc/sudo.mdoc.in, revision 1.1
1.1 ! misho 1: .\"
! 2: .\" Copyright (c) 1994-1996, 1998-2005, 2007-2012
! 3: .\" Todd C. Miller <Todd.Miller@courtesan.com>
! 4: .\"
! 5: .\" Permission to use, copy, modify, and distribute this software for any
! 6: .\" purpose with or without fee is hereby granted, provided that the above
! 7: .\" copyright notice and this permission notice appear in all copies.
! 8: .\"
! 9: .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
! 10: .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 11: .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
! 12: .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 13: .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
! 14: .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
! 15: .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
! 16: .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
! 17: .\"
! 18: .\" Sponsored in part by the Defense Advanced Research Projects
! 19: .\" Agency (DARPA) and Air Force Research Laboratory, Air Force
! 20: .\" Materiel Command, USAF, under agreement number F39502-99-1-0512.
! 21: .\"
! 22: .Dd July 10, 2012
! 23: .Dt SUDO @mansectsu@
! 24: .Os Sudo @PACKAGE_VERSION@
! 25: .Sh NAME
! 26: .Nm sudo ,
! 27: .Nm sudoedit
! 28: .Nd execute a command as another user
! 29: .Sh SYNOPSIS
! 30: .Nm sudo
! 31: .Fl h No | Fl K No | Fl k No | Fl V
! 32: .Nm sudo
! 33: .Fl v
! 34: .Op Fl AknS
! 35: .Bk -words
! 36: .Op Fl a Ar auth_type
! 37: .Ek
! 38: .Bk -words
! 39: .Op Fl g Ar group name No | Ar #gid
! 40: .Ek
! 41: .Bk -words
! 42: .Op Fl p Ar prompt
! 43: .Ek
! 44: .Bk -words
! 45: .Op Fl u Ar user name No | Ar #uid
! 46: .Ek
! 47: .Nm sudo
! 48: .Fl l Ns Op Ar l
! 49: .Op Fl AknS
! 50: .Bk -words
! 51: .Op Fl a Ar auth_type
! 52: .Ek
! 53: .Bk -words
! 54: .Op Fl g Ar group name No | Ar #gid
! 55: .Ek
! 56: .Bk -words
! 57: .Op Fl p Ar prompt
! 58: .Ek
! 59: .Bk -words
! 60: .Op Fl U Ar user name
! 61: .Ek
! 62: .Bk -words
! 63: .Op Fl u Ar user name No | Ar #uid
! 64: .Ek
! 65: .Op Ar command
! 66: .Nm sudo
! 67: .Op Fl AbEHnPS
! 68: .Bk -words
! 69: .Op Fl a Ar auth_type
! 70: .Ek
! 71: .Bk -words
! 72: .Op Fl C Ar fd
! 73: .Ek
! 74: .Bk -words
! 75: .Op Fl c Ar class No | Ar -
! 76: .Ek
! 77: .Bk -words
! 78: .Op Fl g Ar group name No | Ar #gid
! 79: .Ek
! 80: .Bk -words
! 81: .Op Fl p Ar prompt
! 82: .Ek
! 83: .Bk -words
! 84: .Op Fl r Ar role
! 85: .Ek
! 86: .Bk -words
! 87: .Op Fl t Ar type
! 88: .Ek
! 89: .Bk -words
! 90: .Op Fl u Ar user name No | Ar #uid
! 91: .Ek
! 92: .Bk -words
! 93: .Op Sy VAR Ns = Ns Ar value
! 94: .Ek
! 95: .Bk -words
! 96: .Fl i No | Fl s
! 97: .Ek
! 98: .Op Ar command
! 99: .Nm sudoedit
! 100: .Op Fl AnS
! 101: .Bk -words
! 102: .Op Fl a Ar auth_type
! 103: .Ek
! 104: .Bk -words
! 105: .Op Fl C Ar fd
! 106: .Ek
! 107: .Bk -words
! 108: .Op Fl c Ar class No | Ar -
! 109: .Ek
! 110: .Bk -words
! 111: .Op Fl g Ar group name No | Ar #gid
! 112: .Ek
! 113: .Bk -words
! 114: .Op Fl p Ar prompt
! 115: .Ek
! 116: .Bk -words
! 117: .Op Fl u Ar user name No | Ar #uid
! 118: .Ek
! 119: .Bk -words
! 120: file ...
! 121: .Ek
! 122: .Sh DESCRIPTION
! 123: .Nm sudo
! 124: allows a permitted user to execute a
! 125: .Ar command
! 126: as the superuser or another user, as specified by the security
! 127: policy.
! 128: .Pp
! 129: .Nm sudo
! 130: supports a plugin architecture for security policies and input/output
! 131: logging.
! 132: Third parties can develop and distribute their own policy and I/O
! 133: logging plugins to work seamlessly with the
! 134: .Nm sudo
! 135: front end.
! 136: The default security policy is
! 137: .Em sudoers ,
! 138: which is configured via the file
! 139: .Pa @sysconfdir@/sudoers ,
! 140: or via LDAP.
! 141: See the
! 142: .Sx PLUGINS
! 143: section for more information.
! 144: .Pp
! 145: The security policy determines what privileges, if any, a user has
! 146: to run
! 147: .Nm sudo .
! 148: The policy may require that users authenticate themselves with a
! 149: password or another authentication mechanism.
! 150: If authentication is required,
! 151: .Nm sudo
! 152: will exit if the user's password is not entered within a configurable
! 153: time limit.
! 154: This limit is policy-specific; the default password prompt timeout
! 155: for the
! 156: .Em sudoers
! 157: security policy is
! 158: .Li @password_timeout@
! 159: minutes.
! 160: .Pp
! 161: Security policies may support credential caching to allow the user
! 162: to run
! 163: .Nm sudo
! 164: again for a period of time without requiring authentication.
! 165: The
! 166: .Em sudoers
! 167: policy caches credentials for
! 168: .Li @timeout@
! 169: minutes, unless overridden in
! 170: .Xr sudoers @mansectform@ .
! 171: By running
! 172: .Nm sudo
! 173: with the
! 174: .Fl v
! 175: option, a user can update the cached credentials without running a
! 176: .Ar command .
! 177: .Pp
! 178: When invoked as
! 179: .Nm sudoedit ,
! 180: the
! 181: .Fl e
! 182: option (described below), is implied.
! 183: .Pp
! 184: Security policies may log successful and failed attempts to use
! 185: .Nm sudo .
! 186: If an I/O plugin is configured, the running command's input and
! 187: output may be logged as well.
! 188: .Pp
! 189: The options are as follows:
! 190: .Bl -tag -width Fl
! 191: .It Fl A
! 192: Normally, if
! 193: .Nm sudo
! 194: requires a password, it will read it from the user's terminal.
! 195: If the
! 196: .Fl A No ( Em askpass Ns No )
! 197: option is specified, a (possibly graphical) helper program is
! 198: executed to read the user's password and output the password to the
! 199: standard output.
! 200: If the
! 201: .Ev SUDO_ASKPASS
! 202: environment variable is set, it specifies the path to the helper
! 203: program.
! 204: Otherwise, if
! 205: .Pa @sysconfdir@/sudo.conf
! 206: contains a line specifying the askpass program, that value will be
! 207: used.
! 208: For example:
! 209: .Bd -literal -offset 4n
! 210: # Path to askpass helper program
! 211: Path askpass /usr/X11R6/bin/ssh-askpass
! 212: .Ed
! 213: .Pp
! 214: If no askpass program is available,
! 215: .Nm sudo
! 216: will exit with an error.
! 217: .It Fl a Ar type
! 218: The
! 219: .Fl a No ( Em "authentication type" Ns No )
! 220: option causes
! 221: .Nm sudo
! 222: to use the specified authentication type when validating the user,
! 223: as allowed by
! 224: .Pa /etc/login.conf .
! 225: The system administrator may specify a list of sudo-specific
! 226: authentication methods by adding an
! 227: .Dq auth-sudo
! 228: entry in
! 229: .Pa /etc/login.conf .
! 230: This option is only available on systems that support BSD authentication.
! 231: .It Fl b
! 232: The
! 233: .Fl b No ( Em background Ns No )
! 234: option tells
! 235: .Nm sudo
! 236: to run the given command in the background.
! 237: Note that if you use the
! 238: .Fl b
! 239: option you cannot use shell job control to manipulate the process.
! 240: Most interactive commands will fail to work properly in background
! 241: mode.
! 242: .It Fl C Ar fd
! 243: Normally,
! 244: .Nm sudo
! 245: will close all open file descriptors other than standard input,
! 246: standard output and standard error.
! 247: The
! 248: .Fl C No ( Em close from Ns No )
! 249: option allows the user to specify a starting point above the standard
! 250: error (file descriptor three).
! 251: Values less than three are not permitted.
! 252: The security policy may restrict the user's ability to use the
! 253: .Fl C
! 254: option.
! 255: The
! 256: .Em sudoers
! 257: policy only permits use of the
! 258: .Fl C
! 259: option when the administrator has enabled the
! 260: .Em closefrom_override
! 261: option.
! 262: .It Fl c Ar class
! 263: The
! 264: .Fl c No ( Em class Ns No )
! 265: option causes
! 266: .Nm sudo
! 267: to run the specified command with resources limited by the specified
! 268: login class.
! 269: The
! 270: .Em class
! 271: argument can be either a class name as defined in
! 272: .Pa /etc/login.conf ,
! 273: or a single
! 274: .Ql \-
! 275: character.
! 276: Specifying a
! 277: .Ar class
! 278: of
! 279: .Li -
! 280: indicates that the command should be run restricted by the default
! 281: login capabilities for the user the command is run as.
! 282: If the
! 283: .Ar class
! 284: argument specifies an existing user class, the command must be run
! 285: as root, or the
! 286: .Nm sudo
! 287: command must be run from a shell that is already root.
! 288: This option is only available on systems with BSD login classes.
! 289: .It Fl E
! 290: The
! 291: .Fl E No ( Em preserve environment Ns No )
! 292: option indicates to the security policy that the user wishes to
! 293: preserve their existing environment variables.
! 294: The security policy may return an error if the
! 295: .Fl E
! 296: option is specified and the user does not have permission to preserve
! 297: the environment.
! 298: .It Fl e
! 299: The
! 300: .Fl e No ( Em edit Ns No )
! 301: option indicates that, instead of running a command, the user wishes
! 302: to edit one or more files.
! 303: In lieu of a command, the string "sudoedit" is used when consulting
! 304: the security policy.
! 305: If the user is authorized by the policy, the following steps are
! 306: taken:
! 307: .Bl -enum -offset 4
! 308: .It
! 309: Temporary copies are made of the files to be edited with the owner
! 310: set to the invoking user.
! 311: .It
! 312: The editor specified by the policy is run to edit the temporary
! 313: files.
! 314: The
! 315: .Em sudoers
! 316: policy uses the
! 317: .Ev SUDO_EDITOR ,
! 318: .Ev VISUAL
! 319: and
! 320: .Ev EDITOR
! 321: environment variables (in that order).
! 322: If none of
! 323: .Ev SUDO_EDITOR ,
! 324: .Ev VISUAL
! 325: or
! 326: .Ev EDITOR
! 327: are set, the first program listed in the
! 328: .Em editor
! 329: .Xr sudoers @mansectform@
! 330: option is used.
! 331: .It
! 332: If they have been modified, the temporary files are copied back to
! 333: their original location and the temporary versions are removed.
! 334: .El
! 335: .Pp
! 336: If the specified file does not exist, it will be created.
! 337: Note that unlike most commands run by
! 338: .Em sudo ,
! 339: the editor is run with the invoking user's environment unmodified.
! 340: If, for some reason,
! 341: .Nm sudo
! 342: is unable to update a file with its edited version, the user will
! 343: receive a warning and the edited copy will remain in a temporary
! 344: file.
! 345: .It Fl g Ar group
! 346: Normally,
! 347: .Nm sudo
! 348: runs a command with the primary group set to the one specified by
! 349: the password database for the user the command is being run as (by
! 350: default, root).
! 351: The
! 352: .Fl g No ( Em group Ns No )
! 353: option causes
! 354: .Nm sudo
! 355: to run the command with the primary group set to
! 356: .Ar group
! 357: instead.
! 358: To specify a
! 359: .Em gid
! 360: instead of a
! 361: .Em "group name" ,
! 362: use
! 363: .Em #gid .
! 364: When running commands as a
! 365: .Em gid ,
! 366: many shells require that the
! 367: .Ql #
! 368: be escaped with a backslash
! 369: .Pq Ql \e .
! 370: If no
! 371: .Fl u
! 372: option is specified, the command will be run as the invoking user
! 373: (not root).
! 374: In either case, the primary group will be set to
! 375: .Em group .
! 376: .It Fl H
! 377: The
! 378: .Fl H No ( Em HOME Ns No )
! 379: option requests that the security policy set the
! 380: .Ev HOME
! 381: environment variable to the home directory of the target user (root
! 382: by default) as specified by the password database.
! 383: Depending on the policy, this may be the default behavior.
! 384: .It Fl h
! 385: The
! 386: .Fl h No ( Em help Ns No )
! 387: option causes
! 388: .Nm sudo
! 389: to print a short help message to the standard output and exit.
! 390: .It Fl i Op Ar command
! 391: The
! 392: .Fl i No ( Em simulate initial login Ns No )
! 393: option runs the shell specified by the password database entry of
! 394: the target user as a login shell.
! 395: This means that login-specific resource files such as
! 396: .Pa .profile
! 397: or
! 398: .Pa .login
! 399: will be read by the shell.
! 400: If a command is specified, it is passed to the shell for execution
! 401: via the shell's
! 402: .Fl c
! 403: option.
! 404: If no command is specified, an interactive shell is executed.
! 405: .Nm sudo
! 406: attempts to change to that user's home directory before running the
! 407: shell.
! 408: The security policy shall initialize the environment to a minimal
! 409: set of variables, similar to what is present when a user logs in.
! 410: The
! 411: .Em Command Environment
! 412: section in the
! 413: .Xr sudoers @mansectform@
! 414: manual documents how the
! 415: .Fl i
! 416: option affects the environment in which a command is run when the
! 417: .Em sudoers
! 418: policy is in use.
! 419: .It Fl K
! 420: The
! 421: .Fl K No ( sure Em kill Ns No )
! 422: option is like
! 423: .Fl k
! 424: except that it removes the user's cached credentials entirely and
! 425: may not be used in conjunction with a command or other option.
! 426: This option does not require a password.
! 427: Not all security policies support credential caching.
! 428: .It Fl k Op Ar command
! 429: When used alone, the
! 430: .Fl k No ( Em kill Ns No )
! 431: option to
! 432: .Nm sudo
! 433: invalidates the user's cached credentials.
! 434: The next time
! 435: .Nm sudo
! 436: is run a password will be required.
! 437: This option does not require a password and was added to allow a
! 438: user to revoke
! 439: .Nm sudo
! 440: permissions from a
! 441: .Pa .logout
! 442: file.
! 443: Not all security policies support credential caching.
! 444: .Pp
! 445: When used in conjunction with a command or an option that may require
! 446: a password, the
! 447: .Fl k
! 448: option will cause
! 449: .Nm sudo
! 450: to ignore the user's cached credentials.
! 451: As a result,
! 452: .Nm sudo
! 453: will prompt for a password (if one is required by the security
! 454: policy) and will not update the user's cached credentials.
! 455: .It Fl l Ns Oo Sy l Oc Op Ar command
! 456: If no
! 457: .Ar command
! 458: is specified, the
! 459: .Fl l No ( Em list Ns No )
! 460: option will list the allowed (and forbidden) commands for the
! 461: invoking user (or the user specified by the
! 462: .Fl U
! 463: option) on the current host.
! 464: If a
! 465: .Ar command
! 466: is specified and is permitted by the security policy, the fully-qualified
! 467: path to the command is displayed along with any command line
! 468: arguments.
! 469: If
! 470: .Ar command
! 471: is specified but not allowed,
! 472: .Nm sudo
! 473: will exit with a status value of 1.
! 474: If the
! 475: .Fl l
! 476: option is specified with an
! 477: .Ar l
! 478: argument
! 479: .Pq i.e.\& Fl ll ,
! 480: or if
! 481: .Fl l
! 482: is specified multiple times, a longer list format is used.
! 483: .It Fl n
! 484: The
! 485: .Fl n No ( Em non-interactive Ns No )
! 486: option prevents
! 487: .Nm sudo
! 488: from prompting the user for a password.
! 489: If a password is required for the command to run,
! 490: .Nm sudo
! 491: will display an error message and exit.
! 492: .It Fl P
! 493: The
! 494: .Fl P No ( Em preserve group vector Ns No )
! 495: option causes
! 496: .Nm sudo
! 497: to preserve the invoking user's group vector unaltered.
! 498: By default, the
! 499: .Em sudoers
! 500: policy will initialize the group vector to the list of groups the
! 501: target user is in.
! 502: The real and effective group IDs, however, are still set to match
! 503: the target user.
! 504: .It Fl p Ar prompt
! 505: The
! 506: .Fl p No ( Em prompt Ns No )
! 507: option allows you to override the default password prompt and use
! 508: a custom one.
! 509: The following percent
! 510: .Pq Ql %
! 511: escapes are supported by the
! 512: .Em sudoers
! 513: policy:
! 514: .Bl -tag -width 2n
! 515: .It Li %H
! 516: expanded to the host name including the domain name (on if the
! 517: machine's host name is fully qualified or the
! 518: .Em fqdn
! 519: option is set in
! 520: .Xr sudoers @mansectform@ )
! 521: .It Li %h
! 522: expanded to the local host name without the domain name
! 523: .It Li %p
! 524: expanded to the name of the user whose password is being requested
! 525: (respects the
! 526: .Em rootpw ,
! 527: .Em targetpw ,
! 528: and
! 529: .Em runaspw
! 530: flags in
! 531: .Xr sudoers @mansectform@ )
! 532: .It Li \&%U
! 533: expanded to the login name of the user the command will be run as
! 534: (defaults to root unless the
! 535: .Fl u
! 536: option is also specified)
! 537: .It Li %u
! 538: expanded to the invoking user's login name
! 539: .It Li %%
! 540: two consecutive
! 541: .Ql %
! 542: characters are collapsed into a single
! 543: .Ql %
! 544: character
! 545: .El
! 546: .Pp
! 547: The prompt specified by the
! 548: .Fl p
! 549: option will override the system password prompt on systems that
! 550: support PAM unless the
! 551: .Em passprompt_override
! 552: flag is disabled in
! 553: .Em sudoers .
! 554: .It Fl r Ar role
! 555: The
! 556: .Fl r No ( Em role Ns No )
! 557: option causes the new (SELinux) security context to have the role
! 558: specified by
! 559: .Ar role .
! 560: .It Fl S
! 561: The
! 562: .Fl S ( Em stdin Ns No )
! 563: option causes
! 564: .Nm sudo
! 565: to read the password from the standard input instead of the terminal
! 566: device.
! 567: The password must be followed by a newline character.
! 568: .It Fl s Op Ar command
! 569: The
! 570: .Fl s ( Em shell Ns No )
! 571: option runs the shell specified by the
! 572: .Ev SHELL
! 573: environment variable if it is set or the shell as specified in the
! 574: password database.
! 575: If a command is specified, it is passed to the shell for execution
! 576: via the shell's
! 577: .Fl c
! 578: option.
! 579: If no command is specified, an interactive shell is executed.
! 580: .It Fl t Ar type
! 581: The
! 582: .Fl t ( Em type Ns No )
! 583: option causes the new (SELinux) security context to have the type
! 584: specified by
! 585: .Ar type .
! 586: If no type is specified, the default type is derived from the
! 587: specified role.
! 588: .It Fl U Ar user
! 589: The
! 590: .Fl U ( Em other user Ns No )
! 591: option is used in conjunction with the
! 592: .Fl l
! 593: option to specify the user whose privileges should be listed.
! 594: The security policy may restrict listing other users' privileges.
! 595: The
! 596: .Em sudoers
! 597: policy only allows root or a user with the
! 598: .Li ALL
! 599: privilege on the current host to use this option.
! 600: .It Fl u Ar user
! 601: The
! 602: .Fl u ( Em user Ns No )
! 603: option causes
! 604: .Nm sudo
! 605: to run the specified command as a user other than
! 606: .Em root .
! 607: To specify a
! 608: .Em uid
! 609: instead of a
! 610: .Em user name ,
! 611: .Em #uid .
! 612: When running commands as a
! 613: .Em uid ,
! 614: many shells require that the
! 615: .Ql #
! 616: be escaped with a backslash
! 617: .Pq Ql \e .
! 618: Security policies may restrict
! 619: .Em uid Ns No s
! 620: to those listed in the password database.
! 621: The
! 622: .Em sudoers
! 623: policy allows
! 624: .Em uid Ns No s
! 625: that are not in the password database as long as the
! 626: .Em targetpw
! 627: option is not set.
! 628: Other security policies may not support this.
! 629: .It Fl V
! 630: The
! 631: .Fl V ( Em version Ns No )
! 632: option causes
! 633: .Nm sudo
! 634: to print its version string and the version string of the security
! 635: policy plugin and any I/O plugins.
! 636: If the invoking user is already root the
! 637: .Fl V
! 638: option will display the arguments passed to configure when
! 639: .Nm sudo
! 640: was built and plugins may display more verbose information such as
! 641: default options.
! 642: .It Fl v
! 643: When given the
! 644: .Fl v ( Em validate Ns No )
! 645: option,
! 646: .Nm sudo
! 647: will update the user's cached credentials, authenticating the user's
! 648: password if necessary.
! 649: For the
! 650: .Em sudoers
! 651: plugin, this extends the
! 652: .Nm sudo
! 653: timeout for another
! 654: .Li @timeout@
! 655: minutes (or whatever the timeout is set to by the security policy)
! 656: but does not run a command.
! 657: Not all security policies support cached credentials.
! 658: .It Fl -
! 659: The
! 660: .Fl -
! 661: option indicates that
! 662: .Nm sudo
! 663: should stop processing command line arguments.
! 664: .El
! 665: .Pp
! 666: Environment variables to be set for the command may also be passed
! 667: on the command line in the form of
! 668: .Sy VAR Ns No = Ns Em value ,
! 669: e.g.\&
! 670: .Sy LD_LIBRARY_PATH Ns No = Ns Em /usr/local/pkg/lib .
! 671: Variables passed on the command line are subject to the same
! 672: restrictions as normal environment variables with one important
! 673: exception.
! 674: If the
! 675: .Em setenv
! 676: option is set in
! 677: .Em sudoers ,
! 678: the command to be run has the
! 679: .Li SETENV
! 680: tag set or the command matched is
! 681: .Li ALL ,
! 682: the user may set variables that would otherwise be forbidden.
! 683: See
! 684: .Xr sudoers @mansectform@
! 685: for more information.
! 686: .Sh COMMAND EXECUTION
! 687: When
! 688: .Nm sudo
! 689: executes a command, the security policy specifies the execution
! 690: envionment for the command.
! 691: Typically, the real and effective uid and gid are set to
! 692: match those of the target user, as specified in the password database,
! 693: and the group vector is initialized based on the group database
! 694: (unless the
! 695: .Fl P
! 696: option was specified).
! 697: .Pp
! 698: The following parameters may be specified by security policy:
! 699: .Bl -bullet
! 700: .It
! 701: real and effective user ID
! 702: .It
! 703: real and effective group ID
! 704: .It
! 705: supplementary group IDs
! 706: .It
! 707: the environment list
! 708: .It
! 709: current working directory
! 710: .It
! 711: file creation mode mask (umask)
! 712: .It
! 713: SELinux role and type
! 714: .It
! 715: Solaris project
! 716: .It
! 717: Solaris privileges
! 718: .It
! 719: BSD login class
! 720: .It
! 721: scheduling priority (aka nice value)
! 722: .El
! 723: .Ss Process model
! 724: When
! 725: .Nm sudo
! 726: runs a command, it calls
! 727: .Xr fork 2 ,
! 728: sets up the execution environment as described above, and calls the
! 729: .Xr execve
! 730: system call in the child process.
! 731: The main
! 732: .Nm sudo
! 733: process waits until the command has completed, then passes the
! 734: command's exit status to the security policy's close method and exits.
! 735: If an I/O logging plugin is configured, a new pseudo-terminal
! 736: .Pq Dq pty
! 737: is created and a second
! 738: .Nm sudo
! 739: process is used to relay job control signals between the user's
! 740: existing pty and the new pty the command is being run in.
! 741: This extra process makes it possible to, for example, suspend
! 742: and resume the command.
! 743: Without it, the command would be in what POSIX terms an
! 744: .Dq orphaned process group
! 745: and it would not receive any job control signals.
! 746: .Ss Signal handling
! 747: Because the command is run as a child of the
! 748: .Nm sudo
! 749: process,
! 750: .Nm sudo
! 751: will relay signals it receives to the command.
! 752: Unless the command is being run in a new pty, the
! 753: .Dv SIGHUP ,
! 754: .Dv SIGINT
! 755: and
! 756: .Dv SIGQUIT
! 757: signals are not relayed unless they are sent by a user process,
! 758: not the kernel.
! 759: Otherwise, the command would receive
! 760: .Dv SIGINT
! 761: twice every time the user entered control-C.
! 762: Some signals, such as
! 763: .Dv SIGSTOP
! 764: and
! 765: .Dv SIGKILL ,
! 766: cannot be caught and thus will not be relayed to the command.
! 767: As a general rule,
! 768: .Dv SIGTSTP
! 769: should be used instead of
! 770: .Dv SIGSTOP
! 771: when you wish to suspend a command being run by
! 772: .Nm sudo .
! 773: .Pp
! 774: As a special case,
! 775: .Nm sudo
! 776: will not relay signals that were sent by the command it is running.
! 777: This prevents the command from accidentally killing itself.
! 778: On some systems, the
! 779: .Xr reboot @mansectsu@
! 780: command sends
! 781: .Dv SIGTERM
! 782: to all non-system processes other than itself before rebooting
! 783: the systyem.
! 784: This prevents
! 785: .Nm sudo
! 786: from relaying the
! 787: .Dv SIGTERM
! 788: signal it received back to
! 789: .Xr reboot @mansectsu@ ,
! 790: which might then exit before the system was actually rebooted,
! 791: leaving it in a half-dead state similar to single user mode.
! 792: Note, however, that this check only applies to the command run by
! 793: .Nm sudo
! 794: and not any other processes that the command may create.
! 795: As a result, running a script that calls
! 796: .Xr reboot @mansectsu@
! 797: or
! 798: .Xr shutdown @mansectsu@
! 799: via
! 800: .Nm sudo
! 801: may cause the system to end up in this undefined state unless the
! 802: .Xr reboot @mansectsu@
! 803: or
! 804: .Xr shutdown @mansectsu@
! 805: are run using the
! 806: .Fn exec
! 807: family of functions instead of
! 808: .Fn system
! 809: (which interposes a shell between the command and the calling process).
! 810: .Sh PLUGINS
! 811: Plugins are dynamically loaded based on the contents of the
! 812: .Pa @sysconfdir@/sudo.conf
! 813: file.
! 814: If no
! 815: .Pa @sysconfdir@/sudo.conf
! 816: file is present, or it contains no
! 817: .Li Plugin
! 818: lines,
! 819: .Nm sudo
! 820: will use the traditional
! 821: .Em sudoers
! 822: security policy and I/O logging, which corresponds to the following
! 823: .Pa @sysconfdir@/sudo.conf
! 824: file.
! 825: .Bd -literal
! 826: #
! 827: # Default @sysconfdir@/sudo.conf file
! 828: #
! 829: # Format:
! 830: # Plugin plugin_name plugin_path plugin_options ...
! 831: # Path askpass /path/to/askpass
! 832: # Path noexec /path/to/sudo_noexec.so
! 833: # Debug sudo /var/log/sudo_debug all@warn
! 834: # Set disable_coredump true
! 835: #
! 836: # The plugin_path is relative to @prefix@/libexec unless
! 837: # fully qualified.
! 838: # The plugin_name corresponds to a global symbol in the plugin
! 839: # that contains the plugin interface structure.
! 840: # The plugin_options are optional.
! 841: #
! 842: Plugin policy_plugin sudoers.so
! 843: Plugin io_plugin sudoers.so
! 844: .Ed
! 845: .Pp
! 846: A
! 847: .Li Plugin
! 848: line consists of the
! 849: .Li Plugin
! 850: keyword, followed by the
! 851: .Em symbol_name
! 852: and the
! 853: .Em path
! 854: to the shared object containing the plugin.
! 855: The
! 856: .Em symbol_name
! 857: is the name of the
! 858: .Li struct policy_plugin
! 859: or
! 860: .Li struct io_plugin
! 861: in the plugin shared object.
! 862: The
! 863: .Em path
! 864: may be fully qualified or relative.
! 865: If not fully qualified it is relative to the
! 866: .Pa @prefix@/libexec
! 867: directory.
! 868: Any additional parameters after the
! 869: .Em path
! 870: are passed as arguments to the plugin's
! 871: .Em open
! 872: function.
! 873: Lines that don't begin with
! 874: .Li Plugin ,
! 875: .Li Path ,
! 876: .Li Debug ,
! 877: or
! 878: .Li Set
! 879: are silently ignored.
! 880: .Pp
! 881: For more information, see the
! 882: .Xr sudo_plugin @mansectsu@
! 883: manual.
! 884: .Sh PATHS
! 885: A
! 886: .Li Path
! 887: line consists of the
! 888: .Li Path
! 889: keyword, followed by the name of the path to set and its value.
! 890: E.g.
! 891: .Bd -literal -offset indent
! 892: Path noexec @noexec_file@
! 893: Path askpass /usr/X11R6/bin/ssh-askpass
! 894: .Ed
! 895: .Pp
! 896: The following plugin-agnostic paths may be set in the
! 897: .Pa @sysconfdir@/sudo.conf
! 898: file:
! 899: .Bl -tag -width 8n
! 900: .It askpass
! 901: The fully qualified path to a helper program used to read the user's
! 902: password when no terminal is available.
! 903: This may be the case when
! 904: .Nm sudo
! 905: is executed from a graphical (as opposed to text-based) application.
! 906: The program specified by
! 907: .Em askpass
! 908: should display the argument passed to it as the prompt and write
! 909: the user's password to the standard output.
! 910: The value of
! 911: .Em askpass
! 912: may be overridden by the
! 913: .Ev SUDO_ASKPASS
! 914: environment variable.
! 915: .It noexec
! 916: The fully-qualified path to a shared library containing dummy
! 917: versions of the
! 918: .Fn execv ,
! 919: .Fn execve
! 920: and
! 921: .Fn fexecve
! 922: library functions that just return an error.
! 923: This is used to implement the
! 924: .Em noexec
! 925: functionality on systems that support
! 926: .Ev LD_PRELOAD
! 927: or its equivalent.
! 928: Defaults to
! 929: .Pa @noexec_file@ .
! 930: .El
! 931: .Sh DEBUG FLAGS
! 932: .Nm sudo
! 933: versions 1.8.4 and higher support a flexible debugging framework
! 934: that can help track down what
! 935: .Nm sudo
! 936: is doing internally if there is a problem.
! 937: .Pp
! 938: A
! 939: .Li Debug
! 940: line consists of the
! 941: .Li Debug
! 942: keyword, followed by the name of the program to debug
! 943: .Pq Nm sudo , Nm visudo , Nm sudoreplay ,
! 944: the debug file name and a comma-separated list of debug flags.
! 945: The debug flag syntax used by
! 946: .Nm sudo
! 947: and the
! 948: .Em sudoers
! 949: plugin is
! 950: .Em subsystem Ns No @ Ns Em priority
! 951: but the plugin is free to use a different format so long as it does
! 952: not include a comma
! 953: .Pq Ql \&, .
! 954: .Pp
! 955: For instance:
! 956: .Bd -literal -offset indent
! 957: Debug sudo /var/log/sudo_debug all@warn,plugin@info
! 958: .Ed
! 959: .Pp
! 960: would log all debugging statements at the
! 961: .Em warn
! 962: level and higher in addition to those at the
! 963: .Em info
! 964: level for the plugin subsystem.
! 965: .Pp
! 966: Currently, only one
! 967: .Li Debug
! 968: entry per program is supported.
! 969: The
! 970: .Nm sudo
! 971: .Li Debug
! 972: entry is shared by the
! 973: .Nm sudo
! 974: front end,
! 975: .Nm sudoedit
! 976: and the plugins.
! 977: A future release may add support for per-plugin
! 978: .Li Debug
! 979: lines and/or support for multiple debugging files for a single
! 980: program.
! 981: .Pp
! 982: The priorities used by the
! 983: .Nm sudo
! 984: front end, in order of decreasing severity, are:
! 985: .Em crit , err , warn , notice , diag , info , trace
! 986: and
! 987: .Em debug .
! 988: Each priority, when specified, also includes all priorities higher
! 989: than it.
! 990: For example, a priority of
! 991: .Em notice
! 992: would include debug messages logged at
! 993: .Em notice
! 994: and higher.
! 995: .Pp
! 996: The following subsystems are used by the
! 997: .Nm sudo
! 998: front-end:
! 999: .Bl -tag -width Fl
! 1000: .It Em all
! 1001: matches every subsystem
! 1002: .It Em args
! 1003: command line argument processing
! 1004: .It Em conv
! 1005: user conversation
! 1006: .It Em edit
! 1007: sudoedit
! 1008: .It Em exec
! 1009: command execution
! 1010: .It Em main
! 1011: .Nm sudo
! 1012: main function
! 1013: .It Em netif
! 1014: network interface handling
! 1015: .It Em pcomm
! 1016: communication with the plugin
! 1017: .It Em plugin
! 1018: plugin configuration
! 1019: .It Em pty
! 1020: pseudo-tty related code
! 1021: .It Em selinux
! 1022: SELinux-specific handling
! 1023: .It Em util
! 1024: utility functions
! 1025: .It Em utmp
! 1026: utmp handling
! 1027: .El
! 1028: .Sh EXIT VALUE
! 1029: Upon successful execution of a program, the exit status from
! 1030: .Em sudo
! 1031: will simply be the exit status of the program that was executed.
! 1032: .Pp
! 1033: Otherwise,
! 1034: .Nm sudo
! 1035: exits with a value of 1 if there is a configuration/permission
! 1036: problem or if
! 1037: .Nm sudo
! 1038: cannot execute the given command.
! 1039: In the latter case the error string is printed to the standard error.
! 1040: If
! 1041: .Nm sudo
! 1042: cannot
! 1043: .Xr stat 2
! 1044: one or more entries in the user's
! 1045: .Ev PATH ,
! 1046: an error is printed on stderr.
! 1047: (If the directory does not exist or if it is not really a directory,
! 1048: the entry is ignored and no error is printed.)
! 1049: This should not happen under normal circumstances.
! 1050: The most common reason for
! 1051: .Xr stat 2
! 1052: to return
! 1053: .Dq permission denied
! 1054: is if you are running an automounter and one of the directories in
! 1055: your
! 1056: .Ev PATH
! 1057: is on a machine that is currently unreachable.
! 1058: .Sh SECURITY NOTES
! 1059: .Nm sudo
! 1060: tries to be safe when executing external commands.
! 1061: .Pp
! 1062: To prevent command spoofing,
! 1063: .Nm sudo
! 1064: checks "." and "" (both denoting current directory) last when
! 1065: searching for a command in the user's
! 1066: .Ev PATH
! 1067: (if one or both are in the
! 1068: .Ev PATH ) .
! 1069: Note, however, that the actual
! 1070: .Ev PATH
! 1071: environment variable is
! 1072: .Em not
! 1073: modified and is passed unchanged to the program that
! 1074: .Nm sudo
! 1075: executes.
! 1076: .Pp
! 1077: Please note that
! 1078: .Nm sudo
! 1079: will normally only log the command it explicitly runs.
! 1080: If a user runs a command such as
! 1081: .Li sudo su
! 1082: or
! 1083: .Li sudo sh ,
! 1084: subsequent commands run from that shell are not subject to
! 1085: .Nm sudo Ns No 's
! 1086: security policy.
! 1087: The same is true for commands that offer shell escapes (including
! 1088: most editors).
! 1089: If I/O logging is enabled, subsequent commands will have their input and/or
! 1090: output logged, but there will not be traditional logs for those commands.
! 1091: Because of this, care must be taken when giving users access to commands via
! 1092: .Nm sudo
! 1093: to verify that the command does not inadvertently give the user an
! 1094: effective root shell.
! 1095: For more information, please see the
! 1096: .Em PREVENTING SHELL ESCAPES
! 1097: section in
! 1098: .Xr sudoers @mansectform@ .
! 1099: .Pp
! 1100: To prevent the disclosure of potentially sensitive information,
! 1101: .Nm sudo
! 1102: disables core dumps by default while it is executing (they are
! 1103: re-enabled for the command that is run).
! 1104: To aid in debugging
! 1105: .Nm sudo
! 1106: crashes, you may wish to re-enable core dumps by setting
! 1107: .Dq disable_coredump
! 1108: to false in the
! 1109: .Pa @sysconfdir@/sudo.conf
! 1110: file as follows:
! 1111: .Bd -literal -offset indent
! 1112: Set disable_coredump false
! 1113: .Ed
! 1114: .Pp
! 1115: Note that by default, most operating systems disable core dumps
! 1116: from setuid programs, which includes
! 1117: .Nm sudo .
! 1118: To actually get a
! 1119: .Nm sudo
! 1120: core file you may need to enable core dumps for setuid processes.
! 1121: On BSD and Linux systems this is accomplished via the sysctl command,
! 1122: on Solaris the coreadm command can be used.
! 1123: .Sh ENVIRONMENT
! 1124: .Nm sudo
! 1125: utilizes the following environment variables.
! 1126: The security policy has control over the actual content of the command's
! 1127: environment.
! 1128: .Bl -tag -width 15n
! 1129: .It Ev EDITOR
! 1130: Default editor to use in
! 1131: .Fl e
! 1132: (sudoedit) mode if neither
! 1133: .Ev SUDO_EDITOR
! 1134: nor
! 1135: .Ev VISUAL
! 1136: is set.
! 1137: .It Ev MAIL
! 1138: In
! 1139: .Fl i
! 1140: mode or when
! 1141: .Em env_reset
! 1142: is enabled in
! 1143: .Em sudoers ,
! 1144: set to the mail spool of the target user.
! 1145: .It Ev HOME
! 1146: Set to the home directory of the target user if
! 1147: .Fl i
! 1148: or
! 1149: .Fl H
! 1150: are specified,
! 1151: .Em env_reset
! 1152: or
! 1153: .Em always_set_home
! 1154: are set in
! 1155: .Em sudoers ,
! 1156: or when the
! 1157: .Fl s
! 1158: option is specified and
! 1159: .Em set_home
! 1160: is set in
! 1161: .Em sudoers .
! 1162: .It Ev PATH
! 1163: May be overridden by the security policy.
! 1164: .It Ev SHELL
! 1165: Used to determine shell to run with
! 1166: .Fl s
! 1167: option.
! 1168: .It Ev SUDO_ASKPASS
! 1169: Specifies the path to a helper program used to read the password
! 1170: if no terminal is available or if the
! 1171: .Fl A
! 1172: option is specified.
! 1173: .It Ev SUDO_COMMAND
! 1174: Set to the command run by sudo.
! 1175: .It Ev SUDO_EDITOR
! 1176: Default editor to use in
! 1177: .Fl e
! 1178: (sudoedit) mode.
! 1179: .It Ev SUDO_GID
! 1180: Set to the group ID of the user who invoked sudo.
! 1181: .It Ev SUDO_PROMPT
! 1182: Used as the default password prompt.
! 1183: .It Ev SUDO_PS1
! 1184: If set,
! 1185: .Ev PS1
! 1186: will be set to its value for the program being run.
! 1187: .It Ev SUDO_UID
! 1188: Set to the user ID of the user who invoked sudo.
! 1189: .It Ev SUDO_USER
! 1190: Set to the login name of the user who invoked sudo.
! 1191: .It Ev USER
! 1192: Set to the target user (root unless the
! 1193: .Fl u
! 1194: option is specified).
! 1195: .It Ev VISUAL
! 1196: Default editor to use in
! 1197: .Fl e
! 1198: (sudoedit) mode if
! 1199: .Ev SUDO_EDITOR
! 1200: is not set.
! 1201: .El
! 1202: .Sh FILES
! 1203: .Bl -tag -width 24n
! 1204: .It Pa @sysconfdir@/sudo.conf
! 1205: .Nm sudo
! 1206: front end configuration
! 1207: .El
! 1208: .Sh EXAMPLES
! 1209: Note: the following examples assume a properly configured security
! 1210: policy.
! 1211: .Pp
! 1212: To get a file listing of an unreadable directory:
! 1213: .Bd -literal -offset indent
! 1214: $ sudo ls /usr/local/protected
! 1215: .Ed
! 1216: .Pp
! 1217: To list the home directory of user yaz on a machine where the file
! 1218: system holding ~yaz is not exported as root:
! 1219: .Bd -literal -offset indent
! 1220: $ sudo -u yaz ls ~yaz
! 1221: .Ed
! 1222: .Pp
! 1223: To edit the
! 1224: .Pa index.html
! 1225: file as user www:
! 1226: .Bd -literal -offset indent
! 1227: $ sudo -u www vi ~www/htdocs/index.html
! 1228: .Ed
! 1229: .Pp
! 1230: To view system logs only accessible to root and users in the adm
! 1231: group:
! 1232: .Bd -literal -offset indent
! 1233: $ sudo -g adm view /var/log/syslog
! 1234: .Ed
! 1235: .Pp
! 1236: To run an editor as jim with a different primary group:
! 1237: .Bd -literal -offset indent
! 1238: $ sudo -u jim -g audio vi ~jim/sound.txt
! 1239: .Ed
! 1240: .Pp
! 1241: To shut down a machine:
! 1242: .Bd -literal -offset indent
! 1243: $ sudo shutdown -r +15 "quick reboot"
! 1244: .Ed
! 1245: .Pp
! 1246: To make a usage listing of the directories in the /home partition.
! 1247: Note that this runs the commands in a sub-shell to make the
! 1248: .Li cd
! 1249: and file redirection work.
! 1250: .Bd -literal -offset indent
! 1251: $ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"
! 1252: .Ed
! 1253: .Sh SEE ALSO
! 1254: .Xr grep 1 ,
! 1255: .Xr su 1 ,
! 1256: .Xr stat 2 ,
! 1257: .Xr login_cap 3 ,
! 1258: .Xr passwd @mansectform@ ,
! 1259: .Xr sudoers @mansectform@ ,
! 1260: .Xr sudo_plugin @mansectsu@ ,
! 1261: .Xr sudoreplay @mansectsu@ ,
! 1262: .Xr visudo @mansectsu@
! 1263: .Sh HISTORY
! 1264: See the HISTORY file in the
! 1265: .Nm sudo
! 1266: distribution (http://www.sudo.ws/sudo/history.html) for a brief
! 1267: history of sudo.
! 1268: .Sh AUTHORS
! 1269: Many people have worked on
! 1270: .Nm sudo
! 1271: over the years; this version consists of code written primarily by:
! 1272: .Bd -ragged -offset indent
! 1273: Todd C. Miller
! 1274: .Ed
! 1275: .Pp
! 1276: See the CONTRIBUTORS file in the
! 1277: .Nm sudo
! 1278: distribution (http://www.sudo.ws/sudo/contributors.html) for an
! 1279: exhaustive list of people who have contributed to
! 1280: .Nm sudo .
! 1281: .Sh CAVEATS
! 1282: There is no easy way to prevent a user from gaining a root shell
! 1283: if that user is allowed to run arbitrary commands via
! 1284: .Nm sudo .
! 1285: Also, many programs (such as editors) allow the user to run commands
! 1286: via shell escapes, thus avoiding
! 1287: .Nm sudo Ns No 's
! 1288: checks.
! 1289: However, on most systems it is possible to prevent shell escapes with the
! 1290: .Xr sudoers @mansectform@
! 1291: plugin's
! 1292: .Em noexec
! 1293: functionality.
! 1294: .Pp
! 1295: It is not meaningful to run the
! 1296: .Li cd
! 1297: command directly via sudo, e.g.,
! 1298: .Bd -literal -offset indent
! 1299: $ sudo cd /usr/local/protected
! 1300: .Ed
! 1301: .Pp
! 1302: since when the command exits the parent process (your shell) will
! 1303: still be the same.
! 1304: Please see the
! 1305: .Sx EXAMPLES
! 1306: section for more information.
! 1307: .Pp
! 1308: Running shell scripts via
! 1309: .Nm sudo
! 1310: can expose the same kernel bugs that make setuid shell scripts
! 1311: unsafe on some operating systems (if your OS has a /dev/fd/ directory,
! 1312: setuid shell scripts are generally safe).
! 1313: .Sh BUGS
! 1314: If you feel you have found a bug in
! 1315: .Nm sudo ,
! 1316: please submit a bug report at http://www.sudo.ws/sudo/bugs/
! 1317: .Sh SUPPORT
! 1318: Limited free support is available via the sudo-users mailing list,
! 1319: see http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or
! 1320: search the archives.
! 1321: .Sh DISCLAIMER
! 1322: .Nm sudo
! 1323: is provided
! 1324: .Dq AS IS
! 1325: and any express or implied warranties, including, but not limited
! 1326: to, the implied warranties of merchantability and fitness for a
! 1327: particular purpose are disclaimed.
! 1328: See the LICENSE file distributed with
! 1329: .Nm sudo
! 1330: or http://www.sudo.ws/sudo/license.html for complete details.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>