1 PRIVILEGES(5)         Standards, Environments, and Macros        PRIVILEGES(5)
   2 
   3 
   4 
   5 NAME
   6        privileges - process privilege model
   7 
   8 DESCRIPTION
   9        Solaris software implements a set of privileges that provide fine-
  10        grained control over the actions of processes. The possession of a
  11        certain privilege allows a process to perform a specific set of
  12        restricted operations.
  13 
  14 
  15        The change to a primarily privilege-based security model in the Solaris
  16        operating system gives developers an opportunity to restrict processes
  17        to those privileged operations actually needed instead of all (super-
  18        user) or no privileges (non-zero UIDs). Additionally, a set of
  19        previously unrestricted operations now requires a privilege; these
  20        privileges are dubbed the "basic" privileges.
  21 
  22 
  23        The "basic" privileges, and certain privileges representing concepts
  24        not traditionally present are, by default, given to all processes.
  25        These are the "default" set of privileges.
  26 
  27 
  28        Taken together, all defined privileges with the exception of the
  29        "default" privileges compose the set of privileges that are
  30        traditionally associated with the root user. The "basic" privileges are
  31        "privileges" unprivileged processes were accustomed to having, and the
  32        "default" privileges are the "basic" privileges plus additions that
  33        while unprivileged processes aren't accustomed to, they should now
  34        have.
  35 
  36 
  37        The defined privileges are:
  38 
  39        PRIV_CONTRACT_EVENT
  40 
  41            Allow a process to request reliable delivery of events to an event
  42            endpoint.
  43 
  44            Allow a process to include events in the critical event set term of
  45            a template which could be generated in volume by the user.
  46 
  47 
  48        PRIV_CONTRACT_IDENTITY
  49 
  50            Allows a process to set the service FMRI value of a process
  51            contract template.
  52 
  53 
  54        PRIV_CONTRACT_OBSERVER
  55 
  56            Allow a process to observe contract events generated by contracts
  57            created and owned by users other than the process's effective user
  58            ID.
  59 
  60            Allow a process to open contract event endpoints belonging to
  61            contracts created and owned by users other than the process's
  62            effective user ID.
  63 
  64 
  65        PRIV_CPC_CPU
  66 
  67            Allow a process to access per-CPU hardware performance counters.
  68 
  69 
  70        PRIV_DTRACE_KERNEL
  71 
  72            Allow DTrace kernel-level tracing.
  73 
  74 
  75        PRIV_DTRACE_PROC
  76 
  77            Allow DTrace process-level tracing. Allow process-level tracing
  78            probes to be placed and enabled in processes to which the user has
  79            permissions.
  80 
  81 
  82        PRIV_DTRACE_USER
  83 
  84            Allow DTrace user-level tracing. Allow use of the syscall and
  85            profile DTrace providers to examine processes to which the user has
  86            permissions.
  87 
  88 
  89        PRIV_FILE_CHOWN
  90 
  91            Allow a process to change a file's owner user ID. Allow a process
  92            to change a file's group ID to one other than the process's
  93            effective group ID or one of the process's supplemental group IDs.
  94 
  95 
  96        PRIV_FILE_CHOWN_SELF
  97 
  98            Allow a process to give away its files. A process with this
  99            privilege runs as if {_POSIX_CHOWN_RESTRICTED} is not in effect.
 100 
 101 
 102        PRIV_FILE_DAC_EXECUTE
 103 
 104            Allow a process to execute an executable file whose permission bits
 105            or ACL would otherwise disallow the process execute permission.
 106 
 107 
 108        PRIV_FILE_DAC_READ
 109 
 110            Allow a process to read a file or directory whose permission bits
 111            or ACL would otherwise disallow the process read permission.
 112 
 113 
 114        PRIV_FILE_DAC_SEARCH
 115 
 116            Allow a process to search a directory whose permission bits or ACL
 117            would not otherwise allow the process search permission.
 118 
 119 
 120        PRIV_FILE_DAC_WRITE
 121 
 122            Allow a process to write a file or directory whose permission bits
 123            or ACL do not allow the process write permission. All privileges
 124            are required to write files owned by UID 0 in the absence of an
 125            effective UID of 0.
 126 
 127 
 128        PRIV_FILE_DOWNGRADE_SL
 129 
 130            Allow a process to set the sensitivity label of a file or directory
 131            to a sensitivity label that does not dominate the existing
 132            sensitivity label.
 133 
 134            This privilege is interpreted only if the system is configured with
 135            Trusted Extensions.
 136 
 137 
 138        PRIV_FILE_FLAG_SET
 139 
 140            Allows a process to set immutable, nounlink or appendonly file
 141            attributes.
 142 
 143 
 144        PRIV_FILE_LINK_ANY
 145 
 146            Allow a process to create hardlinks to files owned by a UID
 147            different from the process's effective UID.
 148 
 149 
 150        PRIV_FILE_OWNER
 151 
 152            Allow a process that is not the owner of a file to modify that
 153            file's access and modification times. Allow a process that is not
 154            the owner of a directory to modify that directory's access and
 155            modification times. Allow a process that is not the owner of a file
 156            or directory to remove or rename a file or directory whose parent
 157            directory has the "save text image after execution" (sticky) bit
 158            set. Allow a process that is not the owner of a file to mount a
 159            namefs upon that file. Allow a process that is not the owner of a
 160            file or directory to modify that file's or directory's permission
 161            bits or ACL.
 162 
 163 
 164        PRIV_FILE_READ
 165 
 166            Allow a process to open objects in the filesystem for reading. This
 167            privilege is not necessary to read from an already open file which
 168            was opened before dropping the PRIV_FILE_READ privilege.
 169 
 170 
 171        PRIV_FILE_SETID
 172 
 173            Allow a process to change the ownership of a file or write to a
 174            file without the set-user-ID and set-group-ID bits being cleared.
 175            Allow a process to set the set-group-ID bit on a file or directory
 176            whose group is not the process's effective group or one of the
 177            process's supplemental groups. Allow a process to set the set-user-
 178            ID bit on a file with different ownership in the presence of
 179            PRIV_FILE_OWNER. Additional restrictions apply when creating or
 180            modifying a setuid 0 file.
 181 
 182 
 183        PRIV_FILE_UPGRADE_SL
 184 
 185            Allow a process to set the sensitivity label of a file or directory
 186            to a sensitivity label that dominates the existing sensitivity
 187            label.
 188 
 189            This privilege is interpreted only if the system is configured with
 190            Trusted Extensions.
 191 
 192 
 193        PRIV_FILE_WRITE
 194 
 195            Allow a process to open objects in the filesytem for writing, or
 196            otherwise modify them. This privilege is not necessary to write to
 197            an already open file which was opened before dropping the
 198            PRIV_FILE_WRITE privilege.
 199 
 200 
 201        PRIV_GRAPHICS_ACCESS
 202 
 203            Allow a process to make privileged ioctls to graphics devices.
 204            Typically only an xserver process needs to have this privilege. A
 205            process with this privilege is also allowed to perform privileged
 206            graphics device mappings.
 207 
 208 
 209        PRIV_GRAPHICS_MAP
 210 
 211            Allow a process to perform privileged mappings through a graphics
 212            device.
 213 
 214 
 215        PRIV_IPC_DAC_READ
 216 
 217            Allow a process to read a System V IPC Message Queue, Semaphore
 218            Set, or Shared Memory Segment whose permission bits would not
 219            otherwise allow the process read permission.
 220 
 221 
 222        PRIV_IPC_DAC_WRITE
 223 
 224            Allow a process to write a System V IPC Message Queue, Semaphore
 225            Set, or Shared Memory Segment whose permission bits would not
 226            otherwise allow the process write permission.
 227 
 228 
 229        PRIV_IPC_OWNER
 230 
 231            Allow a process that is not the owner of a System V IPC Message
 232            Queue, Semaphore Set, or Shared Memory Segment to remove, change
 233            ownership of, or change permission bits of the Message Queue,
 234            Semaphore Set, or Shared Memory Segment.
 235 
 236 
 237        PRIV_NET_ACCESS
 238 
 239            Allow a process to open a TCP, UDP, SDP, or SCTP network endpoint.
 240            This privilege is not necessary to communicate using an existing
 241            endpoint already opened before dropping the PRIV_NET_ACCESS
 242            privilege.
 243 
 244 
 245        PRIV_NET_BINDMLP
 246 
 247            Allow a process to bind to a port that is configured as a multi-
 248            level port (MLP) for the process's zone. This privilege applies to
 249            both shared address and zone-specific address MLPs. See
 250            tnzonecfg(4) from the Trusted Extensions manual pages for
 251            information on configuring MLP ports.
 252 
 253            This privilege is interpreted only if the system is configured with
 254            Trusted Extensions.
 255 
 256 
 257        PRIV_NET_ICMPACCESS
 258 
 259            Allow a process to send and receive ICMP packets.
 260 
 261 
 262        PRIV_NET_MAC_AWARE
 263 
 264            Allow a process to set the NET_MAC_AWARE process flag by using
 265            setpflags(2). This privilege also allows a process to set the
 266            SO_MAC_EXEMPT socket option by using setsockopt(3SOCKET). The
 267            NET_MAC_AWARE process flag and the SO_MAC_EXEMPT socket option both
 268            allow a local process to communicate with an unlabeled peer if the
 269            local process's label dominates the peer's default label, or if the
 270            local process runs in the global zone.
 271 
 272            This privilege is interpreted only if the system is configured with
 273            Trusted Extensions.
 274 
 275 
 276        PRIV_NET_MAC_IMPLICIT
 277 
 278            Allow a proces to set SO_MAC_IMPLICIT option by using
 279            setsockopt(3SOCKET).  This allows a privileged process to transmit
 280            implicitly-labeled packets to a peer.
 281 
 282            This privilege is interpreted only if the system is configured with
 283            Trusted Extensions.
 284 
 285 
 286        PRIV_NET_OBSERVABILITY
 287 
 288            Allow a process to open a device for just receiving network
 289            traffic, sending traffic is disallowed.
 290 
 291 
 292        PRIV_NET_PRIVADDR
 293 
 294            Allow a process to bind to a privileged port number. The privilege
 295            port numbers are 1-1023 (the traditional UNIX privileged ports) as
 296            well as those ports marked as "udp/tcp_extra_priv_ports" with the
 297            exception of the ports reserved for use by NFS and SMB.
 298 
 299 
 300        PRIV_NET_RAWACCESS
 301 
 302            Allow a process to have direct access to the network layer.
 303 
 304 
 305        PRIV_PROC_AUDIT
 306 
 307            Allow a process to generate audit records. Allow a process to get
 308            its own audit pre-selection information.
 309 
 310 
 311        PRIV_PROC_CHROOT
 312 
 313            Allow a process to change its root directory.
 314 
 315 
 316        PRIV_PROC_CLOCK_HIGHRES
 317 
 318            Allow a process to use high resolution timers.
 319 
 320 
 321        PRIV_PROC_EXEC
 322 
 323            Allow a process to call exec(2).
 324 
 325 
 326        PRIV_PROC_FORK
 327 
 328            Allow a process to call fork(2), fork1(2), or vfork(2).
 329 
 330 
 331        PRIV_PROC_INFO
 332 
 333            Allow a process to examine the status of processes other than those
 334            to which it can send signals. Processes that cannot be examined
 335            cannot be seen in /proc and appear not to exist.
 336 
 337 
 338        PRIV_PROC_LOCK_MEMORY
 339 
 340            Allow a process to lock pages in physical memory.
 341 
 342 
 343        PRIV_PROC_MEMINFO
 344 
 345            Allow a process to access physical memory information.
 346 
 347 
 348        PRIV_PROC_OWNER
 349 
 350            Allow a process to send signals to other processes and inspect and
 351            modify the process state in other processes, regardless of
 352            ownership. When modifying another process, additional restrictions
 353            apply: the effective privilege set of the attaching process must be
 354            a superset of the target process's effective, permitted, and
 355            inheritable sets; the limit set must be a superset of the target's
 356            limit set; if the target process has any UID set to 0 all privilege
 357            must be asserted unless the effective UID is 0. Allow a process to
 358            bind arbitrary processes to CPUs.
 359 
 360 
 361        PRIV_PROC_PRIOUP
 362 
 363            Allow a process to elevate its priority above its current level.
 364 
 365 
 366        PRIV_PROC_PRIOCNTL
 367 
 368            Allows all that PRIV_PROC_PRIOUP allows.  Allow a process to change
 369            its scheduling class to any scheduling class, including the RT
 370            class.
 371 
 372 
 373        PRIV_PROC_SESSION
 374 
 375            Allow a process to send signals or trace processes outside its
 376            session.
 377 
 378 
 379        PRIV_PROC_SETID
 380 
 381            Allow a process to set its UIDs at will, assuming UID 0 requires
 382            all privileges to be asserted.
 383 
 384 
 385        PRIV_PROC_TASKID
 386 
 387            Allow a process to assign a new task ID to the calling process.
 388 
 389 
 390        PRIV_PROC_ZONE
 391 
 392            Allow a process to trace or send signals to processes in other
 393            zones. See zones(5).
 394 
 395 
 396        PRIV_SYS_ACCT
 397 
 398            Allow a process to enable and disable and manage accounting through
 399            acct(2).
 400 
 401 
 402        PRIV_SYS_ADMIN
 403 
 404            Allow a process to perform system administration tasks such as
 405            setting node and domain name and specifying coreadm(1M) and
 406            nscd(1M) settings
 407 
 408 
 409        PRIV_SYS_AUDIT
 410 
 411            Allow a process to start the (kernel) audit daemon. Allow a process
 412            to view and set audit state (audit user ID, audit terminal ID,
 413            audit sessions ID, audit pre-selection mask). Allow a process to
 414            turn off and on auditing. Allow a process to configure the audit
 415            parameters (cache and queue sizes, event to class mappings, and
 416            policy options).
 417 
 418 
 419        PRIV_SYS_CONFIG
 420 
 421            Allow a process to perform various system configuration tasks.
 422            Allow filesystem-specific administrative procedures, such as
 423            filesystem configuration ioctls, quota calls, creation and deletion
 424            of snapshots, and manipulating the PCFS bootsector.
 425 
 426 
 427        PRIV_SYS_DEVICES
 428 
 429            Allow a process to create device special files. Allow a process to
 430            successfully call a kernel module that calls the kernel
 431            drv_priv(9F) function to check for allowed access. Allow a process
 432            to open the real console device directly.  Allow a process to open
 433            devices that have been exclusively opened.
 434 
 435 
 436        PRIV_SYS_DL_CONFIG
 437 
 438            Allow a process to configure a system's datalink interfaces.
 439 
 440 
 441        PRIV_SYS_IP_CONFIG
 442 
 443            Allow a process to configure a system's IP interfaces and routes.
 444            Allow a process to configure network parameters for TCP/IP using
 445            ndd. Allow a process access to otherwise restricted TCP/IP
 446            information using ndd. Allow a process to configure IPsec. Allow a
 447            process to pop anchored STREAMs modules with matching zoneid.
 448 
 449 
 450        PRIV_SYS_IPC_CONFIG
 451 
 452            Allow a process to increase the size of a System V IPC Message
 453            Queue buffer.
 454 
 455 
 456        PRIV_SYS_IPTUN_CONFIG
 457 
 458            Allow a process to configure IP tunnel links.
 459 
 460 
 461        PRIV_SYS_LINKDIR
 462 
 463            Allow a process to unlink and link directories.
 464 
 465 
 466        PRIV_SYS_MOUNT
 467 
 468            Allow a process to mount and unmount filesystems that would
 469            otherwise be restricted (that is, most filesystems except namefs).
 470            Allow a process to add and remove swap devices.
 471 
 472 
 473        PRIV_SYS_NET_CONFIG
 474 
 475            Allow a process to do all that PRIV_SYS_IP_CONFIG,
 476            PRIV_SYS_DL_CONFIG, and PRIV_SYS_PPP_CONFIG allow, plus the
 477            following: use the rpcmod STREAMS module and insert/remove STREAMS
 478            modules on locations other than the top of the module stack.
 479 
 480 
 481        PRIV_SYS_NFS
 482 
 483            Allow a process to provide NFS service: start NFS kernel threads,
 484            perform NFS locking operations, bind to NFS reserved ports: ports
 485            2049 (nfs) and port 4045 (lockd).
 486 
 487 
 488        PRIV_SYS_PPP_CONFIG
 489 
 490            Allow a process to create, configure, and destroy PPP instances
 491            with pppd(1M) pppd(1M) and control PPPoE plumbing with
 492            sppptun(1M)sppptun(1M).  This privilege is granted by default to
 493            exclusive IP stack instance zones.
 494 
 495 
 496        PRIV_SYS_RES_BIND
 497 
 498            Allows a process to bind processes to processor sets.
 499 
 500 
 501        PRIV_SYS_RES_CONFIG
 502 
 503            Allows all that PRIV_SYS_RES_BIND allows.  Allow a process to
 504            create and delete processor sets, assign CPUs to processor sets and
 505            override the PSET_NOESCAPE property. Allow a process to change the
 506            operational status of CPUs in the system using p_online(2). Allow a
 507            process to configure filesystem quotas. Allow a process to
 508            configure resource pools and bind processes to pools.
 509 
 510 
 511        PRIV_SYS_RESOURCE
 512 
 513            Allow a process to exceed the resource limits imposed on it by
 514            setrlimit(2) and setrctl(2).
 515 
 516 
 517        PRIV_SYS_SMB
 518 
 519            Allow a process to provide NetBIOS or SMB services: start SMB
 520            kernel threads or bind to NetBIOS or SMB reserved ports: ports 137,
 521            138, 139 (NetBIOS) and 445 (SMB).
 522 
 523 
 524        PRIV_SYS_SUSER_COMPAT
 525 
 526            Allow a process to successfully call a third party loadable module
 527            that calls the kernel suser() function to check for allowed access.
 528            This privilege exists only for third party loadable module
 529            compatibility and is not used by Solaris proper.
 530 
 531 
 532        PRIV_SYS_TIME
 533 
 534            Allow a process to manipulate system time using any of the
 535            appropriate system calls: stime(2), adjtime(2), and ntp_adjtime(2).
 536 
 537 
 538        PRIV_SYS_TRANS_LABEL
 539 
 540            Allow a process to translate labels that are not dominated by the
 541            process's sensitivity label to and from an external string form.
 542 
 543            This privilege is interpreted only if the system is configured with
 544            Trusted Extensions.
 545 
 546 
 547        PRIV_VIRT_MANAGE
 548 
 549            Allows a process to manage virtualized environments such as xVM(5).
 550 
 551 
 552        PRIV_WIN_COLORMAP
 553 
 554            Allow a process to override colormap restrictions.
 555 
 556            Allow a process to install or remove colormaps.
 557 
 558            Allow a process to retrieve colormap cell entries allocated by
 559            other processes.
 560 
 561            This privilege is interpreted only if the system is configured with
 562            Trusted Extensions.
 563 
 564 
 565        PRIV_WIN_CONFIG
 566 
 567            Allow a process to configure or destroy resources that are
 568            permanently retained by the X server.
 569 
 570            Allow a process to use SetScreenSaver to set the screen saver
 571            timeout value
 572 
 573            Allow a process to use ChangeHosts to modify the display access
 574            control list.
 575 
 576            Allow a process to use GrabServer.
 577 
 578            Allow a process to use the SetCloseDownMode request that can retain
 579            window, pixmap, colormap, property, cursor, font, or graphic
 580            context resources.
 581 
 582            This privilege is interpreted only if the system is configured with
 583            Trusted Extensions.
 584 
 585 
 586        PRIV_WIN_DAC_READ
 587 
 588            Allow a process to read from a window resource that it does not own
 589            (has a different user ID).
 590 
 591            This privilege is interpreted only if the system is configured with
 592            Trusted Extensions.
 593 
 594 
 595        PRIV_WIN_DAC_WRITE
 596 
 597            Allow a process to write to or create a window resource that it
 598            does not own (has a different user ID). A newly created window
 599            property is created with the window's user ID.
 600 
 601            This privilege is interpreted only if the system is configured with
 602            Trusted Extensions.
 603 
 604 
 605        PRIV_WIN_DEVICES
 606 
 607            Allow a process to perform operations on window input devices.
 608 
 609            Allow a process to get and set keyboard and pointer controls.
 610 
 611            Allow a process to modify pointer button and key mappings.
 612 
 613            This privilege is interpreted only if the system is configured with
 614            Trusted Extensions.
 615 
 616 
 617        PRIV_WIN_DGA
 618 
 619            Allow a process to use the direct graphics access (DGA) X protocol
 620            extensions.  Direct process access to the frame buffer is still
 621            required. Thus the process must have MAC and DAC privileges that
 622            allow access to the frame buffer, or the frame buffer must be
 623            allocated to the process.
 624 
 625            This privilege is interpreted only if the system is configured with
 626            Trusted Extensions.
 627 
 628 
 629        PRIV_WIN_DOWNGRADE_SL
 630 
 631            Allow a process to set the sensitivity label of a window resource
 632            to a sensitivity label that does not dominate the existing
 633            sensitivity label.
 634 
 635            This privilege is interpreted only if the system is configured with
 636            Trusted Extensions.
 637 
 638 
 639        PRIV_WIN_FONTPATH
 640 
 641            Allow a process to set a font path.
 642 
 643            This privilege is interpreted only if the system is configured with
 644            Trusted Extensions.
 645 
 646 
 647        PRIV_WIN_MAC_READ
 648 
 649            Allow a process to read from a window resource whose sensitivity
 650            label is not equal to the process sensitivity label.
 651 
 652            This privilege is interpreted only if the system is configured with
 653            Trusted Extensions.
 654 
 655 
 656        PRIV_WIN_MAC_WRITE
 657 
 658            Allow a process to create a window resource whose sensitivity label
 659            is not equal to the process sensitivity label. A newly created
 660            window property is created with the window's sensitivity label.
 661 
 662            This privilege is interpreted only if the system is configured with
 663            Trusted Extensions.
 664 
 665 
 666        PRIV_WIN_SELECTION
 667 
 668            Allow a process to request inter-window data moves without the
 669            intervention of the selection confirmer.
 670 
 671            This privilege is interpreted only if the system is configured with
 672            Trusted Extensions.
 673 
 674 
 675        PRIV_WIN_UPGRADE_SL
 676 
 677            Allow a process to set the sensitivity label of a window resource
 678            to a sensitivity label that dominates the existing sensitivity
 679            label.
 680 
 681            This privilege is interpreted only if the system is configured with
 682            Trusted Extensions.
 683 
 684 
 685        PRIV_XVM_CONTROL
 686 
 687            Allows a process access to the xVM(5) control devices for managing
 688            guest domains and the hypervisor. This privilege is used only if
 689            booted into xVM on x86 platforms.
 690 
 691 
 692 
 693        Of the privileges listed above, the privileges PRIV_FILE_LINK_ANY,
 694        PRIV_PROC_INFO, PRIV_PROC_SESSION, PRIV_PROC_FORK, PRIV_FILE_READ,
 695        PRIV_FILE_WRITE, PRIV_NET_ACCESS and PRIV_PROC_EXEC are considered
 696        "basic" privileges. These are privileges that used to be always
 697        available to unprivileged processes. By default, processes still have
 698        the basic privileges.
 699 
 700 
 701        The privileges PRIV_PROC_SETID and PRIV_PROC_AUDIT must be present in
 702        the Limit set (see below) of a process in order for set-uid root execs
 703        to be successful, that is, get an effective UID of 0 and additional
 704        privileges.
 705 
 706 
 707        The privilege implementation in Solaris extends the process credential
 708        with four privilege sets:
 709 
 710        I, the inheritable set
 711                                  The privileges inherited on exec.
 712 
 713 
 714        P, the permitted set
 715                                  The maximum set of privileges for the
 716                                  process.
 717 
 718 
 719        E, the effective set
 720                                  The privileges currently in effect.
 721 
 722 
 723        L, the limit set
 724                                  The upper bound of the privileges a process
 725                                  and its offspring can obtain.  Changes to L
 726                                  take effect on the next exec.
 727 
 728 
 729 
 730        The sets I, P and E are typically identical to the basic set of
 731        privileges for unprivileged processes. The limit set is typically the
 732        full set of privileges.
 733 
 734 
 735        Each process has a Privilege Awareness State (PAS) that can take the
 736        value PA (privilege-aware) and NPA (not-PA). PAS is a transitional
 737        mechanism that allows a choice between full compatibility with the old
 738        superuser model and completely ignoring the effective UID.
 739 
 740 
 741        To facilitate the discussion, we introduce the notion of "observed
 742        effective set" (oE) and "observed permitted set" (oP) and the
 743        implementation sets iE and iP.
 744 
 745 
 746        A process becomes privilege-aware either by manipulating the effective,
 747        permitted, or limit privilege sets through setppriv(2) or by using
 748        setpflags(2). In all cases, oE and oP are invariant in the process of
 749        becoming privilege-aware. In the process of becoming privilege-aware,
 750        the following assignments take place:
 751 
 752          iE = oE
 753          iP = oP
 754 
 755 
 756 
 757        When a process is privilege-aware, oE and oP are invariant under UID
 758        changes.  When a process is not privilege-aware, oE and oP are observed
 759        as follows:
 760 
 761          oE = euid == 0 ? L : iE
 762          oP = (euid == 0 || ruid == 0 || suid == 0) ? L : iP
 763 
 764 
 765 
 766        When a non-privilege-aware process has an effective UID of 0, it can
 767        exercise the privileges contained in its limit set, the upper bound of
 768        its privileges.  If a non-privilege-aware process has any of the UIDs
 769        0, it appears to be capable of potentially exercising all privileges in
 770        L.
 771 
 772 
 773        It is possible for a process to return to the non-privilege aware state
 774        using setpflags(). The kernel always attempts this on exec(2). This
 775        operation is permitted only if the following conditions are met:
 776 
 777            o      If any of the UIDs is equal to 0, P must be equal to L.
 778 
 779            o      If the effective UID is equal to 0, E must be equal to L.
 780 
 781 
 782        When a process gives up privilege awareness, the following assignments
 783        take place:
 784 
 785          if (euid == 0) iE = L & I
 786          if (any uid == 0) iP = L & I
 787 
 788 
 789 
 790        The privileges obtained when not having a UID of 0 are the inheritable
 791        set of the process restricted by the limit set.
 792 
 793 
 794        Only privileges in the process's (observed) effective privilege set
 795        allow the process to perform restricted operations. A process can use
 796        any of the privilege manipulation functions to add or remove privileges
 797        from the privilege sets. Privileges can be removed always. Only
 798        privileges found in the permitted set can be added to the effective and
 799        inheritable set. The limit set cannot grow. The inheritable set can be
 800        larger than the permitted set.
 801 
 802 
 803        When a process performs an exec(2), the kernel first tries to
 804        relinquish privilege awareness before making the following privilege
 805        set modifications:
 806 
 807          E' = P' = I' = L & I
 808          L is unchanged
 809 
 810 
 811 
 812        If a process has not manipulated its privileges, the privilege sets
 813        effectively remain the same, as E, P and I are already identical.
 814 
 815 
 816        The limit set is enforced at exec time.
 817 
 818 
 819        To run a non-privilege-aware application in a backward-compatible
 820        manner, a privilege-aware application should start the non-privilege-
 821        aware application with I=basic.
 822 
 823 
 824        For most privileges, absence of the privilege simply results in a
 825        failure. In some instances, the absense of a privilege can cause system
 826        calls to behave differently. In other instances, the removal of a
 827        privilege can force a set-uid application to seriously malfunction.
 828        Privileges of this type are considered "unsafe". When a process is
 829        lacking any of the unsafe privileges from its limit set, the system
 830        does not honor the set-uid bit of set-uid root applications.  The
 831        following unsafe privileges have been identified: proc_setid,
 832        sys_resource and proc_audit.
 833 
 834    Privilege Escalation
 835        In certain circumstances, a single privilege could lead to a process
 836        gaining one or more additional privileges that were not explicitly
 837        granted to that process. To prevent such an escalation of privileges,
 838        the security policy requires explicit permission for those additional
 839        privileges.
 840 
 841 
 842        Common examples of escalation are those mechanisms that allow
 843        modification of system resources through "raw'' interfaces; for
 844        example, changing kernel data structures through /dev/kmem or changing
 845        files through /dev/dsk/*.  Escalation also occurs when a process
 846        controls processes with more privileges than the controlling process. A
 847        special case of this is manipulating or creating objects owned by UID 0
 848        or trying to obtain UID 0 using setuid(2). The special treatment of UID
 849        0 is needed because the UID 0 owns all system configuration files and
 850        ordinary file protection mechanisms allow processes with UID 0 to
 851        modify the system configuration. With appropriate file modifications, a
 852        given process running with an effective UID of 0 can gain all
 853        privileges.
 854 
 855 
 856        In situations where a process might obtain UID 0, the security policy
 857        requires additional privileges, up to the full set of privileges. Such
 858        restrictions could be relaxed or removed at such time as additional
 859        mechanisms for protection of system files became available. There are
 860        no such mechanisms in the current Solaris release.
 861 
 862 
 863        The use of UID 0 processes should be limited as much as possible. They
 864        should be replaced with programs running under a different UID but with
 865        exactly the privileges they need.
 866 
 867 
 868        Daemons that never need to exec subprocesses should remove the
 869        PRIV_PROC_EXEC privilege from their permitted and limit sets.
 870 
 871    Assigned Privileges and Safeguards
 872        When privileges are assigned to a user, the system administrator could
 873        give that user more powers than intended. The administrator should
 874        consider whether safeguards are needed. For example, if the
 875        PRIV_PROC_LOCK_MEMORY privilege is given to a user, the administrator
 876        should consider setting the project.max-locked-memory resource control
 877        as well, to prevent that user from locking all memory.
 878 
 879    Privilege Debugging
 880        When a system call fails with a permission error, it is not always
 881        immediately obvious what caused the problem. To debug such a problem,
 882        you can use a tool called privilege debugging. When privilege debugging
 883        is enabled for a process, the kernel reports missing privileges on the
 884        controlling terminal of the process. (Enable debugging for a process
 885        with the -D option of ppriv(1).) Additionally, the administrator can
 886        enable system-wide privilege debugging by setting the system(4)
 887        variable priv_debug using:
 888 
 889          set priv_debug = 1
 890 
 891 
 892 
 893        On a running system, you can use mdb(1) to change this variable.
 894 
 895    Privilege Administration
 896        The Solaris Management Console (see smc(1M)) is the preferred method of
 897        modifying privileges for a command. Use usermod(1M) or smrole(1M) to
 898        assign privileges to or modify privileges for, respectively, a user or
 899        a role. Use ppriv(1) to enumerate the privileges supported on a system
 900        and truss(1) to determine which privileges a program requires.
 901 
 902 SEE ALSO
 903        mdb(1), ppriv(1), add_drv(1M), ifconfig(1M), lockd(1M), nfsd(1M),
 904        pppd(1M), rem_drv(1M), smbd(1M), sppptun(1M), update_drv(1M), Intro(2),
 905        access(2), acct(2), acl(2), adjtime(2), audit(2), auditon(2), chmod(2),
 906        chown(2), chroot(2), creat(2), exec(2), fcntl(2), fork(2),
 907        fpathconf(2), getacct(2), getpflags(2), getppriv(2), getsid(2),
 908        kill(2), link(2), memcntl(2), mknod(2), mount(2), msgctl(2), nice(2),
 909        ntp_adjtime(2), open(2), p_online(2), priocntl(2), priocntlset(2),
 910        processor_bind(2), pset_bind(2), pset_create(2), readlink(2),
 911        resolvepath(2), rmdir(2), semctl(2), setauid(2), setegid(2),
 912        seteuid(2), setgid(2), setgroups(2), setpflags(2), setppriv(2),
 913        setrctl(2), setregid(2), setreuid(2), setrlimit(2), settaskid(2),
 914        setuid(2), shmctl(2), shmget(2), shmop(2), sigsend(2), stat(2),
 915        statvfs(2), stime(2), swapctl(2), sysinfo(2), uadmin(2), ulimit(2),
 916        umount(2), unlink(2), utime(2), utimes(2), bind(3SOCKET),
 917        door_ucred(3C), priv_addset(3C), priv_set(3C), priv_getbyname(3C),
 918        priv_getbynum(3C), priv_set_to_str(3C), priv_str_to_set(3C),
 919        socket(3SOCKET), t_bind(3NSL), timer_create(3C), ucred_get(3C),
 920        exec_attr(4), proc(4), system(4), user_attr(4), xVM(5), ddi_cred(9F),
 921        drv_priv(9F), priv_getbyname(9F), priv_policy(9F),
 922        priv_policy_choice(9F), priv_policy_only(9F)
 923 
 924 
 925        System Administration Guide: Security Services
 926 
 927 
 928 
 929                                October 30, 2015                  PRIVILEGES(5)