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