]> git.ipfire.org Git - thirdparty/systemd.git/blame - man/systemd.exec.xml
core: implement /run/systemd/units/-based path for passing unit info from PID 1 to...
[thirdparty/systemd.git] / man / systemd.exec.xml
CommitLineData
023a4f67 1<?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*-->
dd1eb43b 2<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
12b42c76 3 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
dd1eb43b
LP
4
5<!--
6 This file is part of systemd.
7
8 Copyright 2010 Lennart Poettering
9
10 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
dd1eb43b
LP
13 (at your option) any later version.
14
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 18 Lesser General Public License for more details.
dd1eb43b 19
5430f7f2 20 You should have received a copy of the GNU Lesser General Public License
dd1eb43b
LP
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22-->
23
24<refentry id="systemd.exec">
798d3a52
ZJS
25 <refentryinfo>
26 <title>systemd.exec</title>
27 <productname>systemd</productname>
28
29 <authorgroup>
30 <author>
31 <contrib>Developer</contrib>
32 <firstname>Lennart</firstname>
33 <surname>Poettering</surname>
34 <email>lennart@poettering.net</email>
35 </author>
36 </authorgroup>
37 </refentryinfo>
38
39 <refmeta>
40 <refentrytitle>systemd.exec</refentrytitle>
41 <manvolnum>5</manvolnum>
42 </refmeta>
43
44 <refnamediv>
45 <refname>systemd.exec</refname>
46 <refpurpose>Execution environment configuration</refpurpose>
47 </refnamediv>
48
49 <refsynopsisdiv>
50 <para><filename><replaceable>service</replaceable>.service</filename>,
51 <filename><replaceable>socket</replaceable>.socket</filename>,
52 <filename><replaceable>mount</replaceable>.mount</filename>,
53 <filename><replaceable>swap</replaceable>.swap</filename></para>
54 </refsynopsisdiv>
55
56 <refsect1>
57 <title>Description</title>
58
59 <para>Unit configuration files for services, sockets, mount
60 points, and swap devices share a subset of configuration options
61 which define the execution environment of spawned
62 processes.</para>
63
64 <para>This man page lists the configuration options shared by
65 these four unit types. See
66 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
67 for the common options of all unit configuration files, and
68 <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
69 <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
70 <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
71 and
72 <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>
73 for more information on the specific unit configuration files. The
74 execution specific configuration options are configured in the
75 [Service], [Socket], [Mount], or [Swap] sections, depending on the
76 unit type.</para>
74b47bbd 77
c7458f93 78 <para>In addition, options which control resources through Linux Control Groups (cgroups) are listed in
74b47bbd
ZJS
79 <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
80 Those options complement options listed here.</para>
798d3a52
ZJS
81 </refsect1>
82
c129bd5d 83 <refsect1>
45f09f93
JL
84 <title>Implicit Dependencies</title>
85
86 <para>A few execution parameters result in additional, automatic dependencies to be added:</para>
87
88 <itemizedlist>
89 <listitem><para>Units with <varname>WorkingDirectory=</varname>, <varname>RootDirectory=</varname>, <varname>RootImage=</varname>,
90 <varname>RuntimeDirectory=</varname>, <varname>StateDirectory=</varname>, <varname>CacheDirectory=</varname>,
91 <varname>LogsDirectory=</varname> or <varname>ConfigurationDirectory=</varname> set automatically gain dependencies
92 of type <varname>Requires=</varname> and <varname>After=</varname> on all mount units required to access the specified paths.
93 This is equivalent to having them listed explicitly in <varname>RequiresMountsFor=</varname>.</para></listitem>
94
95 <listitem><para>Similar, units with <varname>PrivateTmp=</varname> enabled automatically get mount unit dependencies for all
96 mounts required to access <filename>/tmp</filename> and <filename>/var/tmp</filename>. They will also gain an
97 automatic <varname>After=</varname> dependency on
98 <citerefentry><refentrytitle>systemd-tmpfiles-setup.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para></listitem>
99
100 <listitem><para>Units whose standard output or error output is connected to <option>journal</option>, <option>syslog</option>
101 or <option>kmsg</option> (or their combinations with console output, see below) automatically acquire dependencies
102 of type <varname>After=</varname> on <filename>systemd-journald.socket</filename>.</para></listitem>
103 </itemizedlist>
c129bd5d
LP
104 </refsect1>
105
45f09f93
JL
106 <!-- We don't have any default dependency here. -->
107
798d3a52
ZJS
108 <refsect1>
109 <title>Options</title>
110
111 <variablelist class='unit-directives'>
112
113 <varlistentry>
114 <term><varname>WorkingDirectory=</varname></term>
115
d251207d
LP
116 <listitem><para>Takes a directory path relative to the service's root directory specified by
117 <varname>RootDirectory=</varname>, or the special value <literal>~</literal>. Sets the working directory for
118 executed processes. If set to <literal>~</literal>, the home directory of the user specified in
119 <varname>User=</varname> is used. If not set, defaults to the root directory when systemd is running as a
120 system instance and the respective user's home directory if run as user. If the setting is prefixed with the
121 <literal>-</literal> character, a missing working directory is not considered fatal. If
915e6d16
LP
122 <varname>RootDirectory=</varname>/<varname>RootImage=</varname> is not set, then
123 <varname>WorkingDirectory=</varname> is relative to the root of the system running the service manager. Note
124 that setting this parameter might result in additional dependencies to be added to the unit (see
125 above).</para></listitem>
798d3a52
ZJS
126 </varlistentry>
127
128 <varlistentry>
129 <term><varname>RootDirectory=</varname></term>
130
d251207d
LP
131 <listitem><para>Takes a directory path relative to the host's root directory (i.e. the root of the system
132 running the service manager). Sets the root directory for executed processes, with the <citerefentry
133 project='man-pages'><refentrytitle>chroot</refentrytitle><manvolnum>2</manvolnum></citerefentry> system
134 call. If this is used, it must be ensured that the process binary and all its auxiliary files are available in
135 the <function>chroot()</function> jail. Note that setting this parameter might result in additional
136 dependencies to be added to the unit (see above).</para>
137
5d997827
LP
138 <para>The <varname>MountAPIVFS=</varname> and <varname>PrivateUsers=</varname> settings are particularly useful
139 in conjunction with <varname>RootDirectory=</varname>. For details, see below.</para></listitem>
140 </varlistentry>
141
915e6d16
LP
142 <varlistentry>
143 <term><varname>RootImage=</varname></term>
144 <listitem><para>Takes a path to a block device node or regular file as argument. This call is similar to
6cf5a964 145 <varname>RootDirectory=</varname> however mounts a file system hierarchy from a block device node or loopback
915e6d16
LP
146 file instead of a directory. The device node or file system image file needs to contain a file system without a
147 partition table, or a file system within an MBR/MS-DOS or GPT partition table with only a single
148 Linux-compatible partition, or a set of file systems within a GPT partition table that follows the <ulink
28a0ad81 149 url="https://www.freedesktop.org/wiki/Specifications/DiscoverablePartitionsSpec/">Discoverable Partitions
915e6d16
LP
150 Specification</ulink>.</para></listitem>
151 </varlistentry>
152
5d997827
LP
153 <varlistentry>
154 <term><varname>MountAPIVFS=</varname></term>
155
156 <listitem><para>Takes a boolean argument. If on, a private mount namespace for the unit's processes is created
ef3116b5
ZJS
157 and the API file systems <filename>/proc</filename>, <filename>/sys</filename>, and <filename>/dev</filename>
158 are mounted inside of it, unless they are already mounted. Note that this option has no effect unless used in
159 conjunction with <varname>RootDirectory=</varname>/<varname>RootImage=</varname> as these three mounts are
160 generally mounted in the host anyway, and unless the root directory is changed, the private mount namespace
161 will be a 1:1 copy of the host's, and include these three mounts. Note that the <filename>/dev</filename> file
162 system of the host is bind mounted if this option is used without <varname>PrivateDevices=</varname>. To run
163 the service with a private, minimal version of <filename>/dev/</filename>, combine this option with
5d997827 164 <varname>PrivateDevices=</varname>.</para></listitem>
798d3a52
ZJS
165 </varlistentry>
166
167 <varlistentry>
168 <term><varname>User=</varname></term>
169 <term><varname>Group=</varname></term>
170
29206d46 171 <listitem><para>Set the UNIX user or group that the processes are executed as, respectively. Takes a single
565dab8e 172 user or group name, or a numeric ID as argument. For system services (services run by the system service manager,
47da760e
LP
173 i.e. managed by PID 1) and for user services of the root user (services managed by root's instance of
174 <command>systemd --user</command>), the default is <literal>root</literal>, but <varname>User=</varname> may be
175 used to specify a different user. For user services of any other user, switching user identity is not
176 permitted, hence the only valid setting is the same user the user's service manager is running as. If no group
177 is set, the default group of the user is used. This setting does not affect commands whose command line is
565dab8e
LP
178 prefixed with <literal>+</literal>.</para>
179
180 <para>Note that restrictions on the user/group name syntax are enforced: the specified name must consist only
181 of the characters a-z, A-Z, 0-9, <literal>_</literal> and <literal>-</literal>, except for the first character
182 which must be one of a-z, A-Z or <literal>_</literal> (i.e. numbers and <literal>-</literal> are not permitted
183 as first character). The user/group name must have at least one character, and at most 31. These restrictions
184 are enforced in order to avoid ambiguities and to ensure user/group names and unit files remain portable among
185 Linux systems.</para>
186
187 <para>When used in conjunction with <varname>DynamicUser=</varname> the user/group name specified is
188 dynamically allocated at the time the service is started, and released at the time the service is stopped —
189 unless it is already allocated statically (see below). If <varname>DynamicUser=</varname> is not used the
190 specified user and group must have been created statically in the user database no later than the moment the
191 service is started, for example using the
192 <citerefentry><refentrytitle>sysusers.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> facility, which
193 is applied at boot or package install time.</para></listitem>
29206d46
LP
194 </varlistentry>
195
196 <varlistentry>
197 <term><varname>DynamicUser=</varname></term>
198
199 <listitem><para>Takes a boolean parameter. If set, a UNIX user and group pair is allocated dynamically when the
200 unit is started, and released as soon as it is stopped. The user and group will not be added to
201 <filename>/etc/passwd</filename> or <filename>/etc/group</filename>, but are managed transiently during
202 runtime. The <citerefentry><refentrytitle>nss-systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry>
203 glibc NSS module provides integration of these dynamic users/groups into the system's user and group
204 databases. The user and group name to use may be configured via <varname>User=</varname> and
205 <varname>Group=</varname> (see above). If these options are not used and dynamic user/group allocation is
206 enabled for a unit, the name of the dynamic user/group is implicitly derived from the unit name. If the unit
207 name without the type suffix qualifies as valid user name it is used directly, otherwise a name incorporating a
208 hash of it is used. If a statically allocated user or group of the configured name already exists, it is used
3bd493dc
YW
209 and no dynamic user/group is allocated. Note that if <varname>User=</varname> is specified and the static group
210 with the name exists, then it is required that the static user with the name already exists. Similarly,
211 if <varname>Group=</varname> is specified and the static user with the name exists, then it is required that
212 the static group with the name already exists. Dynamic users/groups are allocated from the UID/GID range
29206d46
LP
213 61184…65519. It is recommended to avoid this range for regular system or login users. At any point in time
214 each UID/GID from this range is only assigned to zero or one dynamically allocated users/groups in
215 use. However, UID/GIDs are recycled after a unit is terminated. Care should be taken that any processes running
216 as part of a unit for which dynamic users/groups are enabled do not leave files or directories owned by these
217 users/groups around, as a different unit might get the same UID/GID assigned later on, and thus gain access to
63bb64a0 218 these files or directories. If <varname>DynamicUser=</varname> is enabled, <varname>RemoveIPC=</varname>,
00d9ef85
LP
219 <varname>PrivateTmp=</varname> are implied. This ensures that the lifetime of IPC objects and temporary files
220 created by the executed processes is bound to the runtime of the service, and hence the lifetime of the dynamic
221 user/group. Since <filename>/tmp</filename> and <filename>/var/tmp</filename> are usually the only
222 world-writable directories on a system this ensures that a unit making use of dynamic user/group allocation
63bb64a0
LP
223 cannot leave files around after unit termination. Moreover <varname>ProtectSystem=strict</varname> and
224 <varname>ProtectHome=read-only</varname> are implied, thus prohibiting the service to write to arbitrary file
225 system locations. In order to allow the service to write to certain directories, they have to be whitelisted
4a628360
LP
226 using <varname>ReadWritePaths=</varname>, but care must be taken so that UID/GID recycling doesn't create
227 security issues involving files created by the service. Use <varname>RuntimeDirectory=</varname> (see below) in
228 order to assign a writable runtime directory to a service, owned by the dynamic user/group and removed
229 automatically when the unit is terminated. Use <varname>StateDirectory=</varname>,
230 <varname>CacheDirectory=</varname> and <varname>LogsDirectory=</varname> in order to assign a set of writable
231 directories for specific purposes to the service in a way that they are protected from vulnerabilities due to
232 UID reuse (see below). Defaults to off.</para></listitem>
798d3a52
ZJS
233 </varlistentry>
234
235 <varlistentry>
236 <term><varname>SupplementaryGroups=</varname></term>
237
238 <listitem><para>Sets the supplementary Unix groups the
239 processes are executed as. This takes a space-separated list
240 of group names or IDs. This option may be specified more than
b938cb90
JE
241 once, in which case all listed groups are set as supplementary
242 groups. When the empty string is assigned, the list of
798d3a52
ZJS
243 supplementary groups is reset, and all assignments prior to
244 this one will have no effect. In any way, this option does not
245 override, but extends the list of supplementary groups
246 configured in the system group database for the
43eb109a 247 user. This does not affect commands prefixed with <literal>+</literal>.</para></listitem>
798d3a52
ZJS
248 </varlistentry>
249
00d9ef85
LP
250 <varlistentry>
251 <term><varname>RemoveIPC=</varname></term>
252
253 <listitem><para>Takes a boolean parameter. If set, all System V and POSIX IPC objects owned by the user and
254 group the processes of this unit are run as are removed when the unit is stopped. This setting only has an
255 effect if at least one of <varname>User=</varname>, <varname>Group=</varname> and
256 <varname>DynamicUser=</varname> are used. It has no effect on IPC objects owned by the root user. Specifically,
257 this removes System V semaphores, as well as System V and POSIX shared memory segments and message queues. If
258 multiple units use the same user or group the IPC objects are removed when the last of these units is
259 stopped. This setting is implied if <varname>DynamicUser=</varname> is set.</para></listitem>
260 </varlistentry>
261
798d3a52
ZJS
262 <varlistentry>
263 <term><varname>Nice=</varname></term>
264
265 <listitem><para>Sets the default nice level (scheduling
266 priority) for executed processes. Takes an integer between -20
267 (highest priority) and 19 (lowest priority). See
268 <citerefentry><refentrytitle>setpriority</refentrytitle><manvolnum>2</manvolnum></citerefentry>
269 for details.</para></listitem>
270 </varlistentry>
271
272 <varlistentry>
273 <term><varname>OOMScoreAdjust=</varname></term>
274
275 <listitem><para>Sets the adjustment level for the
276 Out-Of-Memory killer for executed processes. Takes an integer
277 between -1000 (to disable OOM killing for this process) and
278 1000 (to make killing of this process under memory pressure
279 very likely). See <ulink
280 url="https://www.kernel.org/doc/Documentation/filesystems/proc.txt">proc.txt</ulink>
281 for details.</para></listitem>
282 </varlistentry>
283
284 <varlistentry>
285 <term><varname>IOSchedulingClass=</varname></term>
286
b938cb90 287 <listitem><para>Sets the I/O scheduling class for executed
798d3a52
ZJS
288 processes. Takes an integer between 0 and 3 or one of the
289 strings <option>none</option>, <option>realtime</option>,
290 <option>best-effort</option> or <option>idle</option>. See
291 <citerefentry><refentrytitle>ioprio_set</refentrytitle><manvolnum>2</manvolnum></citerefentry>
292 for details.</para></listitem>
293 </varlistentry>
294
295 <varlistentry>
296 <term><varname>IOSchedulingPriority=</varname></term>
297
b938cb90 298 <listitem><para>Sets the I/O scheduling priority for executed
798d3a52
ZJS
299 processes. Takes an integer between 0 (highest priority) and 7
300 (lowest priority). The available priorities depend on the
b938cb90 301 selected I/O scheduling class (see above). See
798d3a52
ZJS
302 <citerefentry><refentrytitle>ioprio_set</refentrytitle><manvolnum>2</manvolnum></citerefentry>
303 for details.</para></listitem>
304 </varlistentry>
305
306 <varlistentry>
307 <term><varname>CPUSchedulingPolicy=</varname></term>
308
309 <listitem><para>Sets the CPU scheduling policy for executed
310 processes. Takes one of
311 <option>other</option>,
312 <option>batch</option>,
313 <option>idle</option>,
314 <option>fifo</option> or
315 <option>rr</option>. See
316 <citerefentry><refentrytitle>sched_setscheduler</refentrytitle><manvolnum>2</manvolnum></citerefentry>
317 for details.</para></listitem>
318 </varlistentry>
319
320 <varlistentry>
321 <term><varname>CPUSchedulingPriority=</varname></term>
322
323 <listitem><para>Sets the CPU scheduling priority for executed
324 processes. The available priority range depends on the
325 selected CPU scheduling policy (see above). For real-time
326 scheduling policies an integer between 1 (lowest priority) and
327 99 (highest priority) can be used. See
328 <citerefentry><refentrytitle>sched_setscheduler</refentrytitle><manvolnum>2</manvolnum></citerefentry>
329 for details. </para></listitem>
330 </varlistentry>
331
332 <varlistentry>
333 <term><varname>CPUSchedulingResetOnFork=</varname></term>
334
335 <listitem><para>Takes a boolean argument. If true, elevated
336 CPU scheduling priorities and policies will be reset when the
337 executed processes fork, and can hence not leak into child
338 processes. See
339 <citerefentry><refentrytitle>sched_setscheduler</refentrytitle><manvolnum>2</manvolnum></citerefentry>
340 for details. Defaults to false.</para></listitem>
341 </varlistentry>
342
343 <varlistentry>
344 <term><varname>CPUAffinity=</varname></term>
345
346 <listitem><para>Controls the CPU affinity of the executed
71b1c27a
FB
347 processes. Takes a list of CPU indices or ranges separated by
348 either whitespace or commas. CPU ranges are specified by the
349 lower and upper CPU indices separated by a dash.
b938cb90 350 This option may be specified more than once, in which case the
798d3a52
ZJS
351 specified CPU affinity masks are merged. If the empty string
352 is assigned, the mask is reset, all assignments prior to this
353 will have no effect. See
354 <citerefentry><refentrytitle>sched_setaffinity</refentrytitle><manvolnum>2</manvolnum></citerefentry>
355 for details.</para></listitem>
356 </varlistentry>
357
358 <varlistentry>
359 <term><varname>UMask=</varname></term>
360
361 <listitem><para>Controls the file mode creation mask. Takes an
362 access mode in octal notation. See
363 <citerefentry><refentrytitle>umask</refentrytitle><manvolnum>2</manvolnum></citerefentry>
364 for details. Defaults to 0022.</para></listitem>
365 </varlistentry>
366
367 <varlistentry>
368 <term><varname>Environment=</varname></term>
369
370 <listitem><para>Sets environment variables for executed
371 processes. Takes a space-separated list of variable
b938cb90 372 assignments. This option may be specified more than once, in
798d3a52
ZJS
373 which case all listed variables will be set. If the same
374 variable is set twice, the later setting will override the
375 earlier setting. If the empty string is assigned to this
376 option, the list of environment variables is reset, all prior
377 assignments have no effect. Variable expansion is not
378 performed inside the strings, however, specifier expansion is
379 possible. The $ character has no special meaning. If you need
b8e485fa 380 to assign a value containing spaces or the equals sign to a variable, use double
798d3a52
ZJS
381 quotes (") for the assignment.</para>
382
383 <para>Example:
384 <programlisting>Environment="VAR1=word1 word2" VAR2=word3 "VAR3=$word 5 6"</programlisting>
385 gives three variables <literal>VAR1</literal>,
386 <literal>VAR2</literal>, <literal>VAR3</literal>
387 with the values <literal>word1 word2</literal>,
388 <literal>word3</literal>, <literal>$word 5 6</literal>.
389 </para>
390
391 <para>
392 See
393 <citerefentry project='man-pages'><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry>
394 for details about environment variables.</para></listitem>
395 </varlistentry>
396 <varlistentry>
397 <term><varname>EnvironmentFile=</varname></term>
398 <listitem><para>Similar to <varname>Environment=</varname> but
399 reads the environment variables from a text file. The text
400 file should contain new-line-separated variable assignments.
8f0d2981
RM
401 Empty lines, lines without an <literal>=</literal> separator,
402 or lines starting with ; or # will be ignored,
798d3a52
ZJS
403 which may be used for commenting. A line ending with a
404 backslash will be concatenated with the following one,
405 allowing multiline variable definitions. The parser strips
406 leading and trailing whitespace from the values of
407 assignments, unless you use double quotes (").</para>
408
409 <para>The argument passed should be an absolute filename or
410 wildcard expression, optionally prefixed with
411 <literal>-</literal>, which indicates that if the file does
412 not exist, it will not be read and no error or warning message
413 is logged. This option may be specified more than once in
414 which case all specified files are read. If the empty string
415 is assigned to this option, the list of file to read is reset,
416 all prior assignments have no effect.</para>
417
418 <para>The files listed with this directive will be read
419 shortly before the process is executed (more specifically,
420 after all processes from a previous unit state terminated.
421 This means you can generate these files in one unit state, and
f407824d
DH
422 read it with this option in the next).</para>
423
424 <para>Settings from these
798d3a52
ZJS
425 files override settings made with
426 <varname>Environment=</varname>. If the same variable is set
427 twice from these files, the files will be read in the order
428 they are specified and the later setting will override the
429 earlier setting.</para></listitem>
430 </varlistentry>
431
b4c14404
FB
432 <varlistentry>
433 <term><varname>PassEnvironment=</varname></term>
434
00819cc1
LP
435 <listitem><para>Pass environment variables set for the system service manager to executed processes. Takes a
436 space-separated list of variable names. This option may be specified more than once, in which case all listed
437 variables will be passed. If the empty string is assigned to this option, the list of environment variables to
438 pass is reset, all prior assignments have no effect. Variables specified that are not set for the system
439 manager will not be passed and will be silently ignored. Note that this option is only relevant for the system
440 service manager, as system services by default do not automatically inherit any environment variables set for
441 the service manager itself. However, in case of the user service manager all environment variables are passed
442 to the executed processes anyway, hence this option is without effect for the user service manager.</para>
443
444 <para>Variables set for invoked processes due to this setting are subject to being overridden by those
445 configured with <varname>Environment=</varname> or <varname>EnvironmentFile=</varname>.</para>
b4c14404
FB
446
447 <para>Example:
448 <programlisting>PassEnvironment=VAR1 VAR2 VAR3</programlisting>
449 passes three variables <literal>VAR1</literal>,
450 <literal>VAR2</literal>, <literal>VAR3</literal>
451 with the values set for those variables in PID1.</para>
452
453 <para>
454 See
455 <citerefentry project='man-pages'><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry>
456 for details about environment variables.</para></listitem>
457 </varlistentry>
458
00819cc1
LP
459 <varlistentry>
460 <term><varname>UnsetEnvironment=</varname></term>
461
462 <listitem><para>Explicitly unset environment variable assignments that would normally be passed from the
463 service manager to invoked processes of this unit. Takes a space-separated list of variable names or variable
464 assignments. This option may be specified more than once, in which case all listed variables/assignments will
465 be unset. If the empty string is assigned to this option, the list of environment variables/assignments to
466 unset is reset. If a variable assignment is specified (that is: a variable name, followed by
467 <literal>=</literal>, followed by its value), then any environment variable matching this precise assignment is
468 removed. If a variable name is specified (that is a variable name without any following <literal>=</literal> or
469 value), then any assignment matching the variable name, regardless of its value is removed. Note that the
470 effect of <varname>UnsetEnvironment=</varname> is applied as final step when the environment list passed to
471 executed processes is compiled. That means it may undo assignments from any configuration source, including
472 assignments made through <varname>Environment=</varname> or <varname>EnvironmentFile=</varname>, inherited from
473 the system manager's global set of environment variables, inherited via <varname>PassEnvironment=</varname>,
474 set by the service manager itself (such as <varname>$NOTIFY_SOCKET</varname> and such), or set by a PAM module
475 (in case <varname>PAMName=</varname> is used).</para>
476
477 <para>
478 See
479 <citerefentry project='man-pages'><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry>
480 for details about environment variables.</para></listitem>
481 </varlistentry>
482
798d3a52
ZJS
483 <varlistentry>
484 <term><varname>StandardInput=</varname></term>
485 <listitem><para>Controls where file descriptor 0 (STDIN) of
486 the executed processes is connected to. Takes one of
487 <option>null</option>,
488 <option>tty</option>,
489 <option>tty-force</option>,
52c239d7
LB
490 <option>tty-fail</option>,
491 <option>socket</option> or
492 <option>fd</option>.</para>
798d3a52
ZJS
493
494 <para>If <option>null</option> is selected, standard input
495 will be connected to <filename>/dev/null</filename>, i.e. all
496 read attempts by the process will result in immediate
497 EOF.</para>
498
499 <para>If <option>tty</option> is selected, standard input is
500 connected to a TTY (as configured by
501 <varname>TTYPath=</varname>, see below) and the executed
502 process becomes the controlling process of the terminal. If
503 the terminal is already being controlled by another process,
504 the executed process waits until the current controlling
505 process releases the terminal.</para>
506
507 <para><option>tty-force</option> is similar to
508 <option>tty</option>, but the executed process is forcefully
509 and immediately made the controlling process of the terminal,
510 potentially removing previous controlling processes from the
511 terminal.</para>
512
513 <para><option>tty-fail</option> is similar to
514 <option>tty</option> but if the terminal already has a
515 controlling process start-up of the executed process
516 fails.</para>
517
518 <para>The <option>socket</option> option is only valid in
519 socket-activated services, and only when the socket
520 configuration file (see
521 <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>
522 for details) specifies a single socket only. If this option is
523 set, standard input will be connected to the socket the
524 service was activated from, which is primarily useful for
525 compatibility with daemons designed for use with the
526 traditional
b5c7d097 527 <citerefentry project='freebsd'><refentrytitle>inetd</refentrytitle><manvolnum>8</manvolnum></citerefentry>
798d3a52
ZJS
528 daemon.</para>
529
52c239d7
LB
530 <para>The <option>fd</option> option connects
531 the input stream to a single file descriptor provided by a socket unit.
532 A custom named file descriptor can be specified as part of this option,
533 after a <literal>:</literal> (e.g. <literal>fd:<replaceable>foobar</replaceable></literal>).
534 If no name is specified, <literal>stdin</literal> is assumed
535 (i.e. <literal>fd</literal> is equivalent to <literal>fd:stdin</literal>).
536 At least one socket unit defining such name must be explicitly provided via the
537 <varname>Sockets=</varname> option, and file descriptor name may differ
538 from the name of its containing socket unit.
539 If multiple matches are found, the first one will be used.
540 See <varname>FileDescriptorName=</varname> in
541 <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>
542 for more details about named descriptors and ordering.</para>
543
798d3a52
ZJS
544 <para>This setting defaults to
545 <option>null</option>.</para></listitem>
546 </varlistentry>
c129bd5d 547
798d3a52
ZJS
548 <varlistentry>
549 <term><varname>StandardOutput=</varname></term>
550 <listitem><para>Controls where file descriptor 1 (STDOUT) of
551 the executed processes is connected to. Takes one of
552 <option>inherit</option>,
553 <option>null</option>,
554 <option>tty</option>,
555 <option>journal</option>,
556 <option>syslog</option>,
557 <option>kmsg</option>,
558 <option>journal+console</option>,
559 <option>syslog+console</option>,
52c239d7
LB
560 <option>kmsg+console</option>,
561 <option>socket</option> or
562 <option>fd</option>.</para>
798d3a52
ZJS
563
564 <para><option>inherit</option> duplicates the file descriptor
565 of standard input for standard output.</para>
566
567 <para><option>null</option> connects standard output to
568 <filename>/dev/null</filename>, i.e. everything written to it
569 will be lost.</para>
570
571 <para><option>tty</option> connects standard output to a tty
572 (as configured via <varname>TTYPath=</varname>, see below). If
573 the TTY is used for output only, the executed process will not
574 become the controlling process of the terminal, and will not
575 fail or wait for other processes to release the
576 terminal.</para>
577
578 <para><option>journal</option> connects standard output with
579 the journal which is accessible via
580 <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
581 Note that everything that is written to syslog or kmsg (see
582 below) is implicitly stored in the journal as well, the
583 specific two options listed below are hence supersets of this
584 one.</para>
585
586 <para><option>syslog</option> connects standard output to the
587 <citerefentry project='man-pages'><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>
588 system syslog service, in addition to the journal. Note that
589 the journal daemon is usually configured to forward everything
590 it receives to syslog anyway, in which case this option is no
591 different from <option>journal</option>.</para>
592
593 <para><option>kmsg</option> connects standard output with the
594 kernel log buffer which is accessible via
595 <citerefentry project='man-pages'><refentrytitle>dmesg</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
596 in addition to the journal. The journal daemon might be
597 configured to send all logs to kmsg anyway, in which case this
598 option is no different from <option>journal</option>.</para>
599
600 <para><option>journal+console</option>,
601 <option>syslog+console</option> and
602 <option>kmsg+console</option> work in a similar way as the
603 three options above but copy the output to the system console
604 as well.</para>
605
606 <para><option>socket</option> connects standard output to a
607 socket acquired via socket activation. The semantics are
608 similar to the same option of
609 <varname>StandardInput=</varname>.</para>
610
52c239d7
LB
611 <para>The <option>fd</option> option connects
612 the output stream to a single file descriptor provided by a socket unit.
613 A custom named file descriptor can be specified as part of this option,
614 after a <literal>:</literal> (e.g. <literal>fd:<replaceable>foobar</replaceable></literal>).
615 If no name is specified, <literal>stdout</literal> is assumed
616 (i.e. <literal>fd</literal> is equivalent to <literal>fd:stdout</literal>).
617 At least one socket unit defining such name must be explicitly provided via the
618 <varname>Sockets=</varname> option, and file descriptor name may differ
619 from the name of its containing socket unit.
620 If multiple matches are found, the first one will be used.
621 See <varname>FileDescriptorName=</varname> in
622 <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>
623 for more details about named descriptors and ordering.</para>
624
dfe85b38
LP
625 <para>If the standard output (or error output, see below) of a unit is connected to the journal, syslog or the
626 kernel log buffer, the unit will implicitly gain a dependency of type <varname>After=</varname> on
b0e8cec2
LP
627 <filename>systemd-journald.socket</filename> (also see the "Implicit Dependencies" section above). Also note
628 that in this case stdout (or stderr, see below) will be an <constant>AF_UNIX</constant> stream socket, and not
629 a pipe or FIFO that can be re-opened. This means when executing shell scripts the construct <command>echo
630 "hello" &gt; /dev/stderr</command> for writing text to stderr will not work. To mitigate this use the construct
631 <command>echo "hello" >&amp;2</command> instead, which is mostly equivalent and avoids this pitfall.</para>
28c75e25 632
798d3a52 633 <para>This setting defaults to the value set with
79849927 634 <varname>DefaultStandardOutput=</varname> in
798d3a52 635 <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
c129bd5d
LP
636 which defaults to <option>journal</option>. Note that setting
637 this parameter might result in additional dependencies to be
b0e8cec2
LP
638 added to the unit (see above).</para>
639 </listitem>
798d3a52 640 </varlistentry>
c129bd5d 641
798d3a52
ZJS
642 <varlistentry>
643 <term><varname>StandardError=</varname></term>
644 <listitem><para>Controls where file descriptor 2 (STDERR) of
645 the executed processes is connected to. The available options
646 are identical to those of <varname>StandardOutput=</varname>,
52c239d7 647 with some exceptions: if set to <option>inherit</option> the
798d3a52 648 file descriptor used for standard output is duplicated for
52c239d7
LB
649 standard error, while <option>fd</option> operates on the error
650 stream and will look by default for a descriptor named
651 <literal>stderr</literal>.</para>
652
653 <para>This setting defaults to the value set with
79849927 654 <varname>DefaultStandardError=</varname> in
798d3a52 655 <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
c129bd5d
LP
656 which defaults to <option>inherit</option>. Note that setting
657 this parameter might result in additional dependencies to be
658 added to the unit (see above).</para></listitem>
798d3a52 659 </varlistentry>
c129bd5d 660
798d3a52
ZJS
661 <varlistentry>
662 <term><varname>TTYPath=</varname></term>
663 <listitem><para>Sets the terminal device node to use if
664 standard input, output, or error are connected to a TTY (see
665 above). Defaults to
666 <filename>/dev/console</filename>.</para></listitem>
667 </varlistentry>
668 <varlistentry>
669 <term><varname>TTYReset=</varname></term>
670 <listitem><para>Reset the terminal device specified with
671 <varname>TTYPath=</varname> before and after execution.
672 Defaults to <literal>no</literal>.</para></listitem>
673 </varlistentry>
674 <varlistentry>
675 <term><varname>TTYVHangup=</varname></term>
676 <listitem><para>Disconnect all clients which have opened the
677 terminal device specified with <varname>TTYPath=</varname>
678 before and after execution. Defaults to
679 <literal>no</literal>.</para></listitem>
680 </varlistentry>
681 <varlistentry>
682 <term><varname>TTYVTDisallocate=</varname></term>
683 <listitem><para>If the terminal device specified with
684 <varname>TTYPath=</varname> is a virtual console terminal, try
685 to deallocate the TTY before and after execution. This ensures
686 that the screen and scrollback buffer is cleared. Defaults to
687 <literal>no</literal>.</para></listitem>
688 </varlistentry>
4d14b2bd 689
798d3a52
ZJS
690 <varlistentry>
691 <term><varname>SyslogIdentifier=</varname></term>
4d14b2bd
LP
692 <listitem><para>Sets the process name ("<command>syslog</command> tag") to prefix log lines sent to the logging
693 system or the kernel log buffer with. If not set, defaults to the process name of the executed process. This
694 option is only useful when <varname>StandardOutput=</varname> or <varname>StandardError=</varname> are set to
695 <option>journal</option>, <option>syslog</option> or <option>kmsg</option> (or to the same settings in
696 combination with <option>+console</option>) and only applies to log messages written to stdout or
697 stderr.</para></listitem>
798d3a52 698 </varlistentry>
4d14b2bd 699
798d3a52
ZJS
700 <varlistentry>
701 <term><varname>SyslogFacility=</varname></term>
4d14b2bd
LP
702 <listitem><para>Sets the <command>syslog</command> facility identifier to use when logging. One of
703 <option>kern</option>, <option>user</option>, <option>mail</option>, <option>daemon</option>,
704 <option>auth</option>, <option>syslog</option>, <option>lpr</option>, <option>news</option>,
705 <option>uucp</option>, <option>cron</option>, <option>authpriv</option>, <option>ftp</option>,
706 <option>local0</option>, <option>local1</option>, <option>local2</option>, <option>local3</option>,
707 <option>local4</option>, <option>local5</option>, <option>local6</option> or <option>local7</option>. See
798d3a52 708 <citerefentry project='man-pages'><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>
4d14b2bd
LP
709 for details. This option is only useful when <varname>StandardOutput=</varname> or
710 <varname>StandardError=</varname> are set to <option>journal</option>, <option>syslog</option> or
711 <option>kmsg</option> (or to the same settings in combination with <option>+console</option>), and only applies
712 to log messages written to stdout or stderr. Defaults to <option>daemon</option>.</para></listitem>
798d3a52 713 </varlistentry>
4d14b2bd 714
798d3a52
ZJS
715 <varlistentry>
716 <term><varname>SyslogLevel=</varname></term>
4d14b2bd
LP
717 <listitem><para>The default <command>syslog</command> log level to use when logging to the logging system or
718 the kernel log buffer. One of <option>emerg</option>, <option>alert</option>, <option>crit</option>,
719 <option>err</option>, <option>warning</option>, <option>notice</option>, <option>info</option>,
720 <option>debug</option>. See <citerefentry
721 project='man-pages'><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry> for
722 details. This option is only useful when <varname>StandardOutput=</varname> or
723 <varname>StandardError=</varname> are set to <option>journal</option>, <option>syslog</option> or
724 <option>kmsg</option> (or to the same settings in combination with <option>+console</option>), and only applies
725 to log messages written to stdout or stderr. Note that individual lines output by executed processes may be
726 prefixed with a different log level which can be used to override the default log level specified here. The
727 interpretation of these prefixes may be disabled with <varname>SyslogLevelPrefix=</varname>, see below. For
728 details, see <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
798d3a52 729
4d14b2bd 730 Defaults to <option>info</option>.</para></listitem>
798d3a52
ZJS
731 </varlistentry>
732
733 <varlistentry>
734 <term><varname>SyslogLevelPrefix=</varname></term>
4d14b2bd
LP
735 <listitem><para>Takes a boolean argument. If true and <varname>StandardOutput=</varname> or
736 <varname>StandardError=</varname> are set to <option>journal</option>, <option>syslog</option> or
737 <option>kmsg</option> (or to the same settings in combination with <option>+console</option>), log lines
738 written by the executed process that are prefixed with a log level will be processed with this log level set
739 but the prefix removed. If set to false, the interpretation of these prefixes is disabled and the logged lines
740 are passed on as-is. This only applies to log messages written to stdout or stderr. For details
741 about this prefixing see
742 <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>. Defaults to
743 true.</para></listitem>
798d3a52
ZJS
744 </varlistentry>
745
746 <varlistentry>
747 <term><varname>TimerSlackNSec=</varname></term>
748 <listitem><para>Sets the timer slack in nanoseconds for the
749 executed processes. The timer slack controls the accuracy of
750 wake-ups triggered by timers. See
751 <citerefentry><refentrytitle>prctl</refentrytitle><manvolnum>2</manvolnum></citerefentry>
752 for more information. Note that in contrast to most other time
753 span definitions this parameter takes an integer value in
754 nano-seconds if no unit is specified. The usual time units are
755 understood too.</para></listitem>
756 </varlistentry>
757
758 <varlistentry>
759 <term><varname>LimitCPU=</varname></term>
760 <term><varname>LimitFSIZE=</varname></term>
761 <term><varname>LimitDATA=</varname></term>
762 <term><varname>LimitSTACK=</varname></term>
763 <term><varname>LimitCORE=</varname></term>
764 <term><varname>LimitRSS=</varname></term>
765 <term><varname>LimitNOFILE=</varname></term>
766 <term><varname>LimitAS=</varname></term>
767 <term><varname>LimitNPROC=</varname></term>
768 <term><varname>LimitMEMLOCK=</varname></term>
769 <term><varname>LimitLOCKS=</varname></term>
770 <term><varname>LimitSIGPENDING=</varname></term>
771 <term><varname>LimitMSGQUEUE=</varname></term>
772 <term><varname>LimitNICE=</varname></term>
773 <term><varname>LimitRTPRIO=</varname></term>
774 <term><varname>LimitRTTIME=</varname></term>
29857001
LP
775 <listitem><para>Set soft and hard limits on various resources for executed processes. See
776 <citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</manvolnum></citerefentry> for details on
777 the resource limit concept. Resource limits may be specified in two formats: either as single value to set a
778 specific soft and hard limit to the same value, or as colon-separated pair <option>soft:hard</option> to set
79849927 779 both limits individually (e.g. <literal>LimitAS=4G:16G</literal>). Use the string <option>infinity</option>
29857001
LP
780 to configure no limit on a specific resource. The multiplicative suffixes K, M, G, T, P and E (to the base
781 1024) may be used for resource limits measured in bytes (e.g. LimitAS=16G). For the limits referring to time
782 values, the usual time units ms, s, min, h and so on may be used (see
783 <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
784 details). Note that if no time unit is specified for <varname>LimitCPU=</varname> the default unit of seconds
785 is implied, while for <varname>LimitRTTIME=</varname> the default unit of microseconds is implied. Also, note
786 that the effective granularity of the limits might influence their enforcement. For example, time limits
787 specified for <varname>LimitCPU=</varname> will be rounded up implicitly to multiples of 1s. For
788 <varname>LimitNICE=</varname> the value may be specified in two syntaxes: if prefixed with <literal>+</literal>
789 or <literal>-</literal>, the value is understood as regular Linux nice value in the range -20..19. If not
790 prefixed like this the value is understood as raw resource limit parameter in the range 0..40 (with 0 being
791 equivalent to 1).</para>
a4c18002
LP
792
793 <para>Note that most process resource limits configured with
794 these options are per-process, and processes may fork in order
795 to acquire a new set of resources that are accounted
796 independently of the original process, and may thus escape
797 limits set. Also note that <varname>LimitRSS=</varname> is not
798 implemented on Linux, and setting it has no effect. Often it
799 is advisable to prefer the resource controls listed in
800 <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>
801 over these per-process limits, as they apply to services as a
802 whole, may be altered dynamically at runtime, and are
803 generally more expressive. For example,
804 <varname>MemoryLimit=</varname> is a more powerful (and
805 working) replacement for <varname>LimitRSS=</varname>.</para>
798d3a52 806
f4c9356d
LP
807 <para>For system units these resource limits may be chosen freely. For user units however (i.e. units run by a
808 per-user instance of
809 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>), these limits are
810 bound by (possibly more restrictive) per-user limits enforced by the OS.</para>
811
812 <para>Resource limits not configured explicitly for a unit default to the value configured in the various
813 <varname>DefaultLimitCPU=</varname>, <varname>DefaultLimitFSIZE=</varname>, … options available in
814 <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>, and –
815 if not configured there – the kernel or per-user defaults, as defined by the OS (the latter only for user
816 services, see above).</para>
817
798d3a52 818 <table>
f4c9356d 819 <title>Resource limit directives, their equivalent <command>ulimit</command> shell commands and the unit used</title>
798d3a52 820
a4c18002 821 <tgroup cols='3'>
798d3a52
ZJS
822 <colspec colname='directive' />
823 <colspec colname='equivalent' />
a4c18002 824 <colspec colname='unit' />
798d3a52
ZJS
825 <thead>
826 <row>
827 <entry>Directive</entry>
f4c9356d 828 <entry><command>ulimit</command> equivalent</entry>
a4c18002 829 <entry>Unit</entry>
798d3a52
ZJS
830 </row>
831 </thead>
832 <tbody>
833 <row>
a4c18002 834 <entry>LimitCPU=</entry>
798d3a52 835 <entry>ulimit -t</entry>
a4c18002 836 <entry>Seconds</entry>
798d3a52
ZJS
837 </row>
838 <row>
a4c18002 839 <entry>LimitFSIZE=</entry>
798d3a52 840 <entry>ulimit -f</entry>
a4c18002 841 <entry>Bytes</entry>
798d3a52
ZJS
842 </row>
843 <row>
a4c18002 844 <entry>LimitDATA=</entry>
798d3a52 845 <entry>ulimit -d</entry>
a4c18002 846 <entry>Bytes</entry>
798d3a52
ZJS
847 </row>
848 <row>
a4c18002 849 <entry>LimitSTACK=</entry>
798d3a52 850 <entry>ulimit -s</entry>
a4c18002 851 <entry>Bytes</entry>
798d3a52
ZJS
852 </row>
853 <row>
a4c18002 854 <entry>LimitCORE=</entry>
798d3a52 855 <entry>ulimit -c</entry>
a4c18002 856 <entry>Bytes</entry>
798d3a52
ZJS
857 </row>
858 <row>
a4c18002 859 <entry>LimitRSS=</entry>
798d3a52 860 <entry>ulimit -m</entry>
a4c18002 861 <entry>Bytes</entry>
798d3a52
ZJS
862 </row>
863 <row>
a4c18002 864 <entry>LimitNOFILE=</entry>
798d3a52 865 <entry>ulimit -n</entry>
a4c18002 866 <entry>Number of File Descriptors</entry>
798d3a52
ZJS
867 </row>
868 <row>
a4c18002 869 <entry>LimitAS=</entry>
798d3a52 870 <entry>ulimit -v</entry>
a4c18002 871 <entry>Bytes</entry>
798d3a52
ZJS
872 </row>
873 <row>
a4c18002 874 <entry>LimitNPROC=</entry>
798d3a52 875 <entry>ulimit -u</entry>
a4c18002 876 <entry>Number of Processes</entry>
798d3a52
ZJS
877 </row>
878 <row>
a4c18002 879 <entry>LimitMEMLOCK=</entry>
798d3a52 880 <entry>ulimit -l</entry>
a4c18002 881 <entry>Bytes</entry>
798d3a52
ZJS
882 </row>
883 <row>
a4c18002 884 <entry>LimitLOCKS=</entry>
798d3a52 885 <entry>ulimit -x</entry>
a4c18002 886 <entry>Number of Locks</entry>
798d3a52
ZJS
887 </row>
888 <row>
a4c18002 889 <entry>LimitSIGPENDING=</entry>
798d3a52 890 <entry>ulimit -i</entry>
a4c18002 891 <entry>Number of Queued Signals</entry>
798d3a52
ZJS
892 </row>
893 <row>
a4c18002 894 <entry>LimitMSGQUEUE=</entry>
798d3a52 895 <entry>ulimit -q</entry>
a4c18002 896 <entry>Bytes</entry>
798d3a52
ZJS
897 </row>
898 <row>
a4c18002 899 <entry>LimitNICE=</entry>
798d3a52 900 <entry>ulimit -e</entry>
a4c18002 901 <entry>Nice Level</entry>
798d3a52
ZJS
902 </row>
903 <row>
a4c18002 904 <entry>LimitRTPRIO=</entry>
798d3a52 905 <entry>ulimit -r</entry>
a4c18002 906 <entry>Realtime Priority</entry>
798d3a52
ZJS
907 </row>
908 <row>
a4c18002 909 <entry>LimitRTTIME=</entry>
798d3a52 910 <entry>No equivalent</entry>
a4c18002 911 <entry>Microseconds</entry>
798d3a52
ZJS
912 </row>
913 </tbody>
914 </tgroup>
a4c18002 915 </table></listitem>
798d3a52
ZJS
916 </varlistentry>
917
918 <varlistentry>
919 <term><varname>PAMName=</varname></term>
9eb484fa
LP
920 <listitem><para>Sets the PAM service name to set up a session as. If set, the executed process will be
921 registered as a PAM session under the specified service name. This is only useful in conjunction with the
922 <varname>User=</varname> setting, and is otherwise ignored. If not set, no PAM session will be opened for the
923 executed processes. See <citerefentry
924 project='man-pages'><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry> for
925 details.</para>
926
927 <para>Note that for each unit making use of this option a PAM session handler process will be maintained as
928 part of the unit and stays around as long as the unit is active, to ensure that appropriate actions can be
929 taken when the unit and hence the PAM session terminates. This process is named <literal>(sd-pam)</literal> and
5aaeeffb
LP
930 is an immediate child process of the unit's main process.</para>
931
932 <para>Note that when this option is used for a unit it is very likely (depending on PAM configuration) that the
933 main unit process will be migrated to its own session scope unit when it is activated. This process will hence
934 be associated with two units: the unit it was originally started from (and for which
935 <varname>PAMName=</varname> was configured), and the session scope unit. Any child processes of that process
936 will however be associated with the session scope unit only. This has implications when used in combination
937 with <varname>NotifyAccess=</varname><option>all</option>, as these child processes will not be able to affect
938 changes in the original unit through notification messages. These messages will be considered belonging to the
939 session scope unit and not the original unit. It is hence not recommended to use <varname>PAMName=</varname> in
940 combination with <varname>NotifyAccess=</varname><option>all</option>.</para>
941 </listitem>
798d3a52
ZJS
942 </varlistentry>
943
944 <varlistentry>
945 <term><varname>CapabilityBoundingSet=</varname></term>
946
479050b3
LP
947 <listitem><para>Controls which capabilities to include in the capability bounding set for the executed
948 process. See <citerefentry
949 project='man-pages'><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
b2656f1b
LP
950 details. Takes a whitespace-separated list of capability names, e.g. <constant>CAP_SYS_ADMIN</constant>,
951 <constant>CAP_DAC_OVERRIDE</constant>, <constant>CAP_SYS_PTRACE</constant>. Capabilities listed will be
952 included in the bounding set, all others are removed. If the list of capabilities is prefixed with
953 <literal>~</literal>, all but the listed capabilities will be included, the effect of the assignment
954 inverted. Note that this option also affects the respective capabilities in the effective, permitted and
955 inheritable capability sets. If this option is not used, the capability bounding set is not modified on process
956 execution, hence no limits on the capabilities of the process are enforced. This option may appear more than
de7070b4
YW
957 once, in which case the bounding sets are merged by <constant>AND</constant>, or by <constant>OR</constant>
958 if the lines are prefixed with <literal>~</literal> (see below). If the empty string is assigned
959 to this option, the bounding set is reset to the empty capability set, and all prior settings have no effect.
960 If set to <literal>~</literal> (without any further argument), the bounding set is reset to the full set of available
b2656f1b 961 capabilities, also undoing any previous settings. This does not affect commands prefixed with
de7070b4
YW
962 <literal>+</literal>.</para>
963
964 <para>Example: if a unit has the following,
965 <programlisting>CapabilityBoundingSet=CAP_A CAP_B
966CapabilityBoundingSet=CAP_B CAP_C</programlisting>
967 then <constant>CAP_A</constant>, <constant>CAP_B</constant>, and <constant>CAP_C</constant> are set.
968 If the second line is prefixed with <literal>~</literal>, e.g.,
969 <programlisting>CapabilityBoundingSet=CAP_A CAP_B
970CapabilityBoundingSet=~CAP_B CAP_C</programlisting>
971 then, only <constant>CAP_A</constant> is set.</para></listitem>
798d3a52
ZJS
972 </varlistentry>
973
ece87975
IP
974 <varlistentry>
975 <term><varname>AmbientCapabilities=</varname></term>
976
b2656f1b
LP
977 <listitem><para>Controls which capabilities to include in the ambient capability set for the executed
978 process. Takes a whitespace-separated list of capability names, e.g. <constant>CAP_SYS_ADMIN</constant>,
979 <constant>CAP_DAC_OVERRIDE</constant>, <constant>CAP_SYS_PTRACE</constant>. This option may appear more than
de7070b4
YW
980 once in which case the ambient capability sets are merged (see the above examples in
981 <varname>CapabilityBoundingSet=</varname>). If the list of capabilities is prefixed with
b2656f1b
LP
982 <literal>~</literal>, all but the listed capabilities will be included, the effect of the assignment
983 inverted. If the empty string is assigned to this option, the ambient capability set is reset to the empty
984 capability set, and all prior settings have no effect. If set to <literal>~</literal> (without any further
985 argument), the ambient capability set is reset to the full set of available capabilities, also undoing any
986 previous settings. Note that adding capabilities to ambient capability set adds them to the process's inherited
987 capability set. </para><para> Ambient capability sets are useful if you want to execute a process as a
988 non-privileged user but still want to give it some capabilities. Note that in this case option
989 <constant>keep-caps</constant> is automatically added to <varname>SecureBits=</varname> to retain the
990 capabilities over the user change. <varname>AmbientCapabilities=</varname> does not affect commands prefixed
991 with <literal>+</literal>.</para></listitem>
ece87975
IP
992 </varlistentry>
993
798d3a52
ZJS
994 <varlistentry>
995 <term><varname>SecureBits=</varname></term>
996 <listitem><para>Controls the secure bits set for the executed
997 process. Takes a space-separated combination of options from
998 the following list:
999 <option>keep-caps</option>,
1000 <option>keep-caps-locked</option>,
1001 <option>no-setuid-fixup</option>,
1002 <option>no-setuid-fixup-locked</option>,
1003 <option>noroot</option>, and
1004 <option>noroot-locked</option>.
b938cb90 1005 This option may appear more than once, in which case the secure
798d3a52 1006 bits are ORed. If the empty string is assigned to this option,
43eb109a 1007 the bits are reset to 0. This does not affect commands prefixed with <literal>+</literal>.
cf677fe6 1008 See <citerefentry project='man-pages'><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>
798d3a52
ZJS
1009 for details.</para></listitem>
1010 </varlistentry>
1011
798d3a52 1012 <varlistentry>
2a624c36
AP
1013 <term><varname>ReadWritePaths=</varname></term>
1014 <term><varname>ReadOnlyPaths=</varname></term>
1015 <term><varname>InaccessiblePaths=</varname></term>
798d3a52 1016
effbd6d2
LP
1017 <listitem><para>Sets up a new file system namespace for executed processes. These options may be used to limit
1018 access a process might have to the file system hierarchy. Each setting takes a space-separated list of paths
1019 relative to the host's root directory (i.e. the system running the service manager). Note that if paths
1020 contain symlinks, they are resolved relative to the root directory set with
915e6d16 1021 <varname>RootDirectory=</varname>/<varname>RootImage=</varname>.</para>
effbd6d2
LP
1022
1023 <para>Paths listed in <varname>ReadWritePaths=</varname> are accessible from within the namespace with the same
1024 access modes as from outside of it. Paths listed in <varname>ReadOnlyPaths=</varname> are accessible for
1025 reading only, writing will be refused even if the usual file access controls would permit this. Nest
1026 <varname>ReadWritePaths=</varname> inside of <varname>ReadOnlyPaths=</varname> in order to provide writable
1027 subdirectories within read-only directories. Use <varname>ReadWritePaths=</varname> in order to whitelist
1028 specific paths for write access if <varname>ProtectSystem=strict</varname> is used. Paths listed in
1029 <varname>InaccessiblePaths=</varname> will be made inaccessible for processes inside the namespace (along with
1030 everything below them in the file system hierarchy).</para>
1031
1032 <para>Note that restricting access with these options does not extend to submounts of a directory that are
1033 created later on. Non-directory paths may be specified as well. These options may be specified more than once,
1034 in which case all paths listed will have limited access from within the namespace. If the empty string is
1035 assigned to this option, the specific list is reset, and all prior assignments have no effect.</para>
1036
e778185b 1037 <para>Paths in <varname>ReadWritePaths=</varname>, <varname>ReadOnlyPaths=</varname> and
5327c910
LP
1038 <varname>InaccessiblePaths=</varname> may be prefixed with <literal>-</literal>, in which case they will be
1039 ignored when they do not exist. If prefixed with <literal>+</literal> the paths are taken relative to the root
915e6d16
LP
1040 directory of the unit, as configured with <varname>RootDirectory=</varname>/<varname>RootImage=</varname>,
1041 instead of relative to the root directory of the host (see above). When combining <literal>-</literal> and
1042 <literal>+</literal> on the same path make sure to specify <literal>-</literal> first, and <literal>+</literal>
1043 second.</para>
5327c910
LP
1044
1045 <para>Note that using this setting will disconnect propagation of mounts from the service to the host
1046 (propagation in the opposite direction continues to work). This means that this setting may not be used for
1047 services which shall be able to install mount points in the main mount namespace. Note that the effect of these
1048 settings may be undone by privileged processes. In order to set up an effective sandboxed environment for a
1049 unit it is thus recommended to combine these settings with either
1050 <varname>CapabilityBoundingSet=~CAP_SYS_ADMIN</varname> or
1051 <varname>SystemCallFilter=~@mount</varname>.</para></listitem>
798d3a52
ZJS
1052 </varlistentry>
1053
d2d6c096
LP
1054 <varlistentry>
1055 <term><varname>BindPaths=</varname></term>
1056 <term><varname>BindReadOnlyPaths=</varname></term>
1057
1058 <listitem><para>Configures unit-specific bind mounts. A bind mount makes a particular file or directory
1059 available at an additional place in the unit's view of the file system. Any bind mounts created with this
1060 option are specific to the unit, and are not visible in the host's mount table. This option expects a
1061 whitespace separated list of bind mount definitions. Each definition consists of a colon-separated triple of
1062 source path, destination path and option string, where the latter two are optional. If only a source path is
1063 specified the source and destination is taken to be the same. The option string may be either
1064 <literal>rbind</literal> or <literal>norbind</literal> for configuring a recursive or non-recursive bind
98063016 1065 mount. If the destination path is omitted, the option string must be omitted too.</para>
d2d6c096
LP
1066
1067 <para><varname>BindPaths=</varname> creates regular writable bind mounts (unless the source file system mount
1068 is already marked read-only), while <varname>BindReadOnlyPaths=</varname> creates read-only bind mounts. These
1069 settings may be used more than once, each usage appends to the unit's list of bind mounts. If the empty string
1070 is assigned to either of these two options the entire list of bind mounts defined prior to this is reset. Note
1071 that in this case both read-only and regular bind mounts are reset, regardless which of the two settings is
1072 used.</para>
1073
915e6d16
LP
1074 <para>This option is particularly useful when <varname>RootDirectory=</varname>/<varname>RootImage=</varname>
1075 is used. In this case the source path refers to a path on the host file system, while the destination path
1076 refers to a path below the root directory of the unit.</para></listitem>
d2d6c096
LP
1077 </varlistentry>
1078
798d3a52
ZJS
1079 <varlistentry>
1080 <term><varname>PrivateTmp=</varname></term>
1081
00d9ef85
LP
1082 <listitem><para>Takes a boolean argument. If true, sets up a new file system namespace for the executed
1083 processes and mounts private <filename>/tmp</filename> and <filename>/var/tmp</filename> directories inside it
1084 that is not shared by processes outside of the namespace. This is useful to secure access to temporary files of
1085 the process, but makes sharing between processes via <filename>/tmp</filename> or <filename>/var/tmp</filename>
1086 impossible. If this is enabled, all temporary files created by a service in these directories will be removed
1087 after the service is stopped. Defaults to false. It is possible to run two or more units within the same
1088 private <filename>/tmp</filename> and <filename>/var/tmp</filename> namespace by using the
798d3a52 1089 <varname>JoinsNamespaceOf=</varname> directive, see
00d9ef85 1090 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
effbd6d2
LP
1091 details. This setting is implied if <varname>DynamicUser=</varname> is set. For this setting the same
1092 restrictions regarding mount propagation and privileges apply as for <varname>ReadOnlyPaths=</varname> and
d71f0505
LP
1093 related calls, see above. Enabling this setting has the side effect of adding <varname>Requires=</varname> and
1094 <varname>After=</varname> dependencies on all mount units necessary to access <filename>/tmp</filename> and
1095 <filename>/var/tmp</filename>. Moreover an implicitly <varname>After=</varname> ordering on
1096 <citerefentry><refentrytitle>systemd-tmpfiles-setup.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
b0238568
ZJS
1097 is added.</para>
1098
1099 <para>Note that the implementation of this setting might be impossible (for example if mount namespaces
1100 are not available), and the unit should be written in a way that does not solely rely on this setting for
1101 security.</para></listitem>
798d3a52
ZJS
1102 </varlistentry>
1103
1104 <varlistentry>
1105 <term><varname>PrivateDevices=</varname></term>
1106
b0238568
ZJS
1107 <listitem><para>Takes a boolean argument. If true, sets up a new <filename>/dev</filename> mount for the
1108 executed processes and only adds API pseudo devices such as <filename>/dev/null</filename>,
1109 <filename>/dev/zero</filename> or
effbd6d2 1110 <filename>/dev/random</filename> (as well as the pseudo TTY subsystem) to it, but no physical devices such as
9221aec8
DH
1111 <filename>/dev/sda</filename>, system memory <filename>/dev/mem</filename>, system ports
1112 <filename>/dev/port</filename> and others. This is useful to securely turn off physical device access by the
8f81a5f6
DH
1113 executed process. Defaults to false. Enabling this option will install a system call filter to block low-level
1114 I/O system calls that are grouped in the <varname>@raw-io</varname> set, will also remove
2cd0a735
DH
1115 <constant>CAP_MKNOD</constant> and <constant>CAP_SYS_RAWIO</constant> from the capability bounding set for
1116 the unit (see above), and set <varname>DevicePolicy=closed</varname> (see
798d3a52 1117 <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>
effbd6d2
LP
1118 for details). Note that using this setting will disconnect propagation of mounts from the service to the host
1119 (propagation in the opposite direction continues to work). This means that this setting may not be used for
b0238568
ZJS
1120 services which shall be able to install mount points in the main mount namespace. The new <filename>/dev</filename>
1121 will be mounted read-only and 'noexec'. The latter may break old programs which try to set up executable memory by
effbd6d2 1122 using <citerefentry><refentrytitle>mmap</refentrytitle><manvolnum>2</manvolnum></citerefentry> of
2d35b79c
YW
1123 <filename>/dev/zero</filename> instead of using <constant>MAP_ANON</constant>. For this setting the same restrictions
1124 regarding mount propagation and privileges apply as for <varname>ReadOnlyPaths=</varname> and related calls, see above.
a7db8614 1125 If turned on and if running in user mode, or in system mode, but without the <constant>CAP_SYS_ADMIN</constant>
2d35b79c 1126 capability (e.g. setting <varname>User=</varname>), <varname>NoNewPrivileges=yes</varname> is implied.
b0238568
ZJS
1127 </para>
1128
1129 <para>Note that the implementation of this setting might be impossible (for example if mount namespaces
1130 are not available), and the unit should be written in a way that does not solely rely on this setting for
1131 security.</para></listitem>
798d3a52
ZJS
1132 </varlistentry>
1133
1134 <varlistentry>
1135 <term><varname>PrivateNetwork=</varname></term>
1136
1137 <listitem><para>Takes a boolean argument. If true, sets up a
1138 new network namespace for the executed processes and
1139 configures only the loopback network device
1140 <literal>lo</literal> inside it. No other network devices will
1141 be available to the executed process. This is useful to
b0238568 1142 turn off network access by the executed process.
798d3a52
ZJS
1143 Defaults to false. It is possible to run two or more units
1144 within the same private network namespace by using the
1145 <varname>JoinsNamespaceOf=</varname> directive, see
1146 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
1147 for details. Note that this option will disconnect all socket
1148 families from the host, this includes AF_NETLINK and AF_UNIX.
1149 The latter has the effect that AF_UNIX sockets in the abstract
1150 socket namespace will become unavailable to the processes
1151 (however, those located in the file system will continue to be
b0238568
ZJS
1152 accessible).</para>
1153
1154 <para>Note that the implementation of this setting might be impossible (for example if network namespaces
1155 are not available), and the unit should be written in a way that does not solely rely on this setting for
1156 security.</para></listitem>
798d3a52
ZJS
1157 </varlistentry>
1158
1159 <varlistentry>
d251207d
LP
1160 <term><varname>PrivateUsers=</varname></term>
1161
1162 <listitem><para>Takes a boolean argument. If true, sets up a new user namespace for the executed processes and
1163 configures a minimal user and group mapping, that maps the <literal>root</literal> user and group as well as
1164 the unit's own user and group to themselves and everything else to the <literal>nobody</literal> user and
1165 group. This is useful to securely detach the user and group databases used by the unit from the rest of the
1166 system, and thus to create an effective sandbox environment. All files, directories, processes, IPC objects and
2dd67817 1167 other resources owned by users/groups not equaling <literal>root</literal> or the unit's own will stay visible
d251207d
LP
1168 from within the unit but appear owned by the <literal>nobody</literal> user and group. If this mode is enabled,
1169 all unit processes are run without privileges in the host user namespace (regardless if the unit's own
1170 user/group is <literal>root</literal> or not). Specifically this means that the process will have zero process
1171 capabilities on the host's user namespace, but full capabilities within the service's user namespace. Settings
1172 such as <varname>CapabilityBoundingSet=</varname> will affect only the latter, and there's no way to acquire
1173 additional capabilities in the host's user namespace. Defaults to off.</para>
1174
915e6d16
LP
1175 <para>This setting is particularly useful in conjunction with
1176 <varname>RootDirectory=</varname>/<varname>RootImage=</varname>, as the need to synchronize the user and group
1177 databases in the root directory and on the host is reduced, as the only users and groups who need to be matched
b0238568
ZJS
1178 are <literal>root</literal>, <literal>nobody</literal> and the unit's own user and group.</para>
1179
1180 <para>Note that the implementation of this setting might be impossible (for example if user namespaces
1181 are not available), and the unit should be written in a way that does not solely rely on this setting for
1182 security.</para></listitem>
d251207d
LP
1183 </varlistentry>
1184
798d3a52
ZJS
1185 <varlistentry>
1186 <term><varname>ProtectSystem=</varname></term>
1187
3f815163
LP
1188 <listitem><para>Takes a boolean argument or the special values <literal>full</literal> or
1189 <literal>strict</literal>. If true, mounts the <filename>/usr</filename> and <filename>/boot</filename>
1190 directories read-only for processes invoked by this unit. If set to <literal>full</literal>, the
1191 <filename>/etc</filename> directory is mounted read-only, too. If set to <literal>strict</literal> the entire
1192 file system hierarchy is mounted read-only, except for the API file system subtrees <filename>/dev</filename>,
1193 <filename>/proc</filename> and <filename>/sys</filename> (protect these directories using
1194 <varname>PrivateDevices=</varname>, <varname>ProtectKernelTunables=</varname>,
1195 <varname>ProtectControlGroups=</varname>). This setting ensures that any modification of the vendor-supplied
1196 operating system (and optionally its configuration, and local mounts) is prohibited for the service. It is
1197 recommended to enable this setting for all long-running services, unless they are involved with system updates
1198 or need to modify the operating system in other ways. If this option is used,
effbd6d2
LP
1199 <varname>ReadWritePaths=</varname> may be used to exclude specific directories from being made read-only. This
1200 setting is implied if <varname>DynamicUser=</varname> is set. For this setting the same restrictions regarding
1201 mount propagation and privileges apply as for <varname>ReadOnlyPaths=</varname> and related calls, see
1202 above. Defaults to off.</para></listitem>
798d3a52
ZJS
1203 </varlistentry>
1204
1205 <varlistentry>
1206 <term><varname>ProtectHome=</varname></term>
1207
effbd6d2
LP
1208 <listitem><para>Takes a boolean argument or <literal>read-only</literal>. If true, the directories
1209 <filename>/home</filename>, <filename>/root</filename> and <filename>/run/user</filename> are made inaccessible
1210 and empty for processes invoked by this unit. If set to <literal>read-only</literal>, the three directories are
1211 made read-only instead. It is recommended to enable this setting for all long-running services (in particular
1212 network-facing ones), to ensure they cannot get access to private user data, unless the services actually
1213 require access to the user's private data. This setting is implied if <varname>DynamicUser=</varname> is
1214 set. For this setting the same restrictions regarding mount propagation and privileges apply as for
1215 <varname>ReadOnlyPaths=</varname> and related calls, see above.</para></listitem>
59eeb84b
LP
1216 </varlistentry>
1217
1218 <varlistentry>
1219 <term><varname>ProtectKernelTunables=</varname></term>
1220
1221 <listitem><para>Takes a boolean argument. If true, kernel variables accessible through
49accde7
DH
1222 <filename>/proc/sys</filename>, <filename>/sys</filename>, <filename>/proc/sysrq-trigger</filename>,
1223 <filename>/proc/latency_stats</filename>, <filename>/proc/acpi</filename>,
1224 <filename>/proc/timer_stats</filename>, <filename>/proc/fs</filename> and <filename>/proc/irq</filename> will
525872bf
LP
1225 be made read-only to all processes of the unit. Usually, tunable kernel variables should be initialized only at
1226 boot-time, for example with the
1227 <citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry> mechanism. Few
1228 services need to write to these at runtime; it is hence recommended to turn this on for most services. For this
1229 setting the same restrictions regarding mount propagation and privileges apply as for
1230 <varname>ReadOnlyPaths=</varname> and related calls, see above. Defaults to off. If turned on and if running
1231 in user mode, or in system mode, but without the <constant>CAP_SYS_ADMIN</constant> capability (e.g. services
1232 for which <varname>User=</varname> is set), <varname>NoNewPrivileges=yes</varname> is implied. Note that this
1233 option does not prevent indirect changes to kernel tunables effected by IPC calls to other processes. However,
1234 <varname>InaccessiblePaths=</varname> may be used to make relevant IPC file system objects inaccessible. If
1235 <varname>ProtectKernelTunables=</varname> is set, <varname>MountAPIVFS=yes</varname> is
1236 implied.</para></listitem>
59eeb84b
LP
1237 </varlistentry>
1238
85265556
DH
1239 <varlistentry>
1240 <term><varname>ProtectKernelModules=</varname></term>
1241
1242 <listitem><para>Takes a boolean argument. If true, explicit module loading will
1243 be denied. This allows to turn off module load and unload operations on modular
1244 kernels. It is recommended to turn this on for most services that do not need special
1245 file systems or extra kernel modules to work. Default to off. Enabling this option
1246 removes <constant>CAP_SYS_MODULE</constant> from the capability bounding set for
1247 the unit, and installs a system call filter to block module system calls,
1248 also <filename>/usr/lib/modules</filename> is made inaccessible. For this
1249 setting the same restrictions regarding mount propagation and privileges
1250 apply as for <varname>ReadOnlyPaths=</varname> and related calls, see above.
1251 Note that limited automatic module loading due to user configuration or kernel
1252 mapping tables might still happen as side effect of requested user operations,
1253 both privileged and unprivileged. To disable module auto-load feature please see
1254 <citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
1255 <constant>kernel.modules_disabled</constant> mechanism and
1256 <filename>/proc/sys/kernel/modules_disabled</filename> documentation.
1257 If turned on and if running in user mode, or in system mode, but without the <constant>CAP_SYS_ADMIN</constant>
1258 capability (e.g. setting <varname>User=</varname>), <varname>NoNewPrivileges=yes</varname>
1259 is implied.
1260 </para></listitem>
1261 </varlistentry>
1262
59eeb84b
LP
1263 <varlistentry>
1264 <term><varname>ProtectControlGroups=</varname></term>
1265
effbd6d2
LP
1266 <listitem><para>Takes a boolean argument. If true, the Linux Control Groups (<citerefentry
1267 project='man-pages'><refentrytitle>cgroups</refentrytitle><manvolnum>7</manvolnum></citerefentry>) hierarchies
1268 accessible through <filename>/sys/fs/cgroup</filename> will be made read-only to all processes of the
1269 unit. Except for container managers no services should require write access to the control groups hierarchies;
1270 it is hence recommended to turn this on for most services. For this setting the same restrictions regarding
1271 mount propagation and privileges apply as for <varname>ReadOnlyPaths=</varname> and related calls, see
525872bf
LP
1272 above. Defaults to off. If <varname>ProtectControlGroups=</varname> is set, <varname>MountAPIVFS=yes</varname> is
1273 implied.</para></listitem>
798d3a52
ZJS
1274 </varlistentry>
1275
1276 <varlistentry>
1277 <term><varname>MountFlags=</varname></term>
1278
effbd6d2
LP
1279 <listitem><para>Takes a mount propagation flag: <option>shared</option>, <option>slave</option> or
1280 <option>private</option>, which control whether mounts in the file system namespace set up for this unit's
7141028d 1281 processes will receive or propagate mounts and unmounts. See <citerefentry
effbd6d2
LP
1282 project='man-pages'><refentrytitle>mount</refentrytitle><manvolnum>2</manvolnum></citerefentry> for
1283 details. Defaults to <option>shared</option>. Use <option>shared</option> to ensure that mounts and unmounts
fa2a3966
IK
1284 are propagated from systemd's namespace to the service's namespace and vice versa. Use <option>slave</option>
1285 to run processes so that none of their mounts and unmounts will propagate to the host. Use <option>private</option>
374e6922 1286 to also ensure that no mounts and unmounts from the host will propagate into the unit processes' namespace.
4b957756
IK
1287 If this is set to <option>slave</option> or <option>private</option>, any mounts created by spawned processes
1288 will be unmounted after the completion of the current command line of <varname>ExecStartPre=</varname>,
1289 <varname>ExecStartPost=</varname>, <varname>ExecStart=</varname>,
1290 and <varname>ExecStopPost=</varname>. Note that
effbd6d2
LP
1291 <option>slave</option> means that file systems mounted on the host might stay mounted continuously in the
1292 unit's namespace, and thus keep the device busy. Note that the file system namespace related options
1293 (<varname>PrivateTmp=</varname>, <varname>PrivateDevices=</varname>, <varname>ProtectSystem=</varname>,
1294 <varname>ProtectHome=</varname>, <varname>ProtectKernelTunables=</varname>,
1295 <varname>ProtectControlGroups=</varname>, <varname>ReadOnlyPaths=</varname>,
1296 <varname>InaccessiblePaths=</varname>, <varname>ReadWritePaths=</varname>) require that mount and unmount
1297 propagation from the unit's file system namespace is disabled, and hence downgrade <option>shared</option> to
798d3a52
ZJS
1298 <option>slave</option>. </para></listitem>
1299 </varlistentry>
1300
1301 <varlistentry>
1302 <term><varname>UtmpIdentifier=</varname></term>
1303
1304 <listitem><para>Takes a four character identifier string for
023a4f67
LP
1305 an <citerefentry
1306 project='man-pages'><refentrytitle>utmp</refentrytitle><manvolnum>5</manvolnum></citerefentry>
1307 and wtmp entry for this service. This should only be
1308 set for services such as <command>getty</command>
1309 implementations (such as <citerefentry
1310 project='die-net'><refentrytitle>agetty</refentrytitle><manvolnum>8</manvolnum></citerefentry>)
798d3a52 1311 where utmp/wtmp entries must be created and cleared before and
023a4f67
LP
1312 after execution, or for services that shall be executed as if
1313 they were run by a <command>getty</command> process (see
1314 below). If the configured string is longer than four
798d3a52
ZJS
1315 characters, it is truncated and the terminal four characters
1316 are used. This setting interprets %I style string
1317 replacements. This setting is unset by default, i.e. no
1318 utmp/wtmp entries are created or cleaned up for this
1319 service.</para></listitem>
1320 </varlistentry>
1321
023a4f67
LP
1322 <varlistentry>
1323 <term><varname>UtmpMode=</varname></term>
1324
1325 <listitem><para>Takes one of <literal>init</literal>,
1326 <literal>login</literal> or <literal>user</literal>. If
1327 <varname>UtmpIdentifier=</varname> is set, controls which
1328 type of <citerefentry
1329 project='man-pages'><refentrytitle>utmp</refentrytitle><manvolnum>5</manvolnum></citerefentry>/wtmp
1330 entries for this service are generated. This setting has no
1331 effect unless <varname>UtmpIdentifier=</varname> is set
1332 too. If <literal>init</literal> is set, only an
1333 <constant>INIT_PROCESS</constant> entry is generated and the
6cd16034
LP
1334 invoked process must implement a
1335 <command>getty</command>-compatible utmp/wtmp logic. If
1336 <literal>login</literal> is set, first an
a8eaaee7 1337 <constant>INIT_PROCESS</constant> entry, followed by a
6cd16034 1338 <constant>LOGIN_PROCESS</constant> entry is generated. In
b938cb90 1339 this case, the invoked process must implement a <citerefentry
023a4f67
LP
1340 project='die-net'><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>-compatible
1341 utmp/wtmp logic. If <literal>user</literal> is set, first an
1342 <constant>INIT_PROCESS</constant> entry, then a
a8eaaee7 1343 <constant>LOGIN_PROCESS</constant> entry and finally a
023a4f67 1344 <constant>USER_PROCESS</constant> entry is generated. In this
b938cb90 1345 case, the invoked process may be any process that is suitable
023a4f67
LP
1346 to be run as session leader. Defaults to
1347 <literal>init</literal>.</para></listitem>
1348 </varlistentry>
1349
798d3a52
ZJS
1350 <varlistentry>
1351 <term><varname>SELinuxContext=</varname></term>
1352
1353 <listitem><para>Set the SELinux security context of the
1354 executed process. If set, this will override the automated
1355 domain transition. However, the policy still needs to
1356 authorize the transition. This directive is ignored if SELinux
1357 is disabled. If prefixed by <literal>-</literal>, all errors
43eb109a 1358 will be ignored. This does not affect commands prefixed with <literal>+</literal>.
cf677fe6 1359 See <citerefentry project='die-net'><refentrytitle>setexeccon</refentrytitle><manvolnum>3</manvolnum></citerefentry>
798d3a52
ZJS
1360 for details.</para></listitem>
1361 </varlistentry>
1362
1363 <varlistentry>
1364 <term><varname>AppArmorProfile=</varname></term>
1365
1366 <listitem><para>Takes a profile name as argument. The process
1367 executed by the unit will switch to this profile when started.
1368 Profiles must already be loaded in the kernel, or the unit
1369 will fail. This result in a non operation if AppArmor is not
1370 enabled. If prefixed by <literal>-</literal>, all errors will
43eb109a 1371 be ignored. This does not affect commands prefixed with <literal>+</literal>.</para></listitem>
798d3a52
ZJS
1372 </varlistentry>
1373
1374 <varlistentry>
1375 <term><varname>SmackProcessLabel=</varname></term>
1376
1377 <listitem><para>Takes a <option>SMACK64</option> security
1378 label as argument. The process executed by the unit will be
1379 started under this label and SMACK will decide whether the
b938cb90 1380 process is allowed to run or not, based on it. The process
798d3a52
ZJS
1381 will continue to run under the label specified here unless the
1382 executable has its own <option>SMACK64EXEC</option> label, in
1383 which case the process will transition to run under that
1384 label. When not specified, the label that systemd is running
1385 under is used. This directive is ignored if SMACK is
1386 disabled.</para>
1387
1388 <para>The value may be prefixed by <literal>-</literal>, in
1389 which case all errors will be ignored. An empty value may be
cf677fe6 1390 specified to unset previous assignments. This does not affect
43eb109a 1391 commands prefixed with <literal>+</literal>.</para>
798d3a52
ZJS
1392 </listitem>
1393 </varlistentry>
1394
1395 <varlistentry>
1396 <term><varname>IgnoreSIGPIPE=</varname></term>
1397
1398 <listitem><para>Takes a boolean argument. If true, causes
1399 <constant>SIGPIPE</constant> to be ignored in the executed
1400 process. Defaults to true because <constant>SIGPIPE</constant>
1401 generally is useful only in shell pipelines.</para></listitem>
1402 </varlistentry>
1403
1404 <varlistentry>
1405 <term><varname>NoNewPrivileges=</varname></term>
1406
add00535
LP
1407 <listitem><para>Takes a boolean argument. If true, ensures that the service process and all its children can
1408 never gain new privileges through <function>execve()</function> (e.g. via setuid or setgid bits, or filesystem
1409 capabilities). This is the simplest and most effective way to ensure that a process and its children can never
a7db8614 1410 elevate privileges again. Defaults to false, but certain settings force
add00535
LP
1411 <varname>NoNewPrivileges=yes</varname>, ignoring the value of this setting. This is the case when
1412 <varname>SystemCallFilter=</varname>, <varname>SystemCallArchitectures=</varname>,
1413 <varname>RestrictAddressFamilies=</varname>, <varname>RestrictNamespaces=</varname>,
1414 <varname>PrivateDevices=</varname>, <varname>ProtectKernelTunables=</varname>,
1415 <varname>ProtectKernelModules=</varname>, <varname>MemoryDenyWriteExecute=</varname>, or
1416 <varname>RestrictRealtime=</varname> are specified.</para></listitem>
798d3a52
ZJS
1417 </varlistentry>
1418
1419 <varlistentry>
1420 <term><varname>SystemCallFilter=</varname></term>
1421
c79aff9a
LP
1422 <listitem><para>Takes a space-separated list of system call names. If this setting is used, all system calls
1423 executed by the unit processes except for the listed ones will result in immediate process termination with the
1424 <constant>SIGSYS</constant> signal (whitelisting). If the first character of the list is <literal>~</literal>,
1425 the effect is inverted: only the listed system calls will result in immediate process termination
8cfa775f
YW
1426 (blacklisting). Blacklisted system calls and system call groups may optionally be suffixed with a colon
1427 (<literal>:</literal>) and <literal>errno</literal> error number (between 0 and 4095) or errno name such as
1428 <constant>EPERM</constant>, <constant>EACCES</constant> or <constant>EUCLEAN</constant>. This value will be
1429 returned when a blacklisted system call is triggered, instead of terminating the processes immediately.
1430 This value takes precedence over the one given in <varname>SystemCallErrorNumber=</varname>.
1431 If running in user mode, or in system mode, but without the <constant>CAP_SYS_ADMIN</constant>
c79aff9a
LP
1432 capability (e.g. setting <varname>User=nobody</varname>), <varname>NoNewPrivileges=yes</varname> is
1433 implied. This feature makes use of the Secure Computing Mode 2 interfaces of the kernel ('seccomp filtering')
1434 and is useful for enforcing a minimal sandboxing environment. Note that the <function>execve</function>,
1435 <function>exit</function>, <function>exit_group</function>, <function>getrlimit</function>,
1436 <function>rt_sigreturn</function>, <function>sigreturn</function> system calls and the system calls for
1437 querying time and sleeping are implicitly whitelisted and do not need to be listed explicitly. This option may
1438 be specified more than once, in which case the filter masks are merged. If the empty string is assigned, the
1439 filter is reset, all prior assignments will have no effect. This does not affect commands prefixed with
1440 <literal>+</literal>.</para>
798d3a52 1441
0b8fab97
LP
1442 <para>Note that on systems supporting multiple ABIs (such as x86/x86-64) it is recommended to turn off
1443 alternative ABIs for services, so that they cannot be used to circumvent the restrictions of this
1444 option. Specifically, it is recommended to combine this option with
1445 <varname>SystemCallArchitectures=native</varname> or similar.</para>
1446
2ca8dc15
LP
1447 <para>Note that strict system call filters may impact execution and error handling code paths of the service
1448 invocation. Specifically, access to the <function>execve</function> system call is required for the execution
1449 of the service binary — if it is blocked service invocation will necessarily fail. Also, if execution of the
1450 service binary fails for some reason (for example: missing service executable), the error handling logic might
1451 require access to an additional set of system calls in order to process and log this failure correctly. It
1452 might be necessary to temporarily disable system call filters in order to simplify debugging of such
1453 failures.</para>
1454
798d3a52
ZJS
1455 <para>If you specify both types of this option (i.e.
1456 whitelisting and blacklisting), the first encountered will
1457 take precedence and will dictate the default action
1458 (termination or approval of a system call). Then the next
1459 occurrences of this option will add or delete the listed
1460 system calls from the set of the filtered system calls,
1461 depending of its type and the default action. (For example, if
1462 you have started with a whitelisting of
1463 <function>read</function> and <function>write</function>, and
1464 right after it add a blacklisting of
1465 <function>write</function>, then <function>write</function>
201c1cc2
TM
1466 will be removed from the set.)</para>
1467
1468 <para>As the number of possible system
1469 calls is large, predefined sets of system calls are provided.
1470 A set starts with <literal>@</literal> character, followed by
1471 name of the set.
1472
1473 <table>
1474 <title>Currently predefined system call sets</title>
1475
1476 <tgroup cols='2'>
1477 <colspec colname='set' />
1478 <colspec colname='description' />
1479 <thead>
1480 <row>
1481 <entry>Set</entry>
1482 <entry>Description</entry>
1483 </row>
1484 </thead>
1485 <tbody>
44898c53
LP
1486 <row>
1487 <entry>@aio</entry>
1488 <entry>Asynchronous I/O (<citerefentry project='man-pages'><refentrytitle>io_setup</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>io_submit</refentrytitle><manvolnum>2</manvolnum></citerefentry>, and related calls)</entry>
1489 </row>
133ddbbe
LP
1490 <row>
1491 <entry>@basic-io</entry>
1492 <entry>System calls for basic I/O: reading, writing, seeking, file descriptor duplication and closing (<citerefentry project='man-pages'><refentrytitle>read</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>write</refentrytitle><manvolnum>2</manvolnum></citerefentry>, and related calls)</entry>
1493 </row>
44898c53
LP
1494 <row>
1495 <entry>@chown</entry>
1496 <entry>Changing file ownership (<citerefentry project='man-pages'><refentrytitle>chown</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>fchownat</refentrytitle><manvolnum>2</manvolnum></citerefentry>, and related calls)</entry>
1497 </row>
201c1cc2
TM
1498 <row>
1499 <entry>@clock</entry>
1f9ac68b
LP
1500 <entry>System calls for changing the system clock (<citerefentry project='man-pages'><refentrytitle>adjtimex</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>settimeofday</refentrytitle><manvolnum>2</manvolnum></citerefentry>, and related calls)</entry>
1501 </row>
1502 <row>
1503 <entry>@cpu-emulation</entry>
1504 <entry>System calls for CPU emulation functionality (<citerefentry project='man-pages'><refentrytitle>vm86</refentrytitle><manvolnum>2</manvolnum></citerefentry> and related calls)</entry>
1505 </row>
1506 <row>
1507 <entry>@debug</entry>
1508 <entry>Debugging, performance monitoring and tracing functionality (<citerefentry project='man-pages'><refentrytitle>ptrace</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>perf_event_open</refentrytitle><manvolnum>2</manvolnum></citerefentry> and related calls)</entry>
201c1cc2 1509 </row>
1a1b13c9
LP
1510 <row>
1511 <entry>@file-system</entry>
1512 <entry>File system operations: opening, creating files and directories for read and write, renaming and removing them, reading file properties, or creating hard and symbolic links.</entry>
1513 </row>
201c1cc2
TM
1514 <row>
1515 <entry>@io-event</entry>
1f9ac68b 1516 <entry>Event loop system calls (<citerefentry project='man-pages'><refentrytitle>poll</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>select</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>epoll</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>eventfd</refentrytitle><manvolnum>2</manvolnum></citerefentry> and related calls)</entry>
201c1cc2
TM
1517 </row>
1518 <row>
1519 <entry>@ipc</entry>
cd5bfd7e 1520 <entry>Pipes, SysV IPC, POSIX Message Queues and other IPC (<citerefentry project='man-pages'><refentrytitle>mq_overview</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>svipc</refentrytitle><manvolnum>7</manvolnum></citerefentry>)</entry>
1f9ac68b
LP
1521 </row>
1522 <row>
1523 <entry>@keyring</entry>
1524 <entry>Kernel keyring access (<citerefentry project='man-pages'><refentrytitle>keyctl</refentrytitle><manvolnum>2</manvolnum></citerefentry> and related calls)</entry>
201c1cc2 1525 </row>
cd0ddf6f
LP
1526 <row>
1527 <entry>@memlock</entry>
1528 <entry>Locking of memory into RAM (<citerefentry project='man-pages'><refentrytitle>mlock</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>mlockall</refentrytitle><manvolnum>2</manvolnum></citerefentry> and related calls)</entry>
1529 </row>
201c1cc2
TM
1530 <row>
1531 <entry>@module</entry>
d5efc18b 1532 <entry>Loading and unloading of kernel modules (<citerefentry project='man-pages'><refentrytitle>init_module</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>delete_module</refentrytitle><manvolnum>2</manvolnum></citerefentry> and related calls)</entry>
201c1cc2
TM
1533 </row>
1534 <row>
1535 <entry>@mount</entry>
d5efc18b 1536 <entry>Mounting and unmounting of file systems (<citerefentry project='man-pages'><refentrytitle>mount</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>chroot</refentrytitle><manvolnum>2</manvolnum></citerefentry>, and related calls)</entry>
201c1cc2
TM
1537 </row>
1538 <row>
1539 <entry>@network-io</entry>
1f9ac68b 1540 <entry>Socket I/O (including local AF_UNIX): <citerefentry project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>unix</refentrytitle><manvolnum>7</manvolnum></citerefentry></entry>
201c1cc2
TM
1541 </row>
1542 <row>
1543 <entry>@obsolete</entry>
1f9ac68b 1544 <entry>Unusual, obsolete or unimplemented (<citerefentry project='man-pages'><refentrytitle>create_module</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>gtty</refentrytitle><manvolnum>2</manvolnum></citerefentry>, …)</entry>
201c1cc2
TM
1545 </row>
1546 <row>
1547 <entry>@privileged</entry>
1f9ac68b 1548 <entry>All system calls which need super-user capabilities (<citerefentry project='man-pages'><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>)</entry>
201c1cc2
TM
1549 </row>
1550 <row>
1551 <entry>@process</entry>
d5efc18b 1552 <entry>Process control, execution, namespaceing operations (<citerefentry project='man-pages'><refentrytitle>clone</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>kill</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>namespaces</refentrytitle><manvolnum>7</manvolnum></citerefentry>, …</entry>
201c1cc2
TM
1553 </row>
1554 <row>
1555 <entry>@raw-io</entry>
aa6b9cec 1556 <entry>Raw I/O port access (<citerefentry project='man-pages'><refentrytitle>ioperm</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>iopl</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <function>pciconfig_read()</function>, …)</entry>
201c1cc2 1557 </row>
bd2ab3f4
LP
1558 <row>
1559 <entry>@reboot</entry>
1560 <entry>System calls for rebooting and reboot preparation (<citerefentry project='man-pages'><refentrytitle>reboot</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <function>kexec()</function>, …)</entry>
1561 </row>
133ddbbe
LP
1562 <row>
1563 <entry>@resources</entry>
1564 <entry>System calls for changing resource limits, memory and scheduling parameters (<citerefentry project='man-pages'><refentrytitle>setrlimit</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>setpriority</refentrytitle><manvolnum>2</manvolnum></citerefentry>, …)</entry>
1565 </row>
6eaaeee9
LP
1566 <row>
1567 <entry>@setuid</entry>
1568 <entry>System calls for changing user ID and group ID credentials, (<citerefentry project='man-pages'><refentrytitle>setuid</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>setgid</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>setresuid</refentrytitle><manvolnum>2</manvolnum></citerefentry>, …)</entry>
1569 </row>
cd0ddf6f
LP
1570 <row>
1571 <entry>@signal</entry>
1572 <entry>System calls for manipulating and handling process signals (<citerefentry project='man-pages'><refentrytitle>signal</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>sigprocmask</refentrytitle><manvolnum>2</manvolnum></citerefentry>, …)</entry>
1573 </row>
bd2ab3f4
LP
1574 <row>
1575 <entry>@swap</entry>
1576 <entry>System calls for enabling/disabling swap devices (<citerefentry project='man-pages'><refentrytitle>swapon</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>swapoff</refentrytitle><manvolnum>2</manvolnum></citerefentry>)</entry>
1577 </row>
44898c53
LP
1578 <row>
1579 <entry>@sync</entry>
1580 <entry>Synchronizing files and memory to disk: (<citerefentry project='man-pages'><refentrytitle>fsync</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>msync</refentrytitle><manvolnum>2</manvolnum></citerefentry>, and related calls)</entry>
1581 </row>
cd0ddf6f
LP
1582 <row>
1583 <entry>@timer</entry>
1584 <entry>System calls for scheduling operations by time (<citerefentry project='man-pages'><refentrytitle>alarm</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>timer_create</refentrytitle><manvolnum>2</manvolnum></citerefentry>, …)</entry>
1585 </row>
201c1cc2
TM
1586 </tbody>
1587 </tgroup>
1588 </table>
1589
869feb33
ZJS
1590 Note, that as new system calls are added to the kernel, additional system calls might be
1591 added to the groups above. Contents of the sets may also change between systemd
1592 versions. In addition, the list of system calls depends on the kernel version and
1593 architecture for which systemd was compiled. Use
1594 <command>systemd-analyze syscall-filter</command> to list the actual list of system calls in
1595 each filter.
1596 </para>
effbd6d2
LP
1597
1598 <para>It is recommended to combine the file system namespacing related options with
1599 <varname>SystemCallFilter=~@mount</varname>, in order to prohibit the unit's processes to undo the
1600 mappings. Specifically these are the options <varname>PrivateTmp=</varname>,
1601 <varname>PrivateDevices=</varname>, <varname>ProtectSystem=</varname>, <varname>ProtectHome=</varname>,
1602 <varname>ProtectKernelTunables=</varname>, <varname>ProtectControlGroups=</varname>,
1603 <varname>ReadOnlyPaths=</varname>, <varname>InaccessiblePaths=</varname> and
1604 <varname>ReadWritePaths=</varname>.</para></listitem>
798d3a52
ZJS
1605 </varlistentry>
1606
1607 <varlistentry>
1608 <term><varname>SystemCallErrorNumber=</varname></term>
1609
3df90f24
YW
1610 <listitem><para>Takes an <literal>errno</literal> error number (between 1 and 4095) or errno name such as
1611 <constant>EPERM</constant>, <constant>EACCES</constant> or <constant>EUCLEAN</constant>, to return when the
1612 system call filter configured with <varname>SystemCallFilter=</varname> is triggered, instead of terminating
1613 the process immediately. When this setting is not used, or when the empty string is assigned, the process
1614 will be terminated immediately when the filter is triggered.</para></listitem>
798d3a52
ZJS
1615 </varlistentry>
1616
1617 <varlistentry>
1618 <term><varname>SystemCallArchitectures=</varname></term>
1619
0b8fab97
LP
1620 <listitem><para>Takes a space-separated list of architecture identifiers to include in the system call
1621 filter. The known architecture identifiers are the same as for <varname>ConditionArchitecture=</varname>
1622 described in <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1623 as well as <constant>x32</constant>, <constant>mips64-n32</constant>, <constant>mips64-le-n32</constant>, and
1624 the special identifier <constant>native</constant>. Only system calls of the specified architectures will be
1625 permitted to processes of this unit. This is an effective way to disable compatibility with non-native
1626 architectures for processes, for example to prohibit execution of 32-bit x86 binaries on 64-bit x86-64
1627 systems. The special <constant>native</constant> identifier implicitly maps to the native architecture of the
1628 system (or more strictly: to the architecture the system manager is compiled for). If running in user mode, or
1629 in system mode, but without the <constant>CAP_SYS_ADMIN</constant> capability (e.g. setting
1630 <varname>User=nobody</varname>), <varname>NoNewPrivileges=yes</varname> is implied. Note that setting this
1631 option to a non-empty list implies that <constant>native</constant> is included too. By default, this option is
1632 set to the empty list, i.e. no system call architecture filtering is applied.</para>
1633
1634 <para>Note that system call filtering is not equally effective on all architectures. For example, on x86
1635 filtering of network socket-related calls is not possible, due to ABI limitations — a limitation that x86-64
1636 does not have, however. On systems supporting multiple ABIs at the same time — such as x86/x86-64 — it is hence
1637 recommended to limit the set of permitted system call architectures so that secondary ABIs may not be used to
1638 circumvent the restrictions applied to the native ABI of the system. In particular, setting
c29ebc1a 1639 <varname>SystemCallArchitectures=native</varname> is a good choice for disabling non-native ABIs.</para>
0b8fab97
LP
1640
1641 <para>System call architectures may also be restricted system-wide via the
1642 <varname>SystemCallArchitectures=</varname> option in the global configuration. See
1643 <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
1644 details.</para></listitem>
798d3a52
ZJS
1645 </varlistentry>
1646
1647 <varlistentry>
1648 <term><varname>RestrictAddressFamilies=</varname></term>
1649
142bd808
LP
1650 <listitem><para>Restricts the set of socket address families accessible to the processes of this unit. Takes a
1651 space-separated list of address family names to whitelist, such as <constant>AF_UNIX</constant>,
1652 <constant>AF_INET</constant> or <constant>AF_INET6</constant>. When prefixed with <constant>~</constant> the
1653 listed address families will be applied as blacklist, otherwise as whitelist. Note that this restricts access
1654 to the <citerefentry
1655 project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>2</manvolnum></citerefentry> system call
1656 only. Sockets passed into the process by other means (for example, by using socket activation with socket
1657 units, see <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>)
1658 are unaffected. Also, sockets created with <function>socketpair()</function> (which creates connected AF_UNIX
1659 sockets only) are unaffected. Note that this option has no effect on 32-bit x86, s390, s390x, mips, mips-le,
0b8fab97
LP
1660 ppc, ppc-le, pcc64, ppc64-le and is ignored (but works correctly on other ABIs, including x86-64). Note that on
1661 systems supporting multiple ABIs (such as x86/x86-64) it is recommended to turn off alternative ABIs for
1662 services, so that they cannot be used to circumvent the restrictions of this option. Specifically, it is
1663 recommended to combine this option with <varname>SystemCallArchitectures=native</varname> or similar. If
142bd808
LP
1664 running in user mode, or in system mode, but without the <constant>CAP_SYS_ADMIN</constant> capability
1665 (e.g. setting <varname>User=nobody</varname>), <varname>NoNewPrivileges=yes</varname> is implied. By default,
1666 no restrictions apply, all address families are accessible to processes. If assigned the empty string, any
1667 previous address familiy restriction changes are undone. This setting does not affect commands prefixed with
1668 <literal>+</literal>.</para>
1669
1670 <para>Use this option to limit exposure of processes to remote access, in particular via exotic and sensitive
1671 network protocols, such as <constant>AF_PACKET</constant>. Note that in most cases, the local
1672 <constant>AF_UNIX</constant> address family should be included in the configured whitelist as it is frequently
1673 used for local communication, including for
798d3a52 1674 <citerefentry><refentrytitle>syslog</refentrytitle><manvolnum>2</manvolnum></citerefentry>
142bd808 1675 logging.</para></listitem>
798d3a52
ZJS
1676 </varlistentry>
1677
add00535
LP
1678 <varlistentry>
1679 <term><varname>RestrictNamespaces=</varname></term>
1680
1681 <listitem><para>Restricts access to Linux namespace functionality for the processes of this unit. For details
1682 about Linux namespaces, see
98e9d710 1683 <citerefentry project='man-pages'><refentrytitle>namespaces</refentrytitle><manvolnum>7</manvolnum></citerefentry>. Either takes a
add00535
LP
1684 boolean argument, or a space-separated list of namespace type identifiers. If false (the default), no
1685 restrictions on namespace creation and switching are made. If true, access to any kind of namespacing is
1686 prohibited. Otherwise, a space-separated list of namespace type identifiers must be specified, consisting of
1687 any combination of: <constant>cgroup</constant>, <constant>ipc</constant>, <constant>net</constant>,
1688 <constant>mnt</constant>, <constant>pid</constant>, <constant>user</constant> and <constant>uts</constant>. Any
1689 namespace type listed is made accessible to the unit's processes, access to namespace types not listed is
ceabfb88 1690 prohibited (whitelisting). By prepending the list with a single tilde character (<literal>~</literal>) the
add00535
LP
1691 effect may be inverted: only the listed namespace types will be made inaccessible, all unlisted ones are
1692 permitted (blacklisting). If the empty string is assigned, the default namespace restrictions are applied,
1693 which is equivalent to false. Internally, this setting limits access to the
1694 <citerefentry><refentrytitle>unshare</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
1695 <citerefentry><refentrytitle>clone</refentrytitle><manvolnum>2</manvolnum></citerefentry> and
1696 <citerefentry><refentrytitle>setns</refentrytitle><manvolnum>2</manvolnum></citerefentry> system calls, taking
1697 the specified flags parameters into account. Note that — if this option is used — in addition to restricting
1698 creation and switching of the specified types of namespaces (or all of them, if true) access to the
ae9d60ce 1699 <function>setns()</function> system call with a zero flags parameter is prohibited. This setting is only
a3645cc6
JC
1700 supported on x86, x86-64, mips, mips-le, mips64, mips64-le, mips64-n32, mips64-le-n32, ppc64, ppc64-le,
1701 s390 and s390x, and enforces no restrictions on other architectures. If running in user
ae9d60ce
LP
1702 mode, or in system mode, but without the <constant>CAP_SYS_ADMIN</constant> capability (e.g. setting
1703 <varname>User=</varname>), <varname>NoNewPrivileges=yes</varname> is implied. </para></listitem>
add00535
LP
1704 </varlistentry>
1705
798d3a52
ZJS
1706 <varlistentry>
1707 <term><varname>Personality=</varname></term>
1708
7882632d
LP
1709 <listitem><para>Controls which kernel architecture <citerefentry
1710 project='man-pages'><refentrytitle>uname</refentrytitle><manvolnum>2</manvolnum></citerefentry> shall report,
1711 when invoked by unit processes. Takes one of the architecture identifiers <constant>x86</constant>,
1712 <constant>x86-64</constant>, <constant>ppc</constant>, <constant>ppc-le</constant>, <constant>ppc64</constant>,
1713 <constant>ppc64-le</constant>, <constant>s390</constant> or <constant>s390x</constant>. Which personality
1714 architectures are supported depends on the system architecture. Usually the 64bit versions of the various
1715 system architectures support their immediate 32bit personality architecture counterpart, but no others. For
1716 example, <constant>x86-64</constant> systems support the <constant>x86-64</constant> and
1717 <constant>x86</constant> personalities but no others. The personality feature is useful when running 32-bit
1718 services on a 64-bit host system. If not specified, the personality is left unmodified and thus reflects the
1719 personality of the host system's kernel.</para></listitem>
798d3a52
ZJS
1720 </varlistentry>
1721
1722 <varlistentry>
78e864e5
TM
1723 <term><varname>LockPersonality=</varname></term>
1724
e8d85bc0 1725 <listitem><para>Takes a boolean argument. If set, locks down the <citerefentry
78e864e5
TM
1726 project='man-pages'><refentrytitle>personality</refentrytitle><manvolnum>2</manvolnum></citerefentry> system
1727 call so that the kernel execution domain may not be changed from the default or the personality selected with
1728 <varname>Personality=</varname> directive. This may be useful to improve security, because odd personality
1729 emulations may be poorly tested and source of vulnerabilities. If running in user mode, or in system mode, but
1730 without the <constant>CAP_SYS_ADMIN</constant> capability (e.g. setting <varname>User=</varname>),
1731 <varname>NoNewPrivileges=yes</varname> is implied.</para></listitem>
1732 </varlistentry>
1733
b1edf445
LP
1734 <varlistentry>
1735 <term><varname>KeyringMode=</varname></term>
1736
1737 <listitem><para>Controls how the kernel session keyring is set up for the service (see <citerefentry
1738 project='man-pages'><refentrytitle>session-keyring</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
1739 details on the session keyring). Takes one of <option>inherit</option>, <option>private</option>,
1740 <option>shared</option>. If set to <option>inherit</option> no special keyring setup is done, and the kernel's
1741 default behaviour is applied. If <option>private</option> is used a new session keyring is allocated when a
1742 service process is invoked, and it is not linked up with any user keyring. This is the recommended setting for
1743 system services, as this ensures that multiple services running under the same system user ID (in particular
1744 the root user) do not share their key material among each other. If <option>shared</option> is used a new
1745 session keyring is allocated as for <option>private</option>, but the user keyring of the user configured with
1746 <varname>User=</varname> is linked into it, so that keys assigned to the user may be requested by the unit's
1747 processes. In this modes multiple units running processes under the same user ID may share key material. Unless
1748 <option>inherit</option> is selected the unique invocation ID for the unit (see below) is added as a protected
1749 key by the name <literal>invocation_id</literal> to the newly created session keyring. Defaults to
1750 <option>private</option> for the system service manager and to <option>inherit</option> for the user service
1751 manager.</para></listitem>
78e864e5
TM
1752 </varlistentry>
1753
1754 <varlistentry>
798d3a52 1755 <term><varname>RuntimeDirectory=</varname></term>
4a628360
LP
1756 <term><varname>StateDirectory=</varname></term>
1757 <term><varname>CacheDirectory=</varname></term>
1758 <term><varname>LogsDirectory=</varname></term>
1759 <term><varname>ConfigurationDirectory=</varname></term>
798d3a52 1760
4a628360
LP
1761 <listitem><para>These options take a whitespace-separated list of directory names. The specified directory
1762 names must be relative, and may not include <literal>.</literal> or <literal>..</literal>. If set, one or more
1763 directories by the specified names will be created (including their parents) below <filename>/run</filename>
1764 (or <varname>$XDG_RUNTIME_DIR</varname> for user services), <filename>/var/lib</filename> (or
1765 <varname>$XDG_CONFIG_HOME</varname> for user services), <filename>/var/cache</filename> (or
1766 <varname>$XDG_CACHE_HOME</varname> for user services), <filename>/var/log</filename> (or
1767 <varname>$XDG_CONFIG_HOME</varname><filename>/log</filename> for user services), or <filename>/etc</filename>
1768 (or <varname>$XDG_CONFIG_HOME</varname> for user services), respectively, when the unit is started.</para>
1769
1770 <para>In case of <varname>RuntimeDirectory=</varname> the lowest subdirectories are removed when the unit is
1771 stopped. It is possible to preserve the specified directories in this case if
1772 <varname>RuntimeDirectoryPreserve=</varname> is configured to <option>restart</option> or <option>yes</option>
1773 (see below). The directories specified with <varname>StateDirectory=</varname>,
1774 <varname>CacheDirectory=</varname>, <varname>LogsDirectory=</varname>,
1775 <varname>ConfigurationDirectory=</varname> are not removed when the unit is stopped.</para>
1776
1777 <para>Except in case of <varname>ConfigurationDirectory=</varname>, the innermost specified directories will be
1778 owned by the user and group specified in <varname>User=</varname> and <varname>Group=</varname>. If the
1779 specified directories already exist and their owning user or group do not match the configured ones, all files
1780 and directories below the specified directories as well as the directories themselves will have their file
1781 ownership recursively changed to match what is configured. As an optimization, if the specified directories are
1782 already owned by the right user and group, files and directories below of them are left as-is, even if they do
1783 not match what is requested. The innermost specified directories will have their access mode adjusted to the
1784 what is specified in <varname>RuntimeDirectoryMode=</varname>, <varname>StateDirectoryMode=</varname>,
1785 <varname>CacheDirectoryMode=</varname>, <varname>LogsDirectoryMode=</varname> and
1786 <varname>ConfigurationDirectoryMode=</varname>.</para>
1787
fdfcb946 1788 <para>These options imply <varname>BindPaths=</varname> for the specified paths. When combined with
4a628360 1789 <varname>RootDirectory=</varname> or <varname>RootImage=</varname> these paths always reside on the host and
fdfcb946
YW
1790 are mounted from there into the unit's file system namespace.</para>
1791
1792 <para>If <varname>DynamicUser=</varname> is used in conjunction with <varname>StateDirectory=</varname>,
1793 <varname>CacheDirectory=</varname> and <varname>LogsDirectory=</varname> is slightly altered: the directories
1794 are created below <filename>/var/lib/private</filename>, <filename>/var/cache/private</filename> and
4a628360
LP
1795 <filename>/var/log/private</filename>, respectively, which are host directories made inaccessible to
1796 unprivileged users, which ensures that access to these directories cannot be gained through dynamic user ID
1797 recycling. Symbolic links are created to hide this difference in behaviour. Both from perspective of the host
1798 and from inside the unit, the relevant directories hence always appear directly below
fdfcb946 1799 <filename>/var/lib</filename>, <filename>/var/cache</filename> and <filename>/var/log</filename>.</para>
4a628360
LP
1800
1801 <para>Use <varname>RuntimeDirectory=</varname> to manage one or more runtime directories for the unit and bind
1802 their lifetime to the daemon runtime. This is particularly useful for unprivileged daemons that cannot create
23a7448e 1803 runtime directories in <filename>/run</filename> due to lack of privileges, and to make sure the runtime
4a628360
LP
1804 directory is cleaned up automatically after use. For runtime directories that require more complex or different
1805 configuration or lifetime guarantees, please consider using
23a7448e
YW
1806 <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
1807
1808 <para>Example: if a system service unit has the following,
1809 <programlisting>RuntimeDirectory=foo/bar baz</programlisting>
1810 the service manager creates <filename>/run/foo</filename> (if it does not exist), <filename>/run/foo/bar</filename>,
1811 and <filename>/run/baz</filename>. The directories <filename>/run/foo/bar</filename> and <filename>/run/baz</filename>
1812 except <filename>/run/foo</filename> are owned by the user and group specified in <varname>User=</varname> and
1813 <varname>Group=</varname>, and removed when the service is stopped.
1814 </para></listitem>
3536f49e 1815
3536f49e
YW
1816 </varlistentry>
1817
189cd8c2
ZJS
1818 <varlistentry>
1819 <term><varname>RuntimeDirectoryMode=</varname></term>
3536f49e
YW
1820 <term><varname>StateDirectoryMode=</varname></term>
1821 <term><varname>CacheDirectoryMode=</varname></term>
1822 <term><varname>LogsDirectoryMode=</varname></term>
1823 <term><varname>ConfigurationDirectoryMode=</varname></term>
189cd8c2
ZJS
1824
1825 <listitem><para>Specifies the access mode of the directories specified in
3536f49e
YW
1826 <varname>RuntimeDirectory=</varname>, <varname>StateDirectory=</varname>, <varname>CacheDirectory=</varname>,
1827 <varname>LogsDirectory=</varname>, or <varname>ConfigurationDirectory=</varname>, respectively, as an octal number.
1828 Defaults to <constant>0755</constant>. See "Permissions" in
23a7448e
YW
1829 <citerefentry project='man-pages'><refentrytitle>path_resolution</refentrytitle><manvolnum>7</manvolnum></citerefentry>
1830 for a discussion of the meaning of permission bits.
189cd8c2
ZJS
1831 </para></listitem>
1832 </varlistentry>
1833
53f47dfc
YW
1834 <varlistentry>
1835 <term><varname>RuntimeDirectoryPreserve=</varname></term>
1836
1837 <listitem><para>Takes a boolean argument or <option>restart</option>.
1838 If set to <option>no</option> (the default), the directories specified in <varname>RuntimeDirectory=</varname>
1839 are always removed when the service stops. If set to <option>restart</option> the directories are preserved
1840 when the service is both automatically and manually restarted. Here, the automatic restart means the operation
1841 specified in <varname>Restart=</varname>, and manual restart means the one triggered by
1842 <command>systemctl restart foo.service</command>. If set to <option>yes</option>, then the directories are not
1843 removed when the service is stopped. Note that since the runtime directory <filename>/run</filename> is a mount
1844 point of <literal>tmpfs</literal>, then for system services the directories specified in
1845 <varname>RuntimeDirectory=</varname> are removed when the system is rebooted.
189cd8c2
ZJS
1846 </para></listitem>
1847 </varlistentry>
1848
f3e43635
TM
1849 <varlistentry>
1850 <term><varname>MemoryDenyWriteExecute=</varname></term>
1851
1852 <listitem><para>Takes a boolean argument. If set, attempts to create memory mappings that are writable and
8a50cf69
LP
1853 executable at the same time, or to change existing memory mappings to become executable, or mapping shared
1854 memory segments as executable are prohibited. Specifically, a system call filter is added that rejects
1855 <citerefentry><refentrytitle>mmap</refentrytitle><manvolnum>2</manvolnum></citerefentry> system calls with both
1856 <constant>PROT_EXEC</constant> and <constant>PROT_WRITE</constant> set,
b835eeb4
ZJS
1857 <citerefentry><refentrytitle>mprotect</refentrytitle><manvolnum>2</manvolnum></citerefentry>
1858 or <citerefentry><refentrytitle>pkey_mprotect</refentrytitle><manvolnum>2</manvolnum></citerefentry>
1859 system calls with <constant>PROT_EXEC</constant> set and
8a50cf69 1860 <citerefentry><refentrytitle>shmat</refentrytitle><manvolnum>2</manvolnum></citerefentry> system calls with
03c3c520
ZJS
1861 <constant>SHM_EXEC</constant> set. Note that this option is incompatible with programs and libraries that
1862 generate program code dynamically at runtime, including JIT execution engines, executable stacks, and code
8a50cf69
LP
1863 "trampoline" feature of various C compilers. This option improves service security, as it makes harder for
1864 software exploits to change running code dynamically. Note that this feature is fully available on x86-64, and
0b8fab97
LP
1865 partially on x86. Specifically, the <function>shmat()</function> protection is not available on x86. Note that
1866 on systems supporting multiple ABIs (such as x86/x86-64) it is recommended to turn off alternative ABIs for
1867 services, so that they cannot be used to circumvent the restrictions of this option. Specifically, it is
1868 recommended to combine this option with <varname>SystemCallArchitectures=native</varname> or similar. If
1869 running in user mode, or in system mode, but without the <constant>CAP_SYS_ADMIN</constant> capability
3536f49e 1870 (e.g. setting <varname>User=</varname>), <varname>NoNewPrivileges=yes</varname> is implied.</para></listitem>
f3e43635
TM
1871 </varlistentry>
1872
f4170c67
LP
1873 <varlistentry>
1874 <term><varname>RestrictRealtime=</varname></term>
1875
1876 <listitem><para>Takes a boolean argument. If set, any attempts to enable realtime scheduling in a process of
1877 the unit are refused. This restricts access to realtime task scheduling policies such as
1878 <constant>SCHED_FIFO</constant>, <constant>SCHED_RR</constant> or <constant>SCHED_DEADLINE</constant>. See
0a07667d 1879 <citerefentry project='man-pages'><refentrytitle>sched</refentrytitle><manvolnum>7</manvolnum></citerefentry> for details about
a7db8614
DH
1880 these scheduling policies. If running in user mode, or in system mode, but
1881 without the <constant>CAP_SYS_ADMIN</constant> capability
1882 (e.g. setting <varname>User=</varname>), <varname>NoNewPrivileges=yes</varname>
1883 is implied. Realtime scheduling policies may be used to monopolize CPU time for longer periods
f4170c67
LP
1884 of time, and may hence be used to lock up or otherwise trigger Denial-of-Service situations on the system. It
1885 is hence recommended to restrict access to realtime scheduling to the few programs that actually require
1886 them. Defaults to off.</para></listitem>
1887 </varlistentry>
1888
798d3a52
ZJS
1889 </variablelist>
1890 </refsect1>
1891
1892 <refsect1>
1893 <title>Environment variables in spawned processes</title>
1894
00819cc1
LP
1895 <para>Processes started by the service manager are executed with an environment variable block assembled from
1896 multiple sources. Processes started by the system service manager generally do not inherit environment variables
1897 set for the service manager itself (but this may be altered via <varname>PassEnvironment=</varname>), but processes
1898 started by the user service manager instances generally do inherit all environment variables set for the service
1899 manager itself.</para>
1900
1901 <para>For each invoked process the list of environment variables set is compiled from the following sources:</para>
1902
1903 <itemizedlist>
1904 <listitem><para>Variables globally configured for the service manager, using the
1905 <varname>DefaultEnvironment=</varname> setting in
1906 <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>, the kernel command line option <varname>systemd.setenv=</varname> (see
1907 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>) or via
1908 <command>systemctl set-environment</command> (see <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>).</para></listitem>
1909
1910 <listitem><para>Variables defined by the service manager itself (see the list below)</para></listitem>
1911
1912 <listitem><para>Variables set in the service manager's own environment variable block (subject to <varname>PassEnvironment=</varname> for the system service manager)</para></listitem>
1913
1914 <listitem><para>Variables set via <varname>Environment=</varname> in the unit file</para></listitem>
1915
1916 <listitem><para>Variables read from files specified via <varname>EnvironmentFiles=</varname> in the unit file</para></listitem>
1917
1918 <listitem><para>Variables set by any PAM modules in case <varname>PAMName=</varname> is in effect, cf. <citerefentry project='man-pages'><refentrytitle>pam_env</refentrytitle><manvolnum>8</manvolnum></citerefentry></para></listitem>
1919 </itemizedlist>
1920
1921 <para>If the same environment variables are set by multiple of these sources, the later source — according to the
1922 order of the list above — wins. Note that as final step all variables listed in
1923 <varname>UnsetEnvironment=</varname> are removed again from the compiled environment variable list, immediately
1924 before it is passed to the executed process.</para>
1925
1926 <para>The following select environment variables are set by the service manager itself for each invoked process:</para>
798d3a52
ZJS
1927
1928 <variablelist class='environment-variables'>
1929 <varlistentry>
1930 <term><varname>$PATH</varname></term>
1931
1932 <listitem><para>Colon-separated list of directories to use
1933 when launching executables. Systemd uses a fixed value of
1934 <filename>/usr/local/sbin</filename>:<filename>/usr/local/bin</filename>:<filename>/usr/sbin</filename>:<filename>/usr/bin</filename>:<filename>/sbin</filename>:<filename>/bin</filename>.
1935 </para></listitem>
1936 </varlistentry>
1937
1938 <varlistentry>
1939 <term><varname>$LANG</varname></term>
1940
1941 <listitem><para>Locale. Can be set in
3ba3a79d 1942 <citerefentry project='man-pages'><refentrytitle>locale.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
798d3a52
ZJS
1943 or on the kernel command line (see
1944 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
1945 and
1946 <citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>).
1947 </para></listitem>
1948 </varlistentry>
1949
1950 <varlistentry>
1951 <term><varname>$USER</varname></term>
1952 <term><varname>$LOGNAME</varname></term>
1953 <term><varname>$HOME</varname></term>
1954 <term><varname>$SHELL</varname></term>
1955
1956 <listitem><para>User name (twice), home directory, and the
23deef88
LP
1957 login shell. The variables are set for the units that have
1958 <varname>User=</varname> set, which includes user
1959 <command>systemd</command> instances. See
3ba3a79d 1960 <citerefentry project='die-net'><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
798d3a52
ZJS
1961 </para></listitem>
1962 </varlistentry>
1963
4b58153d
LP
1964 <varlistentry>
1965 <term><varname>$INVOCATION_ID</varname></term>
1966
1967 <listitem><para>Contains a randomized, unique 128bit ID identifying each runtime cycle of the unit, formatted
1968 as 32 character hexadecimal string. A new ID is assigned each time the unit changes from an inactive state into
1969 an activating or active state, and may be used to identify this specific runtime cycle, in particular in data
1970 stored offline, such as the journal. The same ID is passed to all processes run as part of the
1971 unit.</para></listitem>
1972 </varlistentry>
1973
798d3a52
ZJS
1974 <varlistentry>
1975 <term><varname>$XDG_RUNTIME_DIR</varname></term>
1976
1977 <listitem><para>The directory for volatile state. Set for the
1978 user <command>systemd</command> instance, and also in user
1979 sessions. See
1980 <citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
1981 </para></listitem>
1982 </varlistentry>
1983
1984 <varlistentry>
1985 <term><varname>$XDG_SESSION_ID</varname></term>
1986 <term><varname>$XDG_SEAT</varname></term>
1987 <term><varname>$XDG_VTNR</varname></term>
1988
1989 <listitem><para>The identifier of the session, the seat name,
1990 and virtual terminal of the session. Set by
1991 <citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry>
1992 for login sessions. <varname>$XDG_SEAT</varname> and
1993 <varname>$XDG_VTNR</varname> will only be set when attached to
1994 a seat and a tty.</para></listitem>
1995 </varlistentry>
1996
1997 <varlistentry>
1998 <term><varname>$MAINPID</varname></term>
1999
2dd67817 2000 <listitem><para>The PID of the unit's main process if it is
798d3a52
ZJS
2001 known. This is only set for control processes as invoked by
2002 <varname>ExecReload=</varname> and similar. </para></listitem>
2003 </varlistentry>
2004
2005 <varlistentry>
2006 <term><varname>$MANAGERPID</varname></term>
2007
2008 <listitem><para>The PID of the user <command>systemd</command>
2009 instance, set for processes spawned by it. </para></listitem>
2010 </varlistentry>
2011
2012 <varlistentry>
2013 <term><varname>$LISTEN_FDS</varname></term>
2014 <term><varname>$LISTEN_PID</varname></term>
5c019cf2 2015 <term><varname>$LISTEN_FDNAMES</varname></term>
798d3a52
ZJS
2016
2017 <listitem><para>Information about file descriptors passed to a
2018 service for socket activation. See
2019 <citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
2020 </para></listitem>
2021 </varlistentry>
2022
5c019cf2
EV
2023 <varlistentry>
2024 <term><varname>$NOTIFY_SOCKET</varname></term>
2025
2026 <listitem><para>The socket
2027 <function>sd_notify()</function> talks to. See
2028 <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
2029 </para></listitem>
2030 </varlistentry>
2031
2032 <varlistentry>
2033 <term><varname>$WATCHDOG_PID</varname></term>
2034 <term><varname>$WATCHDOG_USEC</varname></term>
2035
2036 <listitem><para>Information about watchdog keep-alive notifications. See
2037 <citerefentry><refentrytitle>sd_watchdog_enabled</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
2038 </para></listitem>
2039 </varlistentry>
2040
798d3a52
ZJS
2041 <varlistentry>
2042 <term><varname>$TERM</varname></term>
2043
2044 <listitem><para>Terminal type, set only for units connected to
2045 a terminal (<varname>StandardInput=tty</varname>,
2046 <varname>StandardOutput=tty</varname>, or
2047 <varname>StandardError=tty</varname>). See
2048 <citerefentry project='man-pages'><refentrytitle>termcap</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
2049 </para></listitem>
2050 </varlistentry>
7bce046b
LP
2051
2052 <varlistentry>
2053 <term><varname>$JOURNAL_STREAM</varname></term>
2054
2055 <listitem><para>If the standard output or standard error output of the executed processes are connected to the
2056 journal (for example, by setting <varname>StandardError=journal</varname>) <varname>$JOURNAL_STREAM</varname>
2057 contains the device and inode numbers of the connection file descriptor, formatted in decimal, separated by a
2058 colon (<literal>:</literal>). This permits invoked processes to safely detect whether their standard output or
2059 standard error output are connected to the journal. The device and inode numbers of the file descriptors should
2060 be compared with the values set in the environment variable to determine whether the process output is still
2061 connected to the journal. Note that it is generally not sufficient to only check whether
2062 <varname>$JOURNAL_STREAM</varname> is set at all as services might invoke external processes replacing their
2063 standard output or standard error output, without unsetting the environment variable.</para>
2064
ab2116b1
LP
2065 <para>If both standard output and standard error of the executed processes are connected to the journal via a
2066 stream socket, this environment variable will contain information about the standard error stream, as that's
2067 usually the preferred destination for log data. (Note that typically the same stream is used for both standard
2068 output and standard error, hence very likely the environment variable contains device and inode information
2069 matching both stream file descriptors.)</para>
2070
7bce046b
LP
2071 <para>This environment variable is primarily useful to allow services to optionally upgrade their used log
2072 protocol to the native journal protocol (using
2073 <citerefentry><refentrytitle>sd_journal_print</refentrytitle><manvolnum>3</manvolnum></citerefentry> and other
2074 functions) if their standard output or standard error output is connected to the journal anyway, thus enabling
2075 delivery of structured metadata along with logged messages.</para></listitem>
2076 </varlistentry>
136dc4c4
LP
2077
2078 <varlistentry>
2079 <term><varname>$SERVICE_RESULT</varname></term>
2080
2081 <listitem><para>Only defined for the service unit type, this environment variable is passed to all
2082 <varname>ExecStop=</varname> and <varname>ExecStopPost=</varname> processes, and encodes the service
38a7c3c0
LP
2083 "result". Currently, the following values are defined:</para>
2084
2085 <table>
2086 <title>Defined <varname>$SERVICE_RESULT</varname> values</title>
2087 <tgroup cols='2'>
2088 <colspec colname='result'/>
2089 <colspec colname='meaning'/>
2090 <thead>
2091 <row>
2092 <entry>Value</entry>
2093 <entry>Meaning</entry>
2094 </row>
2095 </thead>
2096
2097 <tbody>
2098 <row>
2099 <entry><literal>success</literal></entry>
e124ccdf 2100 <entry>The service ran successfully and exited cleanly.</entry>
38a7c3c0
LP
2101 </row>
2102 <row>
2103 <entry><literal>protocol</literal></entry>
e124ccdf 2104 <entry>A protocol violation occurred: the service did not take the steps required by its unit configuration (specifically what is configured in its <varname>Type=</varname> setting).</entry>
38a7c3c0
LP
2105 </row>
2106 <row>
2107 <entry><literal>timeout</literal></entry>
e124ccdf 2108 <entry>One of the steps timed out.</entry>
38a7c3c0
LP
2109 </row>
2110 <row>
2111 <entry><literal>exit-code</literal></entry>
e124ccdf 2112 <entry>Service process exited with a non-zero exit code; see <varname>$EXIT_CODE</varname> below for the actual exit code returned.</entry>
38a7c3c0
LP
2113 </row>
2114 <row>
2115 <entry><literal>signal</literal></entry>
e124ccdf 2116 <entry>A service process was terminated abnormally by a signal, without dumping core. See <varname>$EXIT_CODE</varname> below for the actual signal causing the termination.</entry>
38a7c3c0
LP
2117 </row>
2118 <row>
2119 <entry><literal>core-dump</literal></entry>
e124ccdf 2120 <entry>A service process terminated abnormally with a signal and dumped core. See <varname>$EXIT_CODE</varname> below for the signal causing the termination.</entry>
38a7c3c0
LP
2121 </row>
2122 <row>
2123 <entry><literal>watchdog</literal></entry>
e124ccdf 2124 <entry>Watchdog keep-alive ping was enabled for the service, but the deadline was missed.</entry>
38a7c3c0
LP
2125 </row>
2126 <row>
2127 <entry><literal>start-limit-hit</literal></entry>
e124ccdf 2128 <entry>A start limit was defined for the unit and it was hit, causing the unit to fail to start. See <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>'s <varname>StartLimitIntervalSec=</varname> and <varname>StartLimitBurst=</varname> for details.</entry>
38a7c3c0
LP
2129 </row>
2130 <row>
2131 <entry><literal>resources</literal></entry>
2132 <entry>A catch-all condition in case a system operation failed.</entry>
2133 </row>
2134 </tbody>
2135 </tgroup>
2136 </table>
136dc4c4
LP
2137
2138 <para>This environment variable is useful to monitor failure or successful termination of a service. Even
2139 though this variable is available in both <varname>ExecStop=</varname> and <varname>ExecStopPost=</varname>, it
2140 is usually a better choice to place monitoring tools in the latter, as the former is only invoked for services
2141 that managed to start up correctly, and the latter covers both services that failed during their start-up and
2142 those which failed during their runtime.</para></listitem>
2143 </varlistentry>
2144
2145 <varlistentry>
2146 <term><varname>$EXIT_CODE</varname></term>
2147 <term><varname>$EXIT_STATUS</varname></term>
2148
2149 <listitem><para>Only defined for the service unit type, these environment variables are passed to all
2150 <varname>ExecStop=</varname>, <varname>ExecStopPost=</varname> processes and contain exit status/code
2151 information of the main process of the service. For the precise definition of the exit code and status, see
2152 <citerefentry><refentrytitle>wait</refentrytitle><manvolnum>2</manvolnum></citerefentry>. <varname>$EXIT_CODE</varname>
2153 is one of <literal>exited</literal>, <literal>killed</literal>,
2154 <literal>dumped</literal>. <varname>$EXIT_STATUS</varname> contains the numeric exit code formatted as string
2155 if <varname>$EXIT_CODE</varname> is <literal>exited</literal>, and the signal name in all other cases. Note
2156 that these environment variables are only set if the service manager succeeded to start and identify the main
e64e1bfd
ZJS
2157 process of the service.</para>
2158
2159 <table>
2160 <title>Summary of possible service result variable values</title>
2161 <tgroup cols='3'>
2162 <colspec colname='result' />
e64e1bfd 2163 <colspec colname='code' />
a4e26faf 2164 <colspec colname='status' />
e64e1bfd
ZJS
2165 <thead>
2166 <row>
2167 <entry><varname>$SERVICE_RESULT</varname></entry>
e64e1bfd 2168 <entry><varname>$EXIT_CODE</varname></entry>
a4e26faf 2169 <entry><varname>$EXIT_STATUS</varname></entry>
e64e1bfd
ZJS
2170 </row>
2171 </thead>
2172
2173 <tbody>
38a7c3c0
LP
2174 <row>
2175 <entry valign="top"><literal>success</literal></entry>
2176 <entry valign="top"><literal>exited</literal></entry>
2177 <entry><literal>0</literal></entry>
2178 </row>
a4e26faf
JW
2179 <row>
2180 <entry morerows="1" valign="top"><literal>protocol</literal></entry>
2181 <entry valign="top">not set</entry>
2182 <entry>not set</entry>
2183 </row>
2184 <row>
2185 <entry><literal>exited</literal></entry>
2186 <entry><literal>0</literal></entry>
2187 </row>
29df65f9
ZJS
2188 <row>
2189 <entry morerows="1" valign="top"><literal>timeout</literal></entry>
2190 <entry valign="top"><literal>killed</literal></entry>
6757c06a 2191 <entry><literal>TERM</literal>, <literal>KILL</literal></entry>
29df65f9 2192 </row>
29df65f9
ZJS
2193 <row>
2194 <entry valign="top"><literal>exited</literal></entry>
6757c06a
LP
2195 <entry><literal>0</literal>, <literal>1</literal>, <literal>2</literal>, <literal
2196 >3</literal>, …, <literal>255</literal></entry>
29df65f9 2197 </row>
e64e1bfd
ZJS
2198 <row>
2199 <entry valign="top"><literal>exit-code</literal></entry>
2200 <entry valign="top"><literal>exited</literal></entry>
38a7c3c0 2201 <entry><literal>1</literal>, <literal>2</literal>, <literal
6757c06a 2202 >3</literal>, …, <literal>255</literal></entry>
e64e1bfd 2203 </row>
e64e1bfd
ZJS
2204 <row>
2205 <entry valign="top"><literal>signal</literal></entry>
2206 <entry valign="top"><literal>killed</literal></entry>
6757c06a 2207 <entry><literal>HUP</literal>, <literal>INT</literal>, <literal>KILL</literal>, …</entry>
e64e1bfd 2208 </row>
e64e1bfd
ZJS
2209 <row>
2210 <entry valign="top"><literal>core-dump</literal></entry>
2211 <entry valign="top"><literal>dumped</literal></entry>
6757c06a 2212 <entry><literal>ABRT</literal>, <literal>SEGV</literal>, <literal>QUIT</literal>, …</entry>
e64e1bfd 2213 </row>
e64e1bfd
ZJS
2214 <row>
2215 <entry morerows="2" valign="top"><literal>watchdog</literal></entry>
2216 <entry><literal>dumped</literal></entry>
2217 <entry><literal>ABRT</literal></entry>
2218 </row>
2219 <row>
2220 <entry><literal>killed</literal></entry>
6757c06a 2221 <entry><literal>TERM</literal>, <literal>KILL</literal></entry>
e64e1bfd
ZJS
2222 </row>
2223 <row>
2224 <entry><literal>exited</literal></entry>
6757c06a
LP
2225 <entry><literal>0</literal>, <literal>1</literal>, <literal>2</literal>, <literal
2226 >3</literal>, …, <literal>255</literal></entry>
e64e1bfd 2227 </row>
38a7c3c0
LP
2228 <row>
2229 <entry><literal>start-limit-hit</literal></entry>
2230 <entry>not set</entry>
2231 <entry>not set</entry>
2232 </row>
e64e1bfd
ZJS
2233 <row>
2234 <entry><literal>resources</literal></entry>
2235 <entry>any of the above</entry>
2236 <entry>any of the above</entry>
2237 </row>
29df65f9 2238 <row>
38a7c3c0 2239 <entry namest="results" nameend="status">Note: the process may be also terminated by a signal not sent by systemd. In particular the process may send an arbitrary signal to itself in a handler for any of the non-maskable signals. Nevertheless, in the <literal>timeout</literal> and <literal>watchdog</literal> rows above only the signals that systemd sends have been included. Moreover, using <varname>SuccessExitStatus=</varname> additional exit statuses may be declared to indicate clean termination, which is not reflected by this table.</entry>
29df65f9 2240 </row>
e64e1bfd
ZJS
2241 </tbody>
2242 </tgroup>
2243 </table>
2244
2245 </listitem>
2246 </varlistentry>
798d3a52 2247 </variablelist>
798d3a52
ZJS
2248 </refsect1>
2249
91a8f867
JS
2250 <refsect1>
2251 <title>Process exit codes</title>
2252
2253 <para>When invoking a unit process the service manager possibly fails to apply the execution parameters configured
2254 with the settings above. In that case the already created service process will exit with a non-zero exit code
2255 before the configured command line is executed. (Or in other words, the child process possibly exits with these
2256 error codes, after having been created by the <citerefentry
2257 project='man-pages'><refentrytitle>fork</refentrytitle><manvolnum>2</manvolnum></citerefentry> system call, but
2258 before the matching <citerefentry
2259 project='man-pages'><refentrytitle>execve</refentrytitle><manvolnum>2</manvolnum></citerefentry> system call is
2260 called.) Specifically, exit codes defined by the C library, by the LSB specification and by the systemd service
2261 manager itself are used.</para>
2262
2263 <para>The following basic service exit codes are defined by the C library.</para>
2264
2265 <table>
2266 <title>Basic C library exit codes</title>
2267 <tgroup cols='3'>
2268 <thead>
2269 <row>
2270 <entry>Exit Code</entry>
2271 <entry>Symbolic Name</entry>
2272 <entry>Description</entry>
2273 </row>
2274 </thead>
2275 <tbody>
2276 <row>
2277 <entry>0</entry>
2278 <entry><constant>EXIT_SUCCESS</constant></entry>
2279 <entry>Generic success code.</entry>
2280 </row>
2281 <row>
2282 <entry>1</entry>
2283 <entry><constant>EXIT_FAILURE</constant></entry>
2284 <entry>Generic failure or unspecified error.</entry>
2285 </row>
2286 </tbody>
2287 </tgroup>
2288 </table>
2289
2290 <para>The following service exit codes are defined by the <ulink
2291 url="https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html">LSB specification
2292 </ulink>.
2293 </para>
2294
2295 <table>
2296 <title>LSB service exit codes</title>
2297 <tgroup cols='3'>
2298 <thead>
2299 <row>
2300 <entry>Exit Code</entry>
2301 <entry>Symbolic Name</entry>
2302 <entry>Description</entry>
2303 </row>
2304 </thead>
2305 <tbody>
2306 <row>
2307 <entry>2</entry>
2308 <entry><constant>EXIT_INVALIDARGUMENT</constant></entry>
2309 <entry>Invalid or excess arguments.</entry>
2310 </row>
2311 <row>
2312 <entry>3</entry>
2313 <entry><constant>EXIT_NOTIMPLEMENTED</constant></entry>
2314 <entry>Unimplemented feature.</entry>
2315 </row>
2316 <row>
2317 <entry>4</entry>
2318 <entry><constant>EXIT_NOPERMISSION</constant></entry>
2319 <entry>The user has insufficient privileges.</entry>
2320 </row>
2321 <row>
2322 <entry>5</entry>
2323 <entry><constant>EXIT_NOTINSTALLED</constant></entry>
2324 <entry>The program is not installed.</entry>
2325 </row>
2326 <row>
2327 <entry>6</entry>
2328 <entry><constant>EXIT_NOTCONFIGURED</constant></entry>
2329 <entry>The program is not configured.</entry>
2330 </row>
2331 <row>
2332 <entry>7</entry>
2333 <entry><constant>EXIT_NOTRUNNING</constant></entry>
2334 <entry>The program is not running.</entry>
2335 </row>
2336 </tbody>
2337 </tgroup>
2338 </table>
2339
2340 <para>
2341 The LSB specification suggests that error codes 200 and above are reserved for implementations. Some of them are
2342 used by the service manager to indicate problems during process invocation:
2343 </para>
2344 <table>
2345 <title>systemd-specific exit codes</title>
2346 <tgroup cols='3'>
2347 <thead>
2348 <row>
2349 <entry>Exit Code</entry>
2350 <entry>Symbolic Name</entry>
2351 <entry>Description</entry>
2352 </row>
2353 </thead>
2354 <tbody>
2355 <row>
2356 <entry>200</entry>
2357 <entry><constant>EXIT_CHDIR</constant></entry>
2358 <entry>Changing to the requested working directory failed. See <varname>WorkingDirectory=</varname> above.</entry>
2359 </row>
2360 <row>
2361 <entry>201</entry>
2362 <entry><constant>EXIT_NICE</constant></entry>
2363 <entry>Failed to set up process scheduling priority (nice level). See <varname>Nice=</varname> above.</entry>
2364 </row>
2365 <row>
2366 <entry>202</entry>
2367 <entry><constant>EXIT_FDS</constant></entry>
2368 <entry>Failed to close unwanted file descriptors, or to adjust passed file descriptors.</entry>
2369 </row>
2370 <row>
2371 <entry>203</entry>
2372 <entry><constant>EXIT_EXEC</constant></entry>
2373 <entry>The actual process execution failed (specifically, the <citerefentry project='man-pages'><refentrytitle>execve</refentrytitle><manvolnum>2</manvolnum></citerefentry> system call). Most likely this is caused by a missing or non-accessible executable file.</entry>
2374 </row>
2375 <row>
2376 <entry>204</entry>
2377 <entry><constant>EXIT_MEMORY</constant></entry>
2378 <entry>Failed to perform an action due to memory shortage.</entry>
2379 </row>
2380 <row>
2381 <entry>205</entry>
2382 <entry><constant>EXIT_LIMITS</constant></entry>
dcfaecc7 2383 <entry>Failed to adjust resource limits. See <varname>LimitCPU=</varname> and related settings above.</entry>
91a8f867
JS
2384 </row>
2385 <row>
2386 <entry>206</entry>
2387 <entry><constant>EXIT_OOM_ADJUST</constant></entry>
2388 <entry>Failed to adjust the OOM setting. See <varname>OOMScoreAdjust=</varname> above.</entry>
2389 </row>
2390 <row>
2391 <entry>207</entry>
2392 <entry><constant>EXIT_SIGNAL_MASK</constant></entry>
2393 <entry>Failed to set process signal mask.</entry>
2394 </row>
2395 <row>
2396 <entry>208</entry>
2397 <entry><constant>EXIT_STDIN</constant></entry>
2398 <entry>Failed to set up standard input. See <varname>StandardInput=</varname> above.</entry>
2399 </row>
2400 <row>
2401 <entry>209</entry>
2402 <entry><constant>EXIT_STDOUT</constant></entry>
2403 <entry>Failed to set up standard output. See <varname>StandardOutput=</varname> above.</entry>
2404 </row>
2405 <row>
2406 <entry>210</entry>
2407 <entry><constant>EXIT_CHROOT</constant></entry>
2408 <entry>Failed to change root directory (<citerefentry project='man-pages'><refentrytitle>chroot</refentrytitle><manvolnum>2</manvolnum></citerefentry>). See <varname>RootDirectory=</varname>/<varname>RootImage=</varname> above.</entry>
2409 </row>
2410 <row>
2411 <entry>211</entry>
2412 <entry><constant>EXIT_IOPRIO</constant></entry>
2413 <entry>Failed to set up IO scheduling priority. See <varname>IOSchedulingClass=</varname>/<varname>IOSchedulingPriority=</varname> above.</entry>
2414 </row>
2415 <row>
2416 <entry>212</entry>
2417 <entry><constant>EXIT_TIMERSLACK</constant></entry>
2418 <entry>Failed to set up timer slack. See <varname>TimerSlackNSec=</varname> above.</entry>
2419 </row>
2420 <row>
2421 <entry>213</entry>
2422 <entry><constant>EXIT_SECUREBITS</constant></entry>
2423 <entry>Failed to set process secure bits. See <varname>SecureBits=</varname> above.</entry>
2424 </row>
2425 <row>
2426 <entry>214</entry>
2427 <entry><constant>EXIT_SETSCHEDULER</constant></entry>
2428 <entry>Failed to set up CPU scheduling. See <varname>CPUSchedulingPolicy=</varname>/<varname>CPUSchedulingPriority=</varname> above.</entry>
2429 </row>
2430 <row>
2431 <entry>215</entry>
2432 <entry><constant>EXIT_CPUAFFINITY</constant></entry>
2433 <entry>Failed to set up CPU affinity. See <varname>CPUAffinity=</varname> above.</entry>
2434 </row>
2435 <row>
2436 <entry>216</entry>
2437 <entry><constant>EXIT_GROUP</constant></entry>
2438 <entry>Failed to determine or change group credentials. See <varname>Group=</varname>/<varname>SupplementaryGroups=</varname> above.</entry>
2439 </row>
2440 <row>
2441 <entry>217</entry>
2442 <entry><constant>EXIT_USER</constant></entry>
2443 <entry>Failed to determine or change user credentials, or to set up user namespacing. See <varname>User=</varname>/<varname>PrivateUsers=</varname> above.</entry>
2444 </row>
2445 <row>
2446 <entry>218</entry>
2447 <entry><constant>EXIT_CAPABILITIES</constant></entry>
2448 <entry>Failed to drop capabilities, or apply ambient capabilities. See <varname>CapabilityBoundingSet=</varname>/<varname>AmbientCapabilities=</varname> above.</entry>
2449 </row>
2450 <row>
2451 <entry>219</entry>
2452 <entry><constant>EXIT_CGROUP</constant></entry>
2453 <entry>Setting up the service control group failed.</entry>
2454 </row>
2455 <row>
2456 <entry>220</entry>
2457 <entry><constant>EXIT_SETSID</constant></entry>
2458 <entry>Failed to create new process session.</entry>
2459 </row>
2460 <row>
2461 <entry>221</entry>
2462 <entry><constant>EXIT_CONFIRM</constant></entry>
2463 <entry>Execution has been cancelled by the user. See the <varname>systemd.confirm_spawn=</varname> kernel command line setting on <citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry> for details.</entry>
2464 </row>
2465 <row>
2466 <entry>222</entry>
2467 <entry><constant>EXIT_STDERR</constant></entry>
2468 <entry>Failed to set up standard error output. See <varname>StandardError=</varname> above.</entry>
2469 </row>
2470 <row>
2471 <entry>224</entry>
2472 <entry><constant>EXIT_PAM</constant></entry>
2473 <entry>Failed to set up PAM session. See <varname>PAMName=</varname> above.</entry>
2474 </row>
2475 <row>
2476 <entry>225</entry>
2477 <entry><constant>EXIT_NETWORK</constant></entry>
2478 <entry>Failed to set up network namespacing. See <varname>PrivateNetwork=</varname> above.</entry>
2479 </row>
2480 <row>
2481 <entry>226</entry>
2482 <entry><constant>EXIT_NAMESPACE</constant></entry>
2483 <entry>Failed to set up mount namespacing. See <varname>ReadOnlyPaths=</varname> and related settings above.</entry>
2484 </row>
2485 <row>
2486 <entry>227</entry>
2487 <entry><constant>EXIT_NO_NEW_PRIVILEGES</constant></entry>
dcfaecc7 2488 <entry>Failed to disable new privileges. See <varname>NoNewPrivileges=yes</varname> above.</entry>
91a8f867
JS
2489 </row>
2490 <row>
2491 <entry>228</entry>
2492 <entry><constant>EXIT_SECCOMP</constant></entry>
2493 <entry>Failed to apply system call filters. See <varname>SystemCallFilter=</varname> and related settings above.</entry>
2494 </row>
2495 <row>
2496 <entry>229</entry>
2497 <entry><constant>EXIT_SELINUX_CONTEXT</constant></entry>
2498 <entry>Determining or changing SELinux context failed. See <varname>SELinuxContext=</varname> above.</entry>
2499 </row>
2500 <row>
2501 <entry>230</entry>
2502 <entry><constant>EXIT_PERSONALITY</constant></entry>
dcfaecc7 2503 <entry>Failed to set up an execution domain (personality). See <varname>Personality=</varname> above.</entry>
91a8f867
JS
2504 </row>
2505 <row>
2506 <entry>231</entry>
2507 <entry><constant>EXIT_APPARMOR_PROFILE</constant></entry>
2508 <entry>Failed to prepare changing AppArmor profile. See <varname>AppArmorProfile=</varname> above.</entry>
2509 </row>
2510 <row>
2511 <entry>232</entry>
2512 <entry><constant>EXIT_ADDRESS_FAMILIES</constant></entry>
2513 <entry>Failed to restrict address families. See <varname>RestrictAddressFamilies=</varname> above.</entry>
2514 </row>
2515 <row>
2516 <entry>233</entry>
2517 <entry><constant>EXIT_RUNTIME_DIRECTORY</constant></entry>
2518 <entry>Setting up runtime directory failed. See <varname>RuntimeDirectory=</varname> and related settings above.</entry>
2519 </row>
2520 <row>
2521 <entry>235</entry>
2522 <entry><constant>EXIT_CHOWN</constant></entry>
2523 <entry>Failed to adjust socket ownership. Used for socket units only.</entry>
2524 </row>
2525 <row>
2526 <entry>236</entry>
2527 <entry><constant>EXIT_SMACK_PROCESS_LABEL</constant></entry>
2528 <entry>Failed to set SMACK label. See <varname>SmackProcessLabel=</varname> above.</entry>
2529 </row>
2530 <row>
2531 <entry>237</entry>
2532 <entry><constant>EXIT_KEYRING</constant></entry>
2533 <entry>Failed to set up kernel keyring.</entry>
2534 </row>
2535 <row>
2536 <entry>238</entry>
2537 <entry><constant>EXIT_STATE_DIRECTORY</constant></entry>
dcfaecc7 2538 <entry>Failed to set up unit's state directory. See <varname>StateDirectory=</varname> above.</entry>
91a8f867
JS
2539 </row>
2540 <row>
2541 <entry>239</entry>
2542 <entry><constant>EXIT_CACHE_DIRECTORY</constant></entry>
dcfaecc7 2543 <entry>Failed to set up unit's cache directory. See <varname>CacheDirectory=</varname> above.</entry>
91a8f867
JS
2544 </row>
2545 <row>
2546 <entry>240</entry>
2547 <entry><constant>EXIT_LOGS_DIRECTORY</constant></entry>
dcfaecc7 2548 <entry>Failed to set up unit's logging directory. See <varname>LogsDirectory=</varname> above.</entry>
91a8f867
JS
2549 </row>
2550 <row>
2551 <entry>241</entry>
2552 <entry><constant>EXIT_CONFIGURATION_DIRECTORY</constant></entry>
dcfaecc7 2553 <entry>Failed to set up unit's configuration directory. See <varname>ConfigurationDirectory=</varname> above.</entry>
91a8f867
JS
2554 </row>
2555 </tbody>
2556 </tgroup>
2557 </table>
2558 </refsect1>
2559
798d3a52
ZJS
2560 <refsect1>
2561 <title>See Also</title>
2562 <para>
2563 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
2564 <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
869feb33 2565 <citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
798d3a52
ZJS
2566 <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
2567 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
2568 <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
2569 <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
2570 <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
2571 <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
2572 <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
2573 <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
a4c18002 2574 <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
798d3a52
ZJS
2575 <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
2576 <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
2577 <citerefentry project='man-pages'><refentrytitle>exec</refentrytitle><manvolnum>3</manvolnum></citerefentry>
2578 </para>
2579 </refsect1>
dd1eb43b 2580
e64e1bfd 2581
dd1eb43b 2582</refentry>