162306a36Sopenharmony_ci.. _perf_security: 262306a36Sopenharmony_ci 362306a36Sopenharmony_ciPerf events and tool security 462306a36Sopenharmony_ci============================= 562306a36Sopenharmony_ci 662306a36Sopenharmony_ciOverview 762306a36Sopenharmony_ci-------- 862306a36Sopenharmony_ci 962306a36Sopenharmony_ciUsage of Performance Counters for Linux (perf_events) [1]_ , [2]_ , [3]_ 1062306a36Sopenharmony_cican impose a considerable risk of leaking sensitive data accessed by 1162306a36Sopenharmony_cimonitored processes. The data leakage is possible both in scenarios of 1262306a36Sopenharmony_cidirect usage of perf_events system call API [2]_ and over data files 1362306a36Sopenharmony_cigenerated by Perf tool user mode utility (Perf) [3]_ , [4]_ . The risk 1462306a36Sopenharmony_cidepends on the nature of data that perf_events performance monitoring 1562306a36Sopenharmony_ciunits (PMU) [2]_ and Perf collect and expose for performance analysis. 1662306a36Sopenharmony_ciCollected system and performance data may be split into several 1762306a36Sopenharmony_cicategories: 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci1. System hardware and software configuration data, for example: a CPU 2062306a36Sopenharmony_ci model and its cache configuration, an amount of available memory and 2162306a36Sopenharmony_ci its topology, used kernel and Perf versions, performance monitoring 2262306a36Sopenharmony_ci setup including experiment time, events configuration, Perf command 2362306a36Sopenharmony_ci line parameters, etc. 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci2. User and kernel module paths and their load addresses with sizes, 2662306a36Sopenharmony_ci process and thread names with their PIDs and TIDs, timestamps for 2762306a36Sopenharmony_ci captured hardware and software events. 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci3. Content of kernel software counters (e.g., for context switches, page 3062306a36Sopenharmony_ci faults, CPU migrations), architectural hardware performance counters 3162306a36Sopenharmony_ci (PMC) [8]_ and machine specific registers (MSR) [9]_ that provide 3262306a36Sopenharmony_ci execution metrics for various monitored parts of the system (e.g., 3362306a36Sopenharmony_ci memory controller (IMC), interconnect (QPI/UPI) or peripheral (PCIe) 3462306a36Sopenharmony_ci uncore counters) without direct attribution to any execution context 3562306a36Sopenharmony_ci state. 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci4. Content of architectural execution context registers (e.g., RIP, RSP, 3862306a36Sopenharmony_ci RBP on x86_64), process user and kernel space memory addresses and 3962306a36Sopenharmony_ci data, content of various architectural MSRs that capture data from 4062306a36Sopenharmony_ci this category. 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ciData that belong to the fourth category can potentially contain 4362306a36Sopenharmony_cisensitive process data. If PMUs in some monitoring modes capture values 4462306a36Sopenharmony_ciof execution context registers or data from process memory then access 4562306a36Sopenharmony_cito such monitoring modes requires to be ordered and secured properly. 4662306a36Sopenharmony_ciSo, perf_events performance monitoring and observability operations are 4762306a36Sopenharmony_cithe subject for security access control management [5]_ . 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ciperf_events access control 5062306a36Sopenharmony_ci------------------------------- 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ciTo perform security checks, the Linux implementation splits processes 5362306a36Sopenharmony_ciinto two categories [6]_ : a) privileged processes (whose effective user 5462306a36Sopenharmony_ciID is 0, referred to as superuser or root), and b) unprivileged 5562306a36Sopenharmony_ciprocesses (whose effective UID is nonzero). Privileged processes bypass 5662306a36Sopenharmony_ciall kernel security permission checks so perf_events performance 5762306a36Sopenharmony_cimonitoring is fully available to privileged processes without access, 5862306a36Sopenharmony_ciscope and resource restrictions. 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ciUnprivileged processes are subject to a full security permission check 6162306a36Sopenharmony_cibased on the process's credentials [5]_ (usually: effective UID, 6262306a36Sopenharmony_cieffective GID, and supplementary group list). 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ciLinux divides the privileges traditionally associated with superuser 6562306a36Sopenharmony_ciinto distinct units, known as capabilities [6]_ , which can be 6662306a36Sopenharmony_ciindependently enabled and disabled on per-thread basis for processes and 6762306a36Sopenharmony_cifiles of unprivileged users. 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ciUnprivileged processes with enabled CAP_PERFMON capability are treated 7062306a36Sopenharmony_cias privileged processes with respect to perf_events performance 7162306a36Sopenharmony_cimonitoring and observability operations, thus, bypass *scope* permissions 7262306a36Sopenharmony_cichecks in the kernel. CAP_PERFMON implements the principle of least 7362306a36Sopenharmony_ciprivilege [13]_ (POSIX 1003.1e: 2.2.2.39) for performance monitoring and 7462306a36Sopenharmony_ciobservability operations in the kernel and provides a secure approach to 7562306a36Sopenharmony_ciperformance monitoring and observability in the system. 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ciFor backward compatibility reasons the access to perf_events monitoring and 7862306a36Sopenharmony_ciobservability operations is also open for CAP_SYS_ADMIN privileged 7962306a36Sopenharmony_ciprocesses but CAP_SYS_ADMIN usage for secure monitoring and observability 8062306a36Sopenharmony_ciuse cases is discouraged with respect to the CAP_PERFMON capability. 8162306a36Sopenharmony_ciIf system audit records [14]_ for a process using perf_events system call 8262306a36Sopenharmony_ciAPI contain denial records of acquiring both CAP_PERFMON and CAP_SYS_ADMIN 8362306a36Sopenharmony_cicapabilities then providing the process with CAP_PERFMON capability singly 8462306a36Sopenharmony_ciis recommended as the preferred secure approach to resolve double access 8562306a36Sopenharmony_cidenial logging related to usage of performance monitoring and observability. 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ciPrior Linux v5.9 unprivileged processes using perf_events system call 8862306a36Sopenharmony_ciare also subject for PTRACE_MODE_READ_REALCREDS ptrace access mode check 8962306a36Sopenharmony_ci[7]_ , whose outcome determines whether monitoring is permitted. 9062306a36Sopenharmony_ciSo unprivileged processes provided with CAP_SYS_PTRACE capability are 9162306a36Sopenharmony_cieffectively permitted to pass the check. Starting from Linux v5.9 9262306a36Sopenharmony_ciCAP_SYS_PTRACE capability is not required and CAP_PERFMON is enough to 9362306a36Sopenharmony_cibe provided for processes to make performance monitoring and observability 9462306a36Sopenharmony_cioperations. 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ciOther capabilities being granted to unprivileged processes can 9762306a36Sopenharmony_cieffectively enable capturing of additional data required for later 9862306a36Sopenharmony_ciperformance analysis of monitored processes or a system. For example, 9962306a36Sopenharmony_ciCAP_SYSLOG capability permits reading kernel space memory addresses from 10062306a36Sopenharmony_ci/proc/kallsyms file. 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ciPrivileged Perf users groups 10362306a36Sopenharmony_ci--------------------------------- 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ciMechanisms of capabilities, privileged capability-dumb files [6]_, 10662306a36Sopenharmony_cifile system ACLs [10]_ and sudo [15]_ utility can be used to create 10762306a36Sopenharmony_cidedicated groups of privileged Perf users who are permitted to execute 10862306a36Sopenharmony_ciperformance monitoring and observability without limits. The following 10962306a36Sopenharmony_cisteps can be taken to create such groups of privileged Perf users. 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci1. Create perf_users group of privileged Perf users, assign perf_users 11262306a36Sopenharmony_ci group to Perf tool executable and limit access to the executable for 11362306a36Sopenharmony_ci other users in the system who are not in the perf_users group: 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ci:: 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci # groupadd perf_users 11862306a36Sopenharmony_ci # ls -alhF 11962306a36Sopenharmony_ci -rwxr-xr-x 2 root root 11M Oct 19 15:12 perf 12062306a36Sopenharmony_ci # chgrp perf_users perf 12162306a36Sopenharmony_ci # ls -alhF 12262306a36Sopenharmony_ci -rwxr-xr-x 2 root perf_users 11M Oct 19 15:12 perf 12362306a36Sopenharmony_ci # chmod o-rwx perf 12462306a36Sopenharmony_ci # ls -alhF 12562306a36Sopenharmony_ci -rwxr-x--- 2 root perf_users 11M Oct 19 15:12 perf 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ci2. Assign the required capabilities to the Perf tool executable file and 12862306a36Sopenharmony_ci enable members of perf_users group with monitoring and observability 12962306a36Sopenharmony_ci privileges [6]_ : 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_ci:: 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ci # setcap "cap_perfmon,cap_sys_ptrace,cap_syslog=ep" perf 13462306a36Sopenharmony_ci # setcap -v "cap_perfmon,cap_sys_ptrace,cap_syslog=ep" perf 13562306a36Sopenharmony_ci perf: OK 13662306a36Sopenharmony_ci # getcap perf 13762306a36Sopenharmony_ci perf = cap_sys_ptrace,cap_syslog,cap_perfmon+ep 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ciIf the libcap [16]_ installed doesn't yet support "cap_perfmon", use "38" instead, 14062306a36Sopenharmony_cii.e.: 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_ci:: 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci # setcap "38,cap_ipc_lock,cap_sys_ptrace,cap_syslog=ep" perf 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ciNote that you may need to have 'cap_ipc_lock' in the mix for tools such as 14762306a36Sopenharmony_ci'perf top', alternatively use 'perf top -m N', to reduce the memory that 14862306a36Sopenharmony_ciit uses for the perf ring buffer, see the memory allocation section below. 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_ciUsing a libcap without support for CAP_PERFMON will make cap_get_flag(caps, 38, 15162306a36Sopenharmony_ciCAP_EFFECTIVE, &val) fail, which will lead the default event to be 'cycles:u', 15262306a36Sopenharmony_ciso as a workaround explicitly ask for the 'cycles' event, i.e.: 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_ci:: 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci # perf top -e cycles 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ciTo get kernel and user samples with a perf binary with just CAP_PERFMON. 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ciAs a result, members of perf_users group are capable of conducting 16162306a36Sopenharmony_ciperformance monitoring and observability by using functionality of the 16262306a36Sopenharmony_ciconfigured Perf tool executable that, when executes, passes perf_events 16362306a36Sopenharmony_cisubsystem scope checks. 16462306a36Sopenharmony_ci 16562306a36Sopenharmony_ciIn case Perf tool executable can't be assigned required capabilities (e.g. 16662306a36Sopenharmony_cifile system is mounted with nosuid option or extended attributes are 16762306a36Sopenharmony_cinot supported by the file system) then creation of the capabilities 16862306a36Sopenharmony_ciprivileged environment, naturally shell, is possible. The shell provides 16962306a36Sopenharmony_ciinherent processes with CAP_PERFMON and other required capabilities so that 17062306a36Sopenharmony_ciperformance monitoring and observability operations are available in the 17162306a36Sopenharmony_cienvironment without limits. Access to the environment can be open via sudo 17262306a36Sopenharmony_ciutility for members of perf_users group only. In order to create such 17362306a36Sopenharmony_cienvironment: 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_ci1. Create shell script that uses capsh utility [16]_ to assign CAP_PERFMON 17662306a36Sopenharmony_ci and other required capabilities into ambient capability set of the shell 17762306a36Sopenharmony_ci process, lock the process security bits after enabling SECBIT_NO_SETUID_FIXUP, 17862306a36Sopenharmony_ci SECBIT_NOROOT and SECBIT_NO_CAP_AMBIENT_RAISE bits and then change 17962306a36Sopenharmony_ci the process identity to sudo caller of the script who should essentially 18062306a36Sopenharmony_ci be a member of perf_users group: 18162306a36Sopenharmony_ci 18262306a36Sopenharmony_ci:: 18362306a36Sopenharmony_ci 18462306a36Sopenharmony_ci # ls -alh /usr/local/bin/perf.shell 18562306a36Sopenharmony_ci -rwxr-xr-x. 1 root root 83 Oct 13 23:57 /usr/local/bin/perf.shell 18662306a36Sopenharmony_ci # cat /usr/local/bin/perf.shell 18762306a36Sopenharmony_ci exec /usr/sbin/capsh --iab=^cap_perfmon --secbits=239 --user=$SUDO_USER -- -l 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_ci2. Extend sudo policy at /etc/sudoers file with a rule for perf_users group: 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci:: 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ci # grep perf_users /etc/sudoers 19462306a36Sopenharmony_ci %perf_users ALL=/usr/local/bin/perf.shell 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci3. Check that members of perf_users group have access to the privileged 19762306a36Sopenharmony_ci shell and have CAP_PERFMON and other required capabilities enabled 19862306a36Sopenharmony_ci in permitted, effective and ambient capability sets of an inherent process: 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_ci:: 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_ci $ id 20362306a36Sopenharmony_ci uid=1003(capsh_test) gid=1004(capsh_test) groups=1004(capsh_test),1000(perf_users) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 20462306a36Sopenharmony_ci $ sudo perf.shell 20562306a36Sopenharmony_ci [sudo] password for capsh_test: 20662306a36Sopenharmony_ci $ grep Cap /proc/self/status 20762306a36Sopenharmony_ci CapInh: 0000004000000000 20862306a36Sopenharmony_ci CapPrm: 0000004000000000 20962306a36Sopenharmony_ci CapEff: 0000004000000000 21062306a36Sopenharmony_ci CapBnd: 000000ffffffffff 21162306a36Sopenharmony_ci CapAmb: 0000004000000000 21262306a36Sopenharmony_ci $ capsh --decode=0000004000000000 21362306a36Sopenharmony_ci 0x0000004000000000=cap_perfmon 21462306a36Sopenharmony_ci 21562306a36Sopenharmony_ciAs a result, members of perf_users group have access to the privileged 21662306a36Sopenharmony_cienvironment where they can use tools employing performance monitoring APIs 21762306a36Sopenharmony_cigoverned by CAP_PERFMON Linux capability. 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ciThis specific access control management is only available to superuser 22062306a36Sopenharmony_cior root running processes with CAP_SETPCAP, CAP_SETFCAP [6]_ 22162306a36Sopenharmony_cicapabilities. 22262306a36Sopenharmony_ci 22362306a36Sopenharmony_ciUnprivileged users 22462306a36Sopenharmony_ci----------------------------------- 22562306a36Sopenharmony_ci 22662306a36Sopenharmony_ciperf_events *scope* and *access* control for unprivileged processes 22762306a36Sopenharmony_ciis governed by perf_event_paranoid [2]_ setting: 22862306a36Sopenharmony_ci 22962306a36Sopenharmony_ci-1: 23062306a36Sopenharmony_ci Impose no *scope* and *access* restrictions on using perf_events 23162306a36Sopenharmony_ci performance monitoring. Per-user per-cpu perf_event_mlock_kb [2]_ 23262306a36Sopenharmony_ci locking limit is ignored when allocating memory buffers for storing 23362306a36Sopenharmony_ci performance data. This is the least secure mode since allowed 23462306a36Sopenharmony_ci monitored *scope* is maximized and no perf_events specific limits 23562306a36Sopenharmony_ci are imposed on *resources* allocated for performance monitoring. 23662306a36Sopenharmony_ci 23762306a36Sopenharmony_ci>=0: 23862306a36Sopenharmony_ci *scope* includes per-process and system wide performance monitoring 23962306a36Sopenharmony_ci but excludes raw tracepoints and ftrace function tracepoints 24062306a36Sopenharmony_ci monitoring. CPU and system events happened when executing either in 24162306a36Sopenharmony_ci user or in kernel space can be monitored and captured for later 24262306a36Sopenharmony_ci analysis. Per-user per-cpu perf_event_mlock_kb locking limit is 24362306a36Sopenharmony_ci imposed but ignored for unprivileged processes with CAP_IPC_LOCK 24462306a36Sopenharmony_ci [6]_ capability. 24562306a36Sopenharmony_ci 24662306a36Sopenharmony_ci>=1: 24762306a36Sopenharmony_ci *scope* includes per-process performance monitoring only and 24862306a36Sopenharmony_ci excludes system wide performance monitoring. CPU and system events 24962306a36Sopenharmony_ci happened when executing either in user or in kernel space can be 25062306a36Sopenharmony_ci monitored and captured for later analysis. Per-user per-cpu 25162306a36Sopenharmony_ci perf_event_mlock_kb locking limit is imposed but ignored for 25262306a36Sopenharmony_ci unprivileged processes with CAP_IPC_LOCK capability. 25362306a36Sopenharmony_ci 25462306a36Sopenharmony_ci>=2: 25562306a36Sopenharmony_ci *scope* includes per-process performance monitoring only. CPU and 25662306a36Sopenharmony_ci system events happened when executing in user space only can be 25762306a36Sopenharmony_ci monitored and captured for later analysis. Per-user per-cpu 25862306a36Sopenharmony_ci perf_event_mlock_kb locking limit is imposed but ignored for 25962306a36Sopenharmony_ci unprivileged processes with CAP_IPC_LOCK capability. 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_ciResource control 26262306a36Sopenharmony_ci--------------------------------- 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_ciOpen file descriptors 26562306a36Sopenharmony_ci+++++++++++++++++++++ 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_ciThe perf_events system call API [2]_ allocates file descriptors for 26862306a36Sopenharmony_cievery configured PMU event. Open file descriptors are a per-process 26962306a36Sopenharmony_ciaccountable resource governed by the RLIMIT_NOFILE [11]_ limit 27062306a36Sopenharmony_ci(ulimit -n), which is usually derived from the login shell process. When 27162306a36Sopenharmony_ciconfiguring Perf collection for a long list of events on a large server 27262306a36Sopenharmony_cisystem, this limit can be easily hit preventing required monitoring 27362306a36Sopenharmony_ciconfiguration. RLIMIT_NOFILE limit can be increased on per-user basis 27462306a36Sopenharmony_cimodifying content of the limits.conf file [12]_ . Ordinarily, a Perf 27562306a36Sopenharmony_cisampling session (perf record) requires an amount of open perf_event 27662306a36Sopenharmony_cifile descriptors that is not less than the number of monitored events 27762306a36Sopenharmony_cimultiplied by the number of monitored CPUs. 27862306a36Sopenharmony_ci 27962306a36Sopenharmony_ciMemory allocation 28062306a36Sopenharmony_ci+++++++++++++++++ 28162306a36Sopenharmony_ci 28262306a36Sopenharmony_ciThe amount of memory available to user processes for capturing 28362306a36Sopenharmony_ciperformance monitoring data is governed by the perf_event_mlock_kb [2]_ 28462306a36Sopenharmony_cisetting. This perf_event specific resource setting defines overall 28562306a36Sopenharmony_ciper-cpu limits of memory allowed for mapping by the user processes to 28662306a36Sopenharmony_ciexecute performance monitoring. The setting essentially extends the 28762306a36Sopenharmony_ciRLIMIT_MEMLOCK [11]_ limit, but only for memory regions mapped 28862306a36Sopenharmony_cispecifically for capturing monitored performance events and related data. 28962306a36Sopenharmony_ci 29062306a36Sopenharmony_ciFor example, if a machine has eight cores and perf_event_mlock_kb limit 29162306a36Sopenharmony_ciis set to 516 KiB, then a user process is provided with 516 KiB * 8 = 29262306a36Sopenharmony_ci4128 KiB of memory above the RLIMIT_MEMLOCK limit (ulimit -l) for 29362306a36Sopenharmony_ciperf_event mmap buffers. In particular, this means that, if the user 29462306a36Sopenharmony_ciwants to start two or more performance monitoring processes, the user is 29562306a36Sopenharmony_cirequired to manually distribute the available 4128 KiB between the 29662306a36Sopenharmony_cimonitoring processes, for example, using the --mmap-pages Perf record 29762306a36Sopenharmony_cimode option. Otherwise, the first started performance monitoring process 29862306a36Sopenharmony_ciallocates all available 4128 KiB and the other processes will fail to 29962306a36Sopenharmony_ciproceed due to the lack of memory. 30062306a36Sopenharmony_ci 30162306a36Sopenharmony_ciRLIMIT_MEMLOCK and perf_event_mlock_kb resource constraints are ignored 30262306a36Sopenharmony_cifor processes with the CAP_IPC_LOCK capability. Thus, perf_events/Perf 30362306a36Sopenharmony_ciprivileged users can be provided with memory above the constraints for 30462306a36Sopenharmony_ciperf_events/Perf performance monitoring purpose by providing the Perf 30562306a36Sopenharmony_ciexecutable with CAP_IPC_LOCK capability. 30662306a36Sopenharmony_ci 30762306a36Sopenharmony_ciBibliography 30862306a36Sopenharmony_ci------------ 30962306a36Sopenharmony_ci 31062306a36Sopenharmony_ci.. [1] `<https://lwn.net/Articles/337493/>`_ 31162306a36Sopenharmony_ci.. [2] `<http://man7.org/linux/man-pages/man2/perf_event_open.2.html>`_ 31262306a36Sopenharmony_ci.. [3] `<http://web.eece.maine.edu/~vweaver/projects/perf_events/>`_ 31362306a36Sopenharmony_ci.. [4] `<https://perf.wiki.kernel.org/index.php/Main_Page>`_ 31462306a36Sopenharmony_ci.. [5] `<https://www.kernel.org/doc/html/latest/security/credentials.html>`_ 31562306a36Sopenharmony_ci.. [6] `<http://man7.org/linux/man-pages/man7/capabilities.7.html>`_ 31662306a36Sopenharmony_ci.. [7] `<http://man7.org/linux/man-pages/man2/ptrace.2.html>`_ 31762306a36Sopenharmony_ci.. [8] `<https://en.wikipedia.org/wiki/Hardware_performance_counter>`_ 31862306a36Sopenharmony_ci.. [9] `<https://en.wikipedia.org/wiki/Model-specific_register>`_ 31962306a36Sopenharmony_ci.. [10] `<http://man7.org/linux/man-pages/man5/acl.5.html>`_ 32062306a36Sopenharmony_ci.. [11] `<http://man7.org/linux/man-pages/man2/getrlimit.2.html>`_ 32162306a36Sopenharmony_ci.. [12] `<http://man7.org/linux/man-pages/man5/limits.conf.5.html>`_ 32262306a36Sopenharmony_ci.. [13] `<https://sites.google.com/site/fullycapable>`_ 32362306a36Sopenharmony_ci.. [14] `<http://man7.org/linux/man-pages/man8/auditd.8.html>`_ 32462306a36Sopenharmony_ci.. [15] `<https://man7.org/linux/man-pages/man8/sudo.8.html>`_ 32562306a36Sopenharmony_ci.. [16] `<https://git.kernel.org/pub/scm/libs/libcap/libcap.git/>`_ 326