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