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