]> git.ipfire.org Git - thirdparty/systemd.git/blame - man/systemd.exec.xml
dissect: make sure to manually follow symlinks when mounting dissected image
[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
LP
83 <refsect1>
84 <title>Automatic Dependencies</title>
85
86 <para>A few execution parameters result in additional, automatic
87 dependencies to be added.</para>
88
89 <para>Units with <varname>WorkingDirectory=</varname> or
90 <varname>RootDirectory=</varname> set automatically gain
91 dependencies of type <varname>Requires=</varname> and
92 <varname>After=</varname> on all mount units required to access
93 the specified paths. This is equivalent to having them listed
94 explicitly in <varname>RequiresMountsFor=</varname>.</para>
95
d71f0505
LP
96 <para>Similar, units with <varname>PrivateTmp=</varname> enabled automatically get mount unit dependencies for all
97 mounts required to access <filename>/tmp</filename> and <filename>/var/tmp</filename>. They will also gain an
98 automatic <varname>After=</varname> dependency on
99 <citerefentry><refentrytitle>systemd-tmpfiles-setup.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
c129bd5d 100
dfe85b38
LP
101 <para>Units whose standard output or error output is connected to <option>journal</option>, <option>syslog</option>
102 or <option>kmsg</option> (or their combinations with console output, see below) automatically acquire dependencies
103 of type <varname>After=</varname> on <filename>systemd-journald.socket</filename>.</para>
c129bd5d
LP
104 </refsect1>
105
798d3a52
ZJS
106 <refsect1>
107 <title>Options</title>
108
109 <variablelist class='unit-directives'>
110
111 <varlistentry>
112 <term><varname>WorkingDirectory=</varname></term>
113
d251207d
LP
114 <listitem><para>Takes a directory path relative to the service's root directory specified by
115 <varname>RootDirectory=</varname>, or the special value <literal>~</literal>. Sets the working directory for
116 executed processes. If set to <literal>~</literal>, the home directory of the user specified in
117 <varname>User=</varname> is used. If not set, defaults to the root directory when systemd is running as a
118 system instance and the respective user's home directory if run as user. If the setting is prefixed with the
119 <literal>-</literal> character, a missing working directory is not considered fatal. If
120 <varname>RootDirectory=</varname> is not set, then <varname>WorkingDirectory=</varname> is relative to the root
121 of the system running the service manager. Note that setting this parameter might result in additional
122 dependencies to be added to the unit (see above).</para></listitem>
798d3a52
ZJS
123 </varlistentry>
124
125 <varlistentry>
126 <term><varname>RootDirectory=</varname></term>
127
d251207d
LP
128 <listitem><para>Takes a directory path relative to the host's root directory (i.e. the root of the system
129 running the service manager). Sets the root directory for executed processes, with the <citerefentry
130 project='man-pages'><refentrytitle>chroot</refentrytitle><manvolnum>2</manvolnum></citerefentry> system
131 call. If this is used, it must be ensured that the process binary and all its auxiliary files are available in
132 the <function>chroot()</function> jail. Note that setting this parameter might result in additional
133 dependencies to be added to the unit (see above).</para>
134
5d997827
LP
135 <para>The <varname>MountAPIVFS=</varname> and <varname>PrivateUsers=</varname> settings are particularly useful
136 in conjunction with <varname>RootDirectory=</varname>. For details, see below.</para></listitem>
137 </varlistentry>
138
139 <varlistentry>
140 <term><varname>MountAPIVFS=</varname></term>
141
142 <listitem><para>Takes a boolean argument. If on, a private mount namespace for the unit's processes is created
143 and the API file systems <filename>/proc</filename>, <filename>/sys</filename> and <filename>/dev</filename>
144 will be mounted inside of it, unless they are already mounted. Note that this option has no effect unless used
145 in conjunction with <varname>RootDirectory=</varname> as these three mounts are generally mounted in the host
146 anyway, and unless the root directory is changed the private mount namespace will be a 1:1 copy of the host's,
147 and include these three mounts. Note that the <filename>/dev</filename> file system of the host is bind mounted
148 if this option is used without <varname>PrivateDevices=</varname>. To run the service with a private, minimal
149 version of <filename>/dev/</filename>, combine this option with
150 <varname>PrivateDevices=</varname>.</para></listitem>
798d3a52
ZJS
151 </varlistentry>
152
153 <varlistentry>
154 <term><varname>User=</varname></term>
155 <term><varname>Group=</varname></term>
156
29206d46 157 <listitem><para>Set the UNIX user or group that the processes are executed as, respectively. Takes a single
47da760e
LP
158 user or group name, or numeric ID as argument. For system services (services run by the system service manager,
159 i.e. managed by PID 1) and for user services of the root user (services managed by root's instance of
160 <command>systemd --user</command>), the default is <literal>root</literal>, but <varname>User=</varname> may be
161 used to specify a different user. For user services of any other user, switching user identity is not
162 permitted, hence the only valid setting is the same user the user's service manager is running as. If no group
163 is set, the default group of the user is used. This setting does not affect commands whose command line is
164 prefixed with <literal>+</literal>.</para></listitem>
29206d46
LP
165 </varlistentry>
166
167 <varlistentry>
168 <term><varname>DynamicUser=</varname></term>
169
170 <listitem><para>Takes a boolean parameter. If set, a UNIX user and group pair is allocated dynamically when the
171 unit is started, and released as soon as it is stopped. The user and group will not be added to
172 <filename>/etc/passwd</filename> or <filename>/etc/group</filename>, but are managed transiently during
173 runtime. The <citerefentry><refentrytitle>nss-systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry>
174 glibc NSS module provides integration of these dynamic users/groups into the system's user and group
175 databases. The user and group name to use may be configured via <varname>User=</varname> and
176 <varname>Group=</varname> (see above). If these options are not used and dynamic user/group allocation is
177 enabled for a unit, the name of the dynamic user/group is implicitly derived from the unit name. If the unit
178 name without the type suffix qualifies as valid user name it is used directly, otherwise a name incorporating a
179 hash of it is used. If a statically allocated user or group of the configured name already exists, it is used
180 and no dynamic user/group is allocated. Dynamic users/groups are allocated from the UID/GID range
181 61184…65519. It is recommended to avoid this range for regular system or login users. At any point in time
182 each UID/GID from this range is only assigned to zero or one dynamically allocated users/groups in
183 use. However, UID/GIDs are recycled after a unit is terminated. Care should be taken that any processes running
184 as part of a unit for which dynamic users/groups are enabled do not leave files or directories owned by these
185 users/groups around, as a different unit might get the same UID/GID assigned later on, and thus gain access to
63bb64a0 186 these files or directories. If <varname>DynamicUser=</varname> is enabled, <varname>RemoveIPC=</varname>,
00d9ef85
LP
187 <varname>PrivateTmp=</varname> are implied. This ensures that the lifetime of IPC objects and temporary files
188 created by the executed processes is bound to the runtime of the service, and hence the lifetime of the dynamic
189 user/group. Since <filename>/tmp</filename> and <filename>/var/tmp</filename> are usually the only
190 world-writable directories on a system this ensures that a unit making use of dynamic user/group allocation
63bb64a0
LP
191 cannot leave files around after unit termination. Moreover <varname>ProtectSystem=strict</varname> and
192 <varname>ProtectHome=read-only</varname> are implied, thus prohibiting the service to write to arbitrary file
193 system locations. In order to allow the service to write to certain directories, they have to be whitelisted
cfaf4b75 194 using <varname>ReadWritePaths=</varname>, but care must be taken so that UID/GID recycling doesn't
63bb64a0
LP
195 create security issues involving files created by the service. Use <varname>RuntimeDirectory=</varname> (see
196 below) in order to assign a writable runtime directory to a service, owned by the dynamic user/group and
197 removed automatically when the unit is terminated. Defaults to off.</para></listitem>
798d3a52
ZJS
198 </varlistentry>
199
200 <varlistentry>
201 <term><varname>SupplementaryGroups=</varname></term>
202
203 <listitem><para>Sets the supplementary Unix groups the
204 processes are executed as. This takes a space-separated list
205 of group names or IDs. This option may be specified more than
b938cb90
JE
206 once, in which case all listed groups are set as supplementary
207 groups. When the empty string is assigned, the list of
798d3a52
ZJS
208 supplementary groups is reset, and all assignments prior to
209 this one will have no effect. In any way, this option does not
210 override, but extends the list of supplementary groups
211 configured in the system group database for the
43eb109a 212 user. This does not affect commands prefixed with <literal>+</literal>.</para></listitem>
798d3a52
ZJS
213 </varlistentry>
214
00d9ef85
LP
215 <varlistentry>
216 <term><varname>RemoveIPC=</varname></term>
217
218 <listitem><para>Takes a boolean parameter. If set, all System V and POSIX IPC objects owned by the user and
219 group the processes of this unit are run as are removed when the unit is stopped. This setting only has an
220 effect if at least one of <varname>User=</varname>, <varname>Group=</varname> and
221 <varname>DynamicUser=</varname> are used. It has no effect on IPC objects owned by the root user. Specifically,
222 this removes System V semaphores, as well as System V and POSIX shared memory segments and message queues. If
223 multiple units use the same user or group the IPC objects are removed when the last of these units is
224 stopped. This setting is implied if <varname>DynamicUser=</varname> is set.</para></listitem>
225 </varlistentry>
226
798d3a52
ZJS
227 <varlistentry>
228 <term><varname>Nice=</varname></term>
229
230 <listitem><para>Sets the default nice level (scheduling
231 priority) for executed processes. Takes an integer between -20
232 (highest priority) and 19 (lowest priority). See
233 <citerefentry><refentrytitle>setpriority</refentrytitle><manvolnum>2</manvolnum></citerefentry>
234 for details.</para></listitem>
235 </varlistentry>
236
237 <varlistentry>
238 <term><varname>OOMScoreAdjust=</varname></term>
239
240 <listitem><para>Sets the adjustment level for the
241 Out-Of-Memory killer for executed processes. Takes an integer
242 between -1000 (to disable OOM killing for this process) and
243 1000 (to make killing of this process under memory pressure
244 very likely). See <ulink
245 url="https://www.kernel.org/doc/Documentation/filesystems/proc.txt">proc.txt</ulink>
246 for details.</para></listitem>
247 </varlistentry>
248
249 <varlistentry>
250 <term><varname>IOSchedulingClass=</varname></term>
251
b938cb90 252 <listitem><para>Sets the I/O scheduling class for executed
798d3a52
ZJS
253 processes. Takes an integer between 0 and 3 or one of the
254 strings <option>none</option>, <option>realtime</option>,
255 <option>best-effort</option> or <option>idle</option>. See
256 <citerefentry><refentrytitle>ioprio_set</refentrytitle><manvolnum>2</manvolnum></citerefentry>
257 for details.</para></listitem>
258 </varlistentry>
259
260 <varlistentry>
261 <term><varname>IOSchedulingPriority=</varname></term>
262
b938cb90 263 <listitem><para>Sets the I/O scheduling priority for executed
798d3a52
ZJS
264 processes. Takes an integer between 0 (highest priority) and 7
265 (lowest priority). The available priorities depend on the
b938cb90 266 selected I/O scheduling class (see above). See
798d3a52
ZJS
267 <citerefentry><refentrytitle>ioprio_set</refentrytitle><manvolnum>2</manvolnum></citerefentry>
268 for details.</para></listitem>
269 </varlistentry>
270
271 <varlistentry>
272 <term><varname>CPUSchedulingPolicy=</varname></term>
273
274 <listitem><para>Sets the CPU scheduling policy for executed
275 processes. Takes one of
276 <option>other</option>,
277 <option>batch</option>,
278 <option>idle</option>,
279 <option>fifo</option> or
280 <option>rr</option>. See
281 <citerefentry><refentrytitle>sched_setscheduler</refentrytitle><manvolnum>2</manvolnum></citerefentry>
282 for details.</para></listitem>
283 </varlistentry>
284
285 <varlistentry>
286 <term><varname>CPUSchedulingPriority=</varname></term>
287
288 <listitem><para>Sets the CPU scheduling priority for executed
289 processes. The available priority range depends on the
290 selected CPU scheduling policy (see above). For real-time
291 scheduling policies an integer between 1 (lowest priority) and
292 99 (highest priority) can be used. See
293 <citerefentry><refentrytitle>sched_setscheduler</refentrytitle><manvolnum>2</manvolnum></citerefentry>
294 for details. </para></listitem>
295 </varlistentry>
296
297 <varlistentry>
298 <term><varname>CPUSchedulingResetOnFork=</varname></term>
299
300 <listitem><para>Takes a boolean argument. If true, elevated
301 CPU scheduling priorities and policies will be reset when the
302 executed processes fork, and can hence not leak into child
303 processes. See
304 <citerefentry><refentrytitle>sched_setscheduler</refentrytitle><manvolnum>2</manvolnum></citerefentry>
305 for details. Defaults to false.</para></listitem>
306 </varlistentry>
307
308 <varlistentry>
309 <term><varname>CPUAffinity=</varname></term>
310
311 <listitem><para>Controls the CPU affinity of the executed
71b1c27a
FB
312 processes. Takes a list of CPU indices or ranges separated by
313 either whitespace or commas. CPU ranges are specified by the
314 lower and upper CPU indices separated by a dash.
b938cb90 315 This option may be specified more than once, in which case the
798d3a52
ZJS
316 specified CPU affinity masks are merged. If the empty string
317 is assigned, the mask is reset, all assignments prior to this
318 will have no effect. See
319 <citerefentry><refentrytitle>sched_setaffinity</refentrytitle><manvolnum>2</manvolnum></citerefentry>
320 for details.</para></listitem>
321 </varlistentry>
322
323 <varlistentry>
324 <term><varname>UMask=</varname></term>
325
326 <listitem><para>Controls the file mode creation mask. Takes an
327 access mode in octal notation. See
328 <citerefentry><refentrytitle>umask</refentrytitle><manvolnum>2</manvolnum></citerefentry>
329 for details. Defaults to 0022.</para></listitem>
330 </varlistentry>
331
332 <varlistentry>
333 <term><varname>Environment=</varname></term>
334
335 <listitem><para>Sets environment variables for executed
336 processes. Takes a space-separated list of variable
b938cb90 337 assignments. This option may be specified more than once, in
798d3a52
ZJS
338 which case all listed variables will be set. If the same
339 variable is set twice, the later setting will override the
340 earlier setting. If the empty string is assigned to this
341 option, the list of environment variables is reset, all prior
342 assignments have no effect. Variable expansion is not
343 performed inside the strings, however, specifier expansion is
344 possible. The $ character has no special meaning. If you need
345 to assign a value containing spaces to a variable, use double
346 quotes (") for the assignment.</para>
347
348 <para>Example:
349 <programlisting>Environment="VAR1=word1 word2" VAR2=word3 "VAR3=$word 5 6"</programlisting>
350 gives three variables <literal>VAR1</literal>,
351 <literal>VAR2</literal>, <literal>VAR3</literal>
352 with the values <literal>word1 word2</literal>,
353 <literal>word3</literal>, <literal>$word 5 6</literal>.
354 </para>
355
356 <para>
357 See
358 <citerefentry project='man-pages'><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry>
359 for details about environment variables.</para></listitem>
360 </varlistentry>
361 <varlistentry>
362 <term><varname>EnvironmentFile=</varname></term>
363 <listitem><para>Similar to <varname>Environment=</varname> but
364 reads the environment variables from a text file. The text
365 file should contain new-line-separated variable assignments.
8f0d2981
RM
366 Empty lines, lines without an <literal>=</literal> separator,
367 or lines starting with ; or # will be ignored,
798d3a52
ZJS
368 which may be used for commenting. A line ending with a
369 backslash will be concatenated with the following one,
370 allowing multiline variable definitions. The parser strips
371 leading and trailing whitespace from the values of
372 assignments, unless you use double quotes (").</para>
373
374 <para>The argument passed should be an absolute filename or
375 wildcard expression, optionally prefixed with
376 <literal>-</literal>, which indicates that if the file does
377 not exist, it will not be read and no error or warning message
378 is logged. This option may be specified more than once in
379 which case all specified files are read. If the empty string
380 is assigned to this option, the list of file to read is reset,
381 all prior assignments have no effect.</para>
382
383 <para>The files listed with this directive will be read
384 shortly before the process is executed (more specifically,
385 after all processes from a previous unit state terminated.
386 This means you can generate these files in one unit state, and
f407824d
DH
387 read it with this option in the next).</para>
388
389 <para>Settings from these
798d3a52
ZJS
390 files override settings made with
391 <varname>Environment=</varname>. If the same variable is set
392 twice from these files, the files will be read in the order
393 they are specified and the later setting will override the
394 earlier setting.</para></listitem>
395 </varlistentry>
396
b4c14404
FB
397 <varlistentry>
398 <term><varname>PassEnvironment=</varname></term>
399
400 <listitem><para>Pass environment variables from the systemd system
401 manager to executed processes. Takes a space-separated list of variable
402 names. This option may be specified more than once, in which case all
403 listed variables will be set. If the empty string is assigned to this
404 option, the list of environment variables is reset, all prior
405 assignments have no effect. Variables that are not set in the system
406 manager will not be passed and will be silently ignored.</para>
407
408 <para>Variables passed from this setting are overridden by those passed
409 from <varname>Environment=</varname> or
410 <varname>EnvironmentFile=</varname>.</para>
411
412 <para>Example:
413 <programlisting>PassEnvironment=VAR1 VAR2 VAR3</programlisting>
414 passes three variables <literal>VAR1</literal>,
415 <literal>VAR2</literal>, <literal>VAR3</literal>
416 with the values set for those variables in PID1.</para>
417
418 <para>
419 See
420 <citerefentry project='man-pages'><refentrytitle>environ</refentrytitle><manvolnum>7</manvolnum></citerefentry>
421 for details about environment variables.</para></listitem>
422 </varlistentry>
423
798d3a52
ZJS
424 <varlistentry>
425 <term><varname>StandardInput=</varname></term>
426 <listitem><para>Controls where file descriptor 0 (STDIN) of
427 the executed processes is connected to. Takes one of
428 <option>null</option>,
429 <option>tty</option>,
430 <option>tty-force</option>,
52c239d7
LB
431 <option>tty-fail</option>,
432 <option>socket</option> or
433 <option>fd</option>.</para>
798d3a52
ZJS
434
435 <para>If <option>null</option> is selected, standard input
436 will be connected to <filename>/dev/null</filename>, i.e. all
437 read attempts by the process will result in immediate
438 EOF.</para>
439
440 <para>If <option>tty</option> is selected, standard input is
441 connected to a TTY (as configured by
442 <varname>TTYPath=</varname>, see below) and the executed
443 process becomes the controlling process of the terminal. If
444 the terminal is already being controlled by another process,
445 the executed process waits until the current controlling
446 process releases the terminal.</para>
447
448 <para><option>tty-force</option> is similar to
449 <option>tty</option>, but the executed process is forcefully
450 and immediately made the controlling process of the terminal,
451 potentially removing previous controlling processes from the
452 terminal.</para>
453
454 <para><option>tty-fail</option> is similar to
455 <option>tty</option> but if the terminal already has a
456 controlling process start-up of the executed process
457 fails.</para>
458
459 <para>The <option>socket</option> option is only valid in
460 socket-activated services, and only when the socket
461 configuration file (see
462 <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>
463 for details) specifies a single socket only. If this option is
464 set, standard input will be connected to the socket the
465 service was activated from, which is primarily useful for
466 compatibility with daemons designed for use with the
467 traditional
b5c7d097 468 <citerefentry project='freebsd'><refentrytitle>inetd</refentrytitle><manvolnum>8</manvolnum></citerefentry>
798d3a52
ZJS
469 daemon.</para>
470
52c239d7
LB
471 <para>The <option>fd</option> option connects
472 the input stream to a single file descriptor provided by a socket unit.
473 A custom named file descriptor can be specified as part of this option,
474 after a <literal>:</literal> (e.g. <literal>fd:<replaceable>foobar</replaceable></literal>).
475 If no name is specified, <literal>stdin</literal> is assumed
476 (i.e. <literal>fd</literal> is equivalent to <literal>fd:stdin</literal>).
477 At least one socket unit defining such name must be explicitly provided via the
478 <varname>Sockets=</varname> option, and file descriptor name may differ
479 from the name of its containing socket unit.
480 If multiple matches are found, the first one will be used.
481 See <varname>FileDescriptorName=</varname> in
482 <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>
483 for more details about named descriptors and ordering.</para>
484
798d3a52
ZJS
485 <para>This setting defaults to
486 <option>null</option>.</para></listitem>
487 </varlistentry>
c129bd5d 488
798d3a52
ZJS
489 <varlistentry>
490 <term><varname>StandardOutput=</varname></term>
491 <listitem><para>Controls where file descriptor 1 (STDOUT) of
492 the executed processes is connected to. Takes one of
493 <option>inherit</option>,
494 <option>null</option>,
495 <option>tty</option>,
496 <option>journal</option>,
497 <option>syslog</option>,
498 <option>kmsg</option>,
499 <option>journal+console</option>,
500 <option>syslog+console</option>,
52c239d7
LB
501 <option>kmsg+console</option>,
502 <option>socket</option> or
503 <option>fd</option>.</para>
798d3a52
ZJS
504
505 <para><option>inherit</option> duplicates the file descriptor
506 of standard input for standard output.</para>
507
508 <para><option>null</option> connects standard output to
509 <filename>/dev/null</filename>, i.e. everything written to it
510 will be lost.</para>
511
512 <para><option>tty</option> connects standard output to a tty
513 (as configured via <varname>TTYPath=</varname>, see below). If
514 the TTY is used for output only, the executed process will not
515 become the controlling process of the terminal, and will not
516 fail or wait for other processes to release the
517 terminal.</para>
518
519 <para><option>journal</option> connects standard output with
520 the journal which is accessible via
521 <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
522 Note that everything that is written to syslog or kmsg (see
523 below) is implicitly stored in the journal as well, the
524 specific two options listed below are hence supersets of this
525 one.</para>
526
527 <para><option>syslog</option> connects standard output to the
528 <citerefentry project='man-pages'><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>
529 system syslog service, in addition to the journal. Note that
530 the journal daemon is usually configured to forward everything
531 it receives to syslog anyway, in which case this option is no
532 different from <option>journal</option>.</para>
533
534 <para><option>kmsg</option> connects standard output with the
535 kernel log buffer which is accessible via
536 <citerefentry project='man-pages'><refentrytitle>dmesg</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
537 in addition to the journal. The journal daemon might be
538 configured to send all logs to kmsg anyway, in which case this
539 option is no different from <option>journal</option>.</para>
540
541 <para><option>journal+console</option>,
542 <option>syslog+console</option> and
543 <option>kmsg+console</option> work in a similar way as the
544 three options above but copy the output to the system console
545 as well.</para>
546
547 <para><option>socket</option> connects standard output to a
548 socket acquired via socket activation. The semantics are
549 similar to the same option of
550 <varname>StandardInput=</varname>.</para>
551
52c239d7
LB
552 <para>The <option>fd</option> option connects
553 the output stream to a single file descriptor provided by a socket unit.
554 A custom named file descriptor can be specified as part of this option,
555 after a <literal>:</literal> (e.g. <literal>fd:<replaceable>foobar</replaceable></literal>).
556 If no name is specified, <literal>stdout</literal> is assumed
557 (i.e. <literal>fd</literal> is equivalent to <literal>fd:stdout</literal>).
558 At least one socket unit defining such name must be explicitly provided via the
559 <varname>Sockets=</varname> option, and file descriptor name may differ
560 from the name of its containing socket unit.
561 If multiple matches are found, the first one will be used.
562 See <varname>FileDescriptorName=</varname> in
563 <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>
564 for more details about named descriptors and ordering.</para>
565
dfe85b38
LP
566 <para>If the standard output (or error output, see below) of a unit is connected to the journal, syslog or the
567 kernel log buffer, the unit will implicitly gain a dependency of type <varname>After=</varname> on
28c75e25
LP
568 <filename>systemd-journald.socket</filename> (also see the automatic dependencies section above).</para>
569
798d3a52
ZJS
570 <para>This setting defaults to the value set with
571 <option>DefaultStandardOutput=</option> in
572 <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
c129bd5d
LP
573 which defaults to <option>journal</option>. Note that setting
574 this parameter might result in additional dependencies to be
575 added to the unit (see above).</para></listitem>
798d3a52 576 </varlistentry>
c129bd5d 577
798d3a52
ZJS
578 <varlistentry>
579 <term><varname>StandardError=</varname></term>
580 <listitem><para>Controls where file descriptor 2 (STDERR) of
581 the executed processes is connected to. The available options
582 are identical to those of <varname>StandardOutput=</varname>,
52c239d7 583 with some exceptions: if set to <option>inherit</option> the
798d3a52 584 file descriptor used for standard output is duplicated for
52c239d7
LB
585 standard error, while <option>fd</option> operates on the error
586 stream and will look by default for a descriptor named
587 <literal>stderr</literal>.</para>
588
589 <para>This setting defaults to the value set with
798d3a52
ZJS
590 <option>DefaultStandardError=</option> in
591 <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
c129bd5d
LP
592 which defaults to <option>inherit</option>. Note that setting
593 this parameter might result in additional dependencies to be
594 added to the unit (see above).</para></listitem>
798d3a52 595 </varlistentry>
c129bd5d 596
798d3a52
ZJS
597 <varlistentry>
598 <term><varname>TTYPath=</varname></term>
599 <listitem><para>Sets the terminal device node to use if
600 standard input, output, or error are connected to a TTY (see
601 above). Defaults to
602 <filename>/dev/console</filename>.</para></listitem>
603 </varlistentry>
604 <varlistentry>
605 <term><varname>TTYReset=</varname></term>
606 <listitem><para>Reset the terminal device specified with
607 <varname>TTYPath=</varname> before and after execution.
608 Defaults to <literal>no</literal>.</para></listitem>
609 </varlistentry>
610 <varlistentry>
611 <term><varname>TTYVHangup=</varname></term>
612 <listitem><para>Disconnect all clients which have opened the
613 terminal device specified with <varname>TTYPath=</varname>
614 before and after execution. Defaults to
615 <literal>no</literal>.</para></listitem>
616 </varlistentry>
617 <varlistentry>
618 <term><varname>TTYVTDisallocate=</varname></term>
619 <listitem><para>If the terminal device specified with
620 <varname>TTYPath=</varname> is a virtual console terminal, try
621 to deallocate the TTY before and after execution. This ensures
622 that the screen and scrollback buffer is cleared. Defaults to
623 <literal>no</literal>.</para></listitem>
624 </varlistentry>
625 <varlistentry>
626 <term><varname>SyslogIdentifier=</varname></term>
627 <listitem><para>Sets the process name to prefix log lines sent
628 to the logging system or the kernel log buffer with. If not
629 set, defaults to the process name of the executed process.
630 This option is only useful when
631 <varname>StandardOutput=</varname> or
632 <varname>StandardError=</varname> are set to
633 <option>syslog</option>, <option>journal</option> or
634 <option>kmsg</option> (or to the same settings in combination
635 with <option>+console</option>).</para></listitem>
636 </varlistentry>
637 <varlistentry>
638 <term><varname>SyslogFacility=</varname></term>
639 <listitem><para>Sets the syslog facility to use when logging
640 to syslog. One of <option>kern</option>,
641 <option>user</option>, <option>mail</option>,
642 <option>daemon</option>, <option>auth</option>,
643 <option>syslog</option>, <option>lpr</option>,
644 <option>news</option>, <option>uucp</option>,
645 <option>cron</option>, <option>authpriv</option>,
646 <option>ftp</option>, <option>local0</option>,
647 <option>local1</option>, <option>local2</option>,
648 <option>local3</option>, <option>local4</option>,
649 <option>local5</option>, <option>local6</option> or
650 <option>local7</option>. See
651 <citerefentry project='man-pages'><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>
652 for details. This option is only useful when
653 <varname>StandardOutput=</varname> or
654 <varname>StandardError=</varname> are set to
655 <option>syslog</option>. Defaults to
656 <option>daemon</option>.</para></listitem>
657 </varlistentry>
658 <varlistentry>
659 <term><varname>SyslogLevel=</varname></term>
a8eaaee7 660 <listitem><para>The default syslog level to use when logging to
798d3a52
ZJS
661 syslog or the kernel log buffer. One of
662 <option>emerg</option>,
663 <option>alert</option>,
664 <option>crit</option>,
665 <option>err</option>,
666 <option>warning</option>,
667 <option>notice</option>,
668 <option>info</option>,
669 <option>debug</option>. See
670 <citerefentry project='man-pages'><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>
671 for details. This option is only useful when
672 <varname>StandardOutput=</varname> or
673 <varname>StandardError=</varname> are set to
674 <option>syslog</option> or <option>kmsg</option>. Note that
675 individual lines output by the daemon might be prefixed with a
676 different log level which can be used to override the default
677 log level specified here. The interpretation of these prefixes
678 may be disabled with <varname>SyslogLevelPrefix=</varname>,
b938cb90 679 see below. For details, see
798d3a52
ZJS
680 <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
681
682 Defaults to
683 <option>info</option>.</para></listitem>
684 </varlistentry>
685
686 <varlistentry>
687 <term><varname>SyslogLevelPrefix=</varname></term>
688 <listitem><para>Takes a boolean argument. If true and
689 <varname>StandardOutput=</varname> or
690 <varname>StandardError=</varname> are set to
691 <option>syslog</option>, <option>kmsg</option> or
692 <option>journal</option>, log lines written by the executed
693 process that are prefixed with a log level will be passed on
694 to syslog with this log level set but the prefix removed. If
695 set to false, the interpretation of these prefixes is disabled
696 and the logged lines are passed on as-is. For details about
697 this prefixing see
698 <citerefentry><refentrytitle>sd-daemon</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
699 Defaults to true.</para></listitem>
700 </varlistentry>
701
702 <varlistentry>
703 <term><varname>TimerSlackNSec=</varname></term>
704 <listitem><para>Sets the timer slack in nanoseconds for the
705 executed processes. The timer slack controls the accuracy of
706 wake-ups triggered by timers. See
707 <citerefentry><refentrytitle>prctl</refentrytitle><manvolnum>2</manvolnum></citerefentry>
708 for more information. Note that in contrast to most other time
709 span definitions this parameter takes an integer value in
710 nano-seconds if no unit is specified. The usual time units are
711 understood too.</para></listitem>
712 </varlistentry>
713
714 <varlistentry>
715 <term><varname>LimitCPU=</varname></term>
716 <term><varname>LimitFSIZE=</varname></term>
717 <term><varname>LimitDATA=</varname></term>
718 <term><varname>LimitSTACK=</varname></term>
719 <term><varname>LimitCORE=</varname></term>
720 <term><varname>LimitRSS=</varname></term>
721 <term><varname>LimitNOFILE=</varname></term>
722 <term><varname>LimitAS=</varname></term>
723 <term><varname>LimitNPROC=</varname></term>
724 <term><varname>LimitMEMLOCK=</varname></term>
725 <term><varname>LimitLOCKS=</varname></term>
726 <term><varname>LimitSIGPENDING=</varname></term>
727 <term><varname>LimitMSGQUEUE=</varname></term>
728 <term><varname>LimitNICE=</varname></term>
729 <term><varname>LimitRTPRIO=</varname></term>
730 <term><varname>LimitRTTIME=</varname></term>
29857001
LP
731 <listitem><para>Set soft and hard limits on various resources for executed processes. See
732 <citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</manvolnum></citerefentry> for details on
733 the resource limit concept. Resource limits may be specified in two formats: either as single value to set a
734 specific soft and hard limit to the same value, or as colon-separated pair <option>soft:hard</option> to set
735 both limits individually (e.g. <literal>LimitAS=4G:16G</literal>). Use the string <varname>infinity</varname>
736 to configure no limit on a specific resource. The multiplicative suffixes K, M, G, T, P and E (to the base
737 1024) may be used for resource limits measured in bytes (e.g. LimitAS=16G). For the limits referring to time
738 values, the usual time units ms, s, min, h and so on may be used (see
739 <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
740 details). Note that if no time unit is specified for <varname>LimitCPU=</varname> the default unit of seconds
741 is implied, while for <varname>LimitRTTIME=</varname> the default unit of microseconds is implied. Also, note
742 that the effective granularity of the limits might influence their enforcement. For example, time limits
743 specified for <varname>LimitCPU=</varname> will be rounded up implicitly to multiples of 1s. For
744 <varname>LimitNICE=</varname> the value may be specified in two syntaxes: if prefixed with <literal>+</literal>
745 or <literal>-</literal>, the value is understood as regular Linux nice value in the range -20..19. If not
746 prefixed like this the value is understood as raw resource limit parameter in the range 0..40 (with 0 being
747 equivalent to 1).</para>
a4c18002
LP
748
749 <para>Note that most process resource limits configured with
750 these options are per-process, and processes may fork in order
751 to acquire a new set of resources that are accounted
752 independently of the original process, and may thus escape
753 limits set. Also note that <varname>LimitRSS=</varname> is not
754 implemented on Linux, and setting it has no effect. Often it
755 is advisable to prefer the resource controls listed in
756 <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>
757 over these per-process limits, as they apply to services as a
758 whole, may be altered dynamically at runtime, and are
759 generally more expressive. For example,
760 <varname>MemoryLimit=</varname> is a more powerful (and
761 working) replacement for <varname>LimitRSS=</varname>.</para>
798d3a52 762
f4c9356d
LP
763 <para>For system units these resource limits may be chosen freely. For user units however (i.e. units run by a
764 per-user instance of
765 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>), these limits are
766 bound by (possibly more restrictive) per-user limits enforced by the OS.</para>
767
768 <para>Resource limits not configured explicitly for a unit default to the value configured in the various
769 <varname>DefaultLimitCPU=</varname>, <varname>DefaultLimitFSIZE=</varname>, … options available in
770 <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>, and –
771 if not configured there – the kernel or per-user defaults, as defined by the OS (the latter only for user
772 services, see above).</para>
773
798d3a52 774 <table>
f4c9356d 775 <title>Resource limit directives, their equivalent <command>ulimit</command> shell commands and the unit used</title>
798d3a52 776
a4c18002 777 <tgroup cols='3'>
798d3a52
ZJS
778 <colspec colname='directive' />
779 <colspec colname='equivalent' />
a4c18002 780 <colspec colname='unit' />
798d3a52
ZJS
781 <thead>
782 <row>
783 <entry>Directive</entry>
f4c9356d 784 <entry><command>ulimit</command> equivalent</entry>
a4c18002 785 <entry>Unit</entry>
798d3a52
ZJS
786 </row>
787 </thead>
788 <tbody>
789 <row>
a4c18002 790 <entry>LimitCPU=</entry>
798d3a52 791 <entry>ulimit -t</entry>
a4c18002 792 <entry>Seconds</entry>
798d3a52
ZJS
793 </row>
794 <row>
a4c18002 795 <entry>LimitFSIZE=</entry>
798d3a52 796 <entry>ulimit -f</entry>
a4c18002 797 <entry>Bytes</entry>
798d3a52
ZJS
798 </row>
799 <row>
a4c18002 800 <entry>LimitDATA=</entry>
798d3a52 801 <entry>ulimit -d</entry>
a4c18002 802 <entry>Bytes</entry>
798d3a52
ZJS
803 </row>
804 <row>
a4c18002 805 <entry>LimitSTACK=</entry>
798d3a52 806 <entry>ulimit -s</entry>
a4c18002 807 <entry>Bytes</entry>
798d3a52
ZJS
808 </row>
809 <row>
a4c18002 810 <entry>LimitCORE=</entry>
798d3a52 811 <entry>ulimit -c</entry>
a4c18002 812 <entry>Bytes</entry>
798d3a52
ZJS
813 </row>
814 <row>
a4c18002 815 <entry>LimitRSS=</entry>
798d3a52 816 <entry>ulimit -m</entry>
a4c18002 817 <entry>Bytes</entry>
798d3a52
ZJS
818 </row>
819 <row>
a4c18002 820 <entry>LimitNOFILE=</entry>
798d3a52 821 <entry>ulimit -n</entry>
a4c18002 822 <entry>Number of File Descriptors</entry>
798d3a52
ZJS
823 </row>
824 <row>
a4c18002 825 <entry>LimitAS=</entry>
798d3a52 826 <entry>ulimit -v</entry>
a4c18002 827 <entry>Bytes</entry>
798d3a52
ZJS
828 </row>
829 <row>
a4c18002 830 <entry>LimitNPROC=</entry>
798d3a52 831 <entry>ulimit -u</entry>
a4c18002 832 <entry>Number of Processes</entry>
798d3a52
ZJS
833 </row>
834 <row>
a4c18002 835 <entry>LimitMEMLOCK=</entry>
798d3a52 836 <entry>ulimit -l</entry>
a4c18002 837 <entry>Bytes</entry>
798d3a52
ZJS
838 </row>
839 <row>
a4c18002 840 <entry>LimitLOCKS=</entry>
798d3a52 841 <entry>ulimit -x</entry>
a4c18002 842 <entry>Number of Locks</entry>
798d3a52
ZJS
843 </row>
844 <row>
a4c18002 845 <entry>LimitSIGPENDING=</entry>
798d3a52 846 <entry>ulimit -i</entry>
a4c18002 847 <entry>Number of Queued Signals</entry>
798d3a52
ZJS
848 </row>
849 <row>
a4c18002 850 <entry>LimitMSGQUEUE=</entry>
798d3a52 851 <entry>ulimit -q</entry>
a4c18002 852 <entry>Bytes</entry>
798d3a52
ZJS
853 </row>
854 <row>
a4c18002 855 <entry>LimitNICE=</entry>
798d3a52 856 <entry>ulimit -e</entry>
a4c18002 857 <entry>Nice Level</entry>
798d3a52
ZJS
858 </row>
859 <row>
a4c18002 860 <entry>LimitRTPRIO=</entry>
798d3a52 861 <entry>ulimit -r</entry>
a4c18002 862 <entry>Realtime Priority</entry>
798d3a52
ZJS
863 </row>
864 <row>
a4c18002 865 <entry>LimitRTTIME=</entry>
798d3a52 866 <entry>No equivalent</entry>
a4c18002 867 <entry>Microseconds</entry>
798d3a52
ZJS
868 </row>
869 </tbody>
870 </tgroup>
a4c18002 871 </table></listitem>
798d3a52
ZJS
872 </varlistentry>
873
874 <varlistentry>
875 <term><varname>PAMName=</varname></term>
9eb484fa
LP
876 <listitem><para>Sets the PAM service name to set up a session as. If set, the executed process will be
877 registered as a PAM session under the specified service name. This is only useful in conjunction with the
878 <varname>User=</varname> setting, and is otherwise ignored. If not set, no PAM session will be opened for the
879 executed processes. See <citerefentry
880 project='man-pages'><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry> for
881 details.</para>
882
883 <para>Note that for each unit making use of this option a PAM session handler process will be maintained as
884 part of the unit and stays around as long as the unit is active, to ensure that appropriate actions can be
885 taken when the unit and hence the PAM session terminates. This process is named <literal>(sd-pam)</literal> and
886 is an immediate child process of the unit's main process.</para></listitem>
798d3a52
ZJS
887 </varlistentry>
888
889 <varlistentry>
890 <term><varname>CapabilityBoundingSet=</varname></term>
891
479050b3
LP
892 <listitem><para>Controls which capabilities to include in the capability bounding set for the executed
893 process. See <citerefentry
894 project='man-pages'><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
b2656f1b
LP
895 details. Takes a whitespace-separated list of capability names, e.g. <constant>CAP_SYS_ADMIN</constant>,
896 <constant>CAP_DAC_OVERRIDE</constant>, <constant>CAP_SYS_PTRACE</constant>. Capabilities listed will be
897 included in the bounding set, all others are removed. If the list of capabilities is prefixed with
898 <literal>~</literal>, all but the listed capabilities will be included, the effect of the assignment
899 inverted. Note that this option also affects the respective capabilities in the effective, permitted and
900 inheritable capability sets. If this option is not used, the capability bounding set is not modified on process
901 execution, hence no limits on the capabilities of the process are enforced. This option may appear more than
902 once, in which case the bounding sets are merged. If the empty string is assigned to this option, the bounding
903 set is reset to the empty capability set, and all prior settings have no effect. If set to
904 <literal>~</literal> (without any further argument), the bounding set is reset to the full set of available
905 capabilities, also undoing any previous settings. This does not affect commands prefixed with
906 <literal>+</literal>.</para></listitem>
798d3a52
ZJS
907 </varlistentry>
908
ece87975
IP
909 <varlistentry>
910 <term><varname>AmbientCapabilities=</varname></term>
911
b2656f1b
LP
912 <listitem><para>Controls which capabilities to include in the ambient capability set for the executed
913 process. Takes a whitespace-separated list of capability names, e.g. <constant>CAP_SYS_ADMIN</constant>,
914 <constant>CAP_DAC_OVERRIDE</constant>, <constant>CAP_SYS_PTRACE</constant>. This option may appear more than
915 once in which case the ambient capability sets are merged. If the list of capabilities is prefixed with
916 <literal>~</literal>, all but the listed capabilities will be included, the effect of the assignment
917 inverted. If the empty string is assigned to this option, the ambient capability set is reset to the empty
918 capability set, and all prior settings have no effect. If set to <literal>~</literal> (without any further
919 argument), the ambient capability set is reset to the full set of available capabilities, also undoing any
920 previous settings. Note that adding capabilities to ambient capability set adds them to the process's inherited
921 capability set. </para><para> Ambient capability sets are useful if you want to execute a process as a
922 non-privileged user but still want to give it some capabilities. Note that in this case option
923 <constant>keep-caps</constant> is automatically added to <varname>SecureBits=</varname> to retain the
924 capabilities over the user change. <varname>AmbientCapabilities=</varname> does not affect commands prefixed
925 with <literal>+</literal>.</para></listitem>
ece87975
IP
926 </varlistentry>
927
798d3a52
ZJS
928 <varlistentry>
929 <term><varname>SecureBits=</varname></term>
930 <listitem><para>Controls the secure bits set for the executed
931 process. Takes a space-separated combination of options from
932 the following list:
933 <option>keep-caps</option>,
934 <option>keep-caps-locked</option>,
935 <option>no-setuid-fixup</option>,
936 <option>no-setuid-fixup-locked</option>,
937 <option>noroot</option>, and
938 <option>noroot-locked</option>.
b938cb90 939 This option may appear more than once, in which case the secure
798d3a52 940 bits are ORed. If the empty string is assigned to this option,
43eb109a 941 the bits are reset to 0. This does not affect commands prefixed with <literal>+</literal>.
cf677fe6 942 See <citerefentry project='man-pages'><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>
798d3a52
ZJS
943 for details.</para></listitem>
944 </varlistentry>
945
798d3a52 946 <varlistentry>
2a624c36
AP
947 <term><varname>ReadWritePaths=</varname></term>
948 <term><varname>ReadOnlyPaths=</varname></term>
949 <term><varname>InaccessiblePaths=</varname></term>
798d3a52 950
effbd6d2
LP
951 <listitem><para>Sets up a new file system namespace for executed processes. These options may be used to limit
952 access a process might have to the file system hierarchy. Each setting takes a space-separated list of paths
953 relative to the host's root directory (i.e. the system running the service manager). Note that if paths
954 contain symlinks, they are resolved relative to the root directory set with
955 <varname>RootDirectory=</varname>.</para>
956
957 <para>Paths listed in <varname>ReadWritePaths=</varname> are accessible from within the namespace with the same
958 access modes as from outside of it. Paths listed in <varname>ReadOnlyPaths=</varname> are accessible for
959 reading only, writing will be refused even if the usual file access controls would permit this. Nest
960 <varname>ReadWritePaths=</varname> inside of <varname>ReadOnlyPaths=</varname> in order to provide writable
961 subdirectories within read-only directories. Use <varname>ReadWritePaths=</varname> in order to whitelist
962 specific paths for write access if <varname>ProtectSystem=strict</varname> is used. Paths listed in
963 <varname>InaccessiblePaths=</varname> will be made inaccessible for processes inside the namespace (along with
964 everything below them in the file system hierarchy).</para>
965
966 <para>Note that restricting access with these options does not extend to submounts of a directory that are
967 created later on. Non-directory paths may be specified as well. These options may be specified more than once,
968 in which case all paths listed will have limited access from within the namespace. If the empty string is
969 assigned to this option, the specific list is reset, and all prior assignments have no effect.</para>
970
e778185b 971 <para>Paths in <varname>ReadWritePaths=</varname>, <varname>ReadOnlyPaths=</varname> and
5327c910
LP
972 <varname>InaccessiblePaths=</varname> may be prefixed with <literal>-</literal>, in which case they will be
973 ignored when they do not exist. If prefixed with <literal>+</literal> the paths are taken relative to the root
974 directory of the unit, as configured with <varname>RootDirectory=</varname>, instead of relative to the root
975 directory of the host (see above). When combining <literal>-</literal> and <literal>+</literal> on the same
976 path make sure to specify <literal>-</literal> first, and <literal>+</literal> second.</para>
977
978 <para>Note that using this setting will disconnect propagation of mounts from the service to the host
979 (propagation in the opposite direction continues to work). This means that this setting may not be used for
980 services which shall be able to install mount points in the main mount namespace. Note that the effect of these
981 settings may be undone by privileged processes. In order to set up an effective sandboxed environment for a
982 unit it is thus recommended to combine these settings with either
983 <varname>CapabilityBoundingSet=~CAP_SYS_ADMIN</varname> or
984 <varname>SystemCallFilter=~@mount</varname>.</para></listitem>
798d3a52
ZJS
985 </varlistentry>
986
d2d6c096
LP
987 <varlistentry>
988 <term><varname>BindPaths=</varname></term>
989 <term><varname>BindReadOnlyPaths=</varname></term>
990
991 <listitem><para>Configures unit-specific bind mounts. A bind mount makes a particular file or directory
992 available at an additional place in the unit's view of the file system. Any bind mounts created with this
993 option are specific to the unit, and are not visible in the host's mount table. This option expects a
994 whitespace separated list of bind mount definitions. Each definition consists of a colon-separated triple of
995 source path, destination path and option string, where the latter two are optional. If only a source path is
996 specified the source and destination is taken to be the same. The option string may be either
997 <literal>rbind</literal> or <literal>norbind</literal> for configuring a recursive or non-recursive bind
98063016 998 mount. If the destination path is omitted, the option string must be omitted too.</para>
d2d6c096
LP
999
1000 <para><varname>BindPaths=</varname> creates regular writable bind mounts (unless the source file system mount
1001 is already marked read-only), while <varname>BindReadOnlyPaths=</varname> creates read-only bind mounts. These
1002 settings may be used more than once, each usage appends to the unit's list of bind mounts. If the empty string
1003 is assigned to either of these two options the entire list of bind mounts defined prior to this is reset. Note
1004 that in this case both read-only and regular bind mounts are reset, regardless which of the two settings is
1005 used.</para>
1006
1007 <para>This option is particularly useful when <varname>RootDirectory=</varname> is used. In this case the
301a21a8 1008 source path refers to a path on the host file system, while the destination path refers to a path below the
d2d6c096
LP
1009 root directory of the unit.</para></listitem>
1010 </varlistentry>
1011
798d3a52
ZJS
1012 <varlistentry>
1013 <term><varname>PrivateTmp=</varname></term>
1014
00d9ef85
LP
1015 <listitem><para>Takes a boolean argument. If true, sets up a new file system namespace for the executed
1016 processes and mounts private <filename>/tmp</filename> and <filename>/var/tmp</filename> directories inside it
1017 that is not shared by processes outside of the namespace. This is useful to secure access to temporary files of
1018 the process, but makes sharing between processes via <filename>/tmp</filename> or <filename>/var/tmp</filename>
1019 impossible. If this is enabled, all temporary files created by a service in these directories will be removed
1020 after the service is stopped. Defaults to false. It is possible to run two or more units within the same
1021 private <filename>/tmp</filename> and <filename>/var/tmp</filename> namespace by using the
798d3a52 1022 <varname>JoinsNamespaceOf=</varname> directive, see
00d9ef85 1023 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
effbd6d2
LP
1024 details. This setting is implied if <varname>DynamicUser=</varname> is set. For this setting the same
1025 restrictions regarding mount propagation and privileges apply as for <varname>ReadOnlyPaths=</varname> and
d71f0505
LP
1026 related calls, see above. Enabling this setting has the side effect of adding <varname>Requires=</varname> and
1027 <varname>After=</varname> dependencies on all mount units necessary to access <filename>/tmp</filename> and
1028 <filename>/var/tmp</filename>. Moreover an implicitly <varname>After=</varname> ordering on
1029 <citerefentry><refentrytitle>systemd-tmpfiles-setup.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
1030 is added.</para></listitem>
798d3a52
ZJS
1031 </varlistentry>
1032
1033 <varlistentry>
1034 <term><varname>PrivateDevices=</varname></term>
1035
effbd6d2
LP
1036 <listitem><para>Takes a boolean argument. If true, sets up a new /dev namespace for the executed processes and
1037 only adds API pseudo devices such as <filename>/dev/null</filename>, <filename>/dev/zero</filename> or
1038 <filename>/dev/random</filename> (as well as the pseudo TTY subsystem) to it, but no physical devices such as
9221aec8
DH
1039 <filename>/dev/sda</filename>, system memory <filename>/dev/mem</filename>, system ports
1040 <filename>/dev/port</filename> and others. This is useful to securely turn off physical device access by the
8f81a5f6
DH
1041 executed process. Defaults to false. Enabling this option will install a system call filter to block low-level
1042 I/O system calls that are grouped in the <varname>@raw-io</varname> set, will also remove
2cd0a735
DH
1043 <constant>CAP_MKNOD</constant> and <constant>CAP_SYS_RAWIO</constant> from the capability bounding set for
1044 the unit (see above), and set <varname>DevicePolicy=closed</varname> (see
798d3a52 1045 <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>
effbd6d2
LP
1046 for details). Note that using this setting will disconnect propagation of mounts from the service to the host
1047 (propagation in the opposite direction continues to work). This means that this setting may not be used for
1048 services which shall be able to install mount points in the main mount namespace. The /dev namespace will be
1049 mounted read-only and 'noexec'. The latter may break old programs which try to set up executable memory by
1050 using <citerefentry><refentrytitle>mmap</refentrytitle><manvolnum>2</manvolnum></citerefentry> of
1051 <filename>/dev/zero</filename> instead of using <constant>MAP_ANON</constant>. This setting is implied if
1052 <varname>DynamicUser=</varname> is set. For this setting the same restrictions regarding mount propagation and
a7db8614
DH
1053 privileges apply as for <varname>ReadOnlyPaths=</varname> and related calls, see above.
1054 If turned on and if running in user mode, or in system mode, but without the <constant>CAP_SYS_ADMIN</constant>
1055 capability (e.g. setting <varname>User=</varname>), <varname>NoNewPrivileges=yes</varname>
1056 is implied.
1057 </para></listitem>
798d3a52
ZJS
1058 </varlistentry>
1059
1060 <varlistentry>
1061 <term><varname>PrivateNetwork=</varname></term>
1062
1063 <listitem><para>Takes a boolean argument. If true, sets up a
1064 new network namespace for the executed processes and
1065 configures only the loopback network device
1066 <literal>lo</literal> inside it. No other network devices will
1067 be available to the executed process. This is useful to
1068 securely turn off network access by the executed process.
1069 Defaults to false. It is possible to run two or more units
1070 within the same private network namespace by using the
1071 <varname>JoinsNamespaceOf=</varname> directive, see
1072 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
1073 for details. Note that this option will disconnect all socket
1074 families from the host, this includes AF_NETLINK and AF_UNIX.
1075 The latter has the effect that AF_UNIX sockets in the abstract
1076 socket namespace will become unavailable to the processes
1077 (however, those located in the file system will continue to be
1078 accessible).</para></listitem>
1079 </varlistentry>
1080
1081 <varlistentry>
d251207d
LP
1082 <term><varname>PrivateUsers=</varname></term>
1083
1084 <listitem><para>Takes a boolean argument. If true, sets up a new user namespace for the executed processes and
1085 configures a minimal user and group mapping, that maps the <literal>root</literal> user and group as well as
1086 the unit's own user and group to themselves and everything else to the <literal>nobody</literal> user and
1087 group. This is useful to securely detach the user and group databases used by the unit from the rest of the
1088 system, and thus to create an effective sandbox environment. All files, directories, processes, IPC objects and
2dd67817 1089 other resources owned by users/groups not equaling <literal>root</literal> or the unit's own will stay visible
d251207d
LP
1090 from within the unit but appear owned by the <literal>nobody</literal> user and group. If this mode is enabled,
1091 all unit processes are run without privileges in the host user namespace (regardless if the unit's own
1092 user/group is <literal>root</literal> or not). Specifically this means that the process will have zero process
1093 capabilities on the host's user namespace, but full capabilities within the service's user namespace. Settings
1094 such as <varname>CapabilityBoundingSet=</varname> will affect only the latter, and there's no way to acquire
1095 additional capabilities in the host's user namespace. Defaults to off.</para>
1096
1097 <para>This setting is particularly useful in conjunction with <varname>RootDirectory=</varname>, as the need to
1098 synchronize the user and group databases in the root directory and on the host is reduced, as the only users
1099 and groups who need to be matched are <literal>root</literal>, <literal>nobody</literal> and the unit's own
1100 user and group.</para></listitem>
1101 </varlistentry>
1102
798d3a52
ZJS
1103 <varlistentry>
1104 <term><varname>ProtectSystem=</varname></term>
1105
3f815163
LP
1106 <listitem><para>Takes a boolean argument or the special values <literal>full</literal> or
1107 <literal>strict</literal>. If true, mounts the <filename>/usr</filename> and <filename>/boot</filename>
1108 directories read-only for processes invoked by this unit. If set to <literal>full</literal>, the
1109 <filename>/etc</filename> directory is mounted read-only, too. If set to <literal>strict</literal> the entire
1110 file system hierarchy is mounted read-only, except for the API file system subtrees <filename>/dev</filename>,
1111 <filename>/proc</filename> and <filename>/sys</filename> (protect these directories using
1112 <varname>PrivateDevices=</varname>, <varname>ProtectKernelTunables=</varname>,
1113 <varname>ProtectControlGroups=</varname>). This setting ensures that any modification of the vendor-supplied
1114 operating system (and optionally its configuration, and local mounts) is prohibited for the service. It is
1115 recommended to enable this setting for all long-running services, unless they are involved with system updates
1116 or need to modify the operating system in other ways. If this option is used,
effbd6d2
LP
1117 <varname>ReadWritePaths=</varname> may be used to exclude specific directories from being made read-only. This
1118 setting is implied if <varname>DynamicUser=</varname> is set. For this setting the same restrictions regarding
1119 mount propagation and privileges apply as for <varname>ReadOnlyPaths=</varname> and related calls, see
1120 above. Defaults to off.</para></listitem>
798d3a52
ZJS
1121 </varlistentry>
1122
1123 <varlistentry>
1124 <term><varname>ProtectHome=</varname></term>
1125
effbd6d2
LP
1126 <listitem><para>Takes a boolean argument or <literal>read-only</literal>. If true, the directories
1127 <filename>/home</filename>, <filename>/root</filename> and <filename>/run/user</filename> are made inaccessible
1128 and empty for processes invoked by this unit. If set to <literal>read-only</literal>, the three directories are
1129 made read-only instead. It is recommended to enable this setting for all long-running services (in particular
1130 network-facing ones), to ensure they cannot get access to private user data, unless the services actually
1131 require access to the user's private data. This setting is implied if <varname>DynamicUser=</varname> is
1132 set. For this setting the same restrictions regarding mount propagation and privileges apply as for
1133 <varname>ReadOnlyPaths=</varname> and related calls, see above.</para></listitem>
59eeb84b
LP
1134 </varlistentry>
1135
1136 <varlistentry>
1137 <term><varname>ProtectKernelTunables=</varname></term>
1138
1139 <listitem><para>Takes a boolean argument. If true, kernel variables accessible through
49accde7
DH
1140 <filename>/proc/sys</filename>, <filename>/sys</filename>, <filename>/proc/sysrq-trigger</filename>,
1141 <filename>/proc/latency_stats</filename>, <filename>/proc/acpi</filename>,
1142 <filename>/proc/timer_stats</filename>, <filename>/proc/fs</filename> and <filename>/proc/irq</filename> will
1143 be made read-only to all processes of the unit. Usually, tunable kernel variables should only be written at
e778185b
DH
1144 boot-time, with the <citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
1145 mechanism. Almost no services need to write to these at runtime; it is hence recommended to turn this on for
1146 most services. For this setting the same restrictions regarding mount propagation and privileges apply as for
ac246d98 1147 <varname>ReadOnlyPaths=</varname> and related calls, see above. Defaults to off.
a7db8614
DH
1148 If turned on and if running in user mode, or in system mode, but without the <constant>CAP_SYS_ADMIN</constant>
1149 capability (e.g. setting <varname>User=</varname>), <varname>NoNewPrivileges=yes</varname>
1150 is implied. Note that this option does not prevent kernel tuning through IPC interfaces
1151 and external programs. However <varname>InaccessiblePaths=</varname> can be used to
1152 make some IPC file system objects inaccessible.</para></listitem>
59eeb84b
LP
1153 </varlistentry>
1154
85265556
DH
1155 <varlistentry>
1156 <term><varname>ProtectKernelModules=</varname></term>
1157
1158 <listitem><para>Takes a boolean argument. If true, explicit module loading will
1159 be denied. This allows to turn off module load and unload operations on modular
1160 kernels. It is recommended to turn this on for most services that do not need special
1161 file systems or extra kernel modules to work. Default to off. Enabling this option
1162 removes <constant>CAP_SYS_MODULE</constant> from the capability bounding set for
1163 the unit, and installs a system call filter to block module system calls,
1164 also <filename>/usr/lib/modules</filename> is made inaccessible. For this
1165 setting the same restrictions regarding mount propagation and privileges
1166 apply as for <varname>ReadOnlyPaths=</varname> and related calls, see above.
1167 Note that limited automatic module loading due to user configuration or kernel
1168 mapping tables might still happen as side effect of requested user operations,
1169 both privileged and unprivileged. To disable module auto-load feature please see
1170 <citerefentry><refentrytitle>sysctl.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>
1171 <constant>kernel.modules_disabled</constant> mechanism and
1172 <filename>/proc/sys/kernel/modules_disabled</filename> documentation.
1173 If turned on and if running in user mode, or in system mode, but without the <constant>CAP_SYS_ADMIN</constant>
1174 capability (e.g. setting <varname>User=</varname>), <varname>NoNewPrivileges=yes</varname>
1175 is implied.
1176 </para></listitem>
1177 </varlistentry>
1178
59eeb84b
LP
1179 <varlistentry>
1180 <term><varname>ProtectControlGroups=</varname></term>
1181
effbd6d2
LP
1182 <listitem><para>Takes a boolean argument. If true, the Linux Control Groups (<citerefentry
1183 project='man-pages'><refentrytitle>cgroups</refentrytitle><manvolnum>7</manvolnum></citerefentry>) hierarchies
1184 accessible through <filename>/sys/fs/cgroup</filename> will be made read-only to all processes of the
1185 unit. Except for container managers no services should require write access to the control groups hierarchies;
1186 it is hence recommended to turn this on for most services. For this setting the same restrictions regarding
1187 mount propagation and privileges apply as for <varname>ReadOnlyPaths=</varname> and related calls, see
1188 above. Defaults to off.</para></listitem>
798d3a52
ZJS
1189 </varlistentry>
1190
1191 <varlistentry>
1192 <term><varname>MountFlags=</varname></term>
1193
effbd6d2
LP
1194 <listitem><para>Takes a mount propagation flag: <option>shared</option>, <option>slave</option> or
1195 <option>private</option>, which control whether mounts in the file system namespace set up for this unit's
7141028d 1196 processes will receive or propagate mounts and unmounts. See <citerefentry
effbd6d2
LP
1197 project='man-pages'><refentrytitle>mount</refentrytitle><manvolnum>2</manvolnum></citerefentry> for
1198 details. Defaults to <option>shared</option>. Use <option>shared</option> to ensure that mounts and unmounts
fa2a3966
IK
1199 are propagated from systemd's namespace to the service's namespace and vice versa. Use <option>slave</option>
1200 to run processes so that none of their mounts and unmounts will propagate to the host. Use <option>private</option>
374e6922 1201 to also ensure that no mounts and unmounts from the host will propagate into the unit processes' namespace.
4b957756
IK
1202 If this is set to <option>slave</option> or <option>private</option>, any mounts created by spawned processes
1203 will be unmounted after the completion of the current command line of <varname>ExecStartPre=</varname>,
1204 <varname>ExecStartPost=</varname>, <varname>ExecStart=</varname>,
1205 and <varname>ExecStopPost=</varname>. Note that
effbd6d2
LP
1206 <option>slave</option> means that file systems mounted on the host might stay mounted continuously in the
1207 unit's namespace, and thus keep the device busy. Note that the file system namespace related options
1208 (<varname>PrivateTmp=</varname>, <varname>PrivateDevices=</varname>, <varname>ProtectSystem=</varname>,
1209 <varname>ProtectHome=</varname>, <varname>ProtectKernelTunables=</varname>,
1210 <varname>ProtectControlGroups=</varname>, <varname>ReadOnlyPaths=</varname>,
1211 <varname>InaccessiblePaths=</varname>, <varname>ReadWritePaths=</varname>) require that mount and unmount
1212 propagation from the unit's file system namespace is disabled, and hence downgrade <option>shared</option> to
798d3a52
ZJS
1213 <option>slave</option>. </para></listitem>
1214 </varlistentry>
1215
1216 <varlistentry>
1217 <term><varname>UtmpIdentifier=</varname></term>
1218
1219 <listitem><para>Takes a four character identifier string for
023a4f67
LP
1220 an <citerefentry
1221 project='man-pages'><refentrytitle>utmp</refentrytitle><manvolnum>5</manvolnum></citerefentry>
1222 and wtmp entry for this service. This should only be
1223 set for services such as <command>getty</command>
1224 implementations (such as <citerefentry
1225 project='die-net'><refentrytitle>agetty</refentrytitle><manvolnum>8</manvolnum></citerefentry>)
798d3a52 1226 where utmp/wtmp entries must be created and cleared before and
023a4f67
LP
1227 after execution, or for services that shall be executed as if
1228 they were run by a <command>getty</command> process (see
1229 below). If the configured string is longer than four
798d3a52
ZJS
1230 characters, it is truncated and the terminal four characters
1231 are used. This setting interprets %I style string
1232 replacements. This setting is unset by default, i.e. no
1233 utmp/wtmp entries are created or cleaned up for this
1234 service.</para></listitem>
1235 </varlistentry>
1236
023a4f67
LP
1237 <varlistentry>
1238 <term><varname>UtmpMode=</varname></term>
1239
1240 <listitem><para>Takes one of <literal>init</literal>,
1241 <literal>login</literal> or <literal>user</literal>. If
1242 <varname>UtmpIdentifier=</varname> is set, controls which
1243 type of <citerefentry
1244 project='man-pages'><refentrytitle>utmp</refentrytitle><manvolnum>5</manvolnum></citerefentry>/wtmp
1245 entries for this service are generated. This setting has no
1246 effect unless <varname>UtmpIdentifier=</varname> is set
1247 too. If <literal>init</literal> is set, only an
1248 <constant>INIT_PROCESS</constant> entry is generated and the
6cd16034
LP
1249 invoked process must implement a
1250 <command>getty</command>-compatible utmp/wtmp logic. If
1251 <literal>login</literal> is set, first an
a8eaaee7 1252 <constant>INIT_PROCESS</constant> entry, followed by a
6cd16034 1253 <constant>LOGIN_PROCESS</constant> entry is generated. In
b938cb90 1254 this case, the invoked process must implement a <citerefentry
023a4f67
LP
1255 project='die-net'><refentrytitle>login</refentrytitle><manvolnum>1</manvolnum></citerefentry>-compatible
1256 utmp/wtmp logic. If <literal>user</literal> is set, first an
1257 <constant>INIT_PROCESS</constant> entry, then a
a8eaaee7 1258 <constant>LOGIN_PROCESS</constant> entry and finally a
023a4f67 1259 <constant>USER_PROCESS</constant> entry is generated. In this
b938cb90 1260 case, the invoked process may be any process that is suitable
023a4f67
LP
1261 to be run as session leader. Defaults to
1262 <literal>init</literal>.</para></listitem>
1263 </varlistentry>
1264
798d3a52
ZJS
1265 <varlistentry>
1266 <term><varname>SELinuxContext=</varname></term>
1267
1268 <listitem><para>Set the SELinux security context of the
1269 executed process. If set, this will override the automated
1270 domain transition. However, the policy still needs to
1271 authorize the transition. This directive is ignored if SELinux
1272 is disabled. If prefixed by <literal>-</literal>, all errors
43eb109a 1273 will be ignored. This does not affect commands prefixed with <literal>+</literal>.
cf677fe6 1274 See <citerefentry project='die-net'><refentrytitle>setexeccon</refentrytitle><manvolnum>3</manvolnum></citerefentry>
798d3a52
ZJS
1275 for details.</para></listitem>
1276 </varlistentry>
1277
1278 <varlistentry>
1279 <term><varname>AppArmorProfile=</varname></term>
1280
1281 <listitem><para>Takes a profile name as argument. The process
1282 executed by the unit will switch to this profile when started.
1283 Profiles must already be loaded in the kernel, or the unit
1284 will fail. This result in a non operation if AppArmor is not
1285 enabled. If prefixed by <literal>-</literal>, all errors will
43eb109a 1286 be ignored. This does not affect commands prefixed with <literal>+</literal>.</para></listitem>
798d3a52
ZJS
1287 </varlistentry>
1288
1289 <varlistentry>
1290 <term><varname>SmackProcessLabel=</varname></term>
1291
1292 <listitem><para>Takes a <option>SMACK64</option> security
1293 label as argument. The process executed by the unit will be
1294 started under this label and SMACK will decide whether the
b938cb90 1295 process is allowed to run or not, based on it. The process
798d3a52
ZJS
1296 will continue to run under the label specified here unless the
1297 executable has its own <option>SMACK64EXEC</option> label, in
1298 which case the process will transition to run under that
1299 label. When not specified, the label that systemd is running
1300 under is used. This directive is ignored if SMACK is
1301 disabled.</para>
1302
1303 <para>The value may be prefixed by <literal>-</literal>, in
1304 which case all errors will be ignored. An empty value may be
cf677fe6 1305 specified to unset previous assignments. This does not affect
43eb109a 1306 commands prefixed with <literal>+</literal>.</para>
798d3a52
ZJS
1307 </listitem>
1308 </varlistentry>
1309
1310 <varlistentry>
1311 <term><varname>IgnoreSIGPIPE=</varname></term>
1312
1313 <listitem><para>Takes a boolean argument. If true, causes
1314 <constant>SIGPIPE</constant> to be ignored in the executed
1315 process. Defaults to true because <constant>SIGPIPE</constant>
1316 generally is useful only in shell pipelines.</para></listitem>
1317 </varlistentry>
1318
1319 <varlistentry>
1320 <term><varname>NoNewPrivileges=</varname></term>
1321
add00535
LP
1322 <listitem><para>Takes a boolean argument. If true, ensures that the service process and all its children can
1323 never gain new privileges through <function>execve()</function> (e.g. via setuid or setgid bits, or filesystem
1324 capabilities). This is the simplest and most effective way to ensure that a process and its children can never
a7db8614 1325 elevate privileges again. Defaults to false, but certain settings force
add00535
LP
1326 <varname>NoNewPrivileges=yes</varname>, ignoring the value of this setting. This is the case when
1327 <varname>SystemCallFilter=</varname>, <varname>SystemCallArchitectures=</varname>,
1328 <varname>RestrictAddressFamilies=</varname>, <varname>RestrictNamespaces=</varname>,
1329 <varname>PrivateDevices=</varname>, <varname>ProtectKernelTunables=</varname>,
1330 <varname>ProtectKernelModules=</varname>, <varname>MemoryDenyWriteExecute=</varname>, or
1331 <varname>RestrictRealtime=</varname> are specified.</para></listitem>
798d3a52
ZJS
1332 </varlistentry>
1333
1334 <varlistentry>
1335 <term><varname>SystemCallFilter=</varname></term>
1336
c79aff9a
LP
1337 <listitem><para>Takes a space-separated list of system call names. If this setting is used, all system calls
1338 executed by the unit processes except for the listed ones will result in immediate process termination with the
1339 <constant>SIGSYS</constant> signal (whitelisting). If the first character of the list is <literal>~</literal>,
1340 the effect is inverted: only the listed system calls will result in immediate process termination
1341 (blacklisting). If running in user mode, or in system mode, but without the <constant>CAP_SYS_ADMIN</constant>
1342 capability (e.g. setting <varname>User=nobody</varname>), <varname>NoNewPrivileges=yes</varname> is
1343 implied. This feature makes use of the Secure Computing Mode 2 interfaces of the kernel ('seccomp filtering')
1344 and is useful for enforcing a minimal sandboxing environment. Note that the <function>execve</function>,
1345 <function>exit</function>, <function>exit_group</function>, <function>getrlimit</function>,
1346 <function>rt_sigreturn</function>, <function>sigreturn</function> system calls and the system calls for
1347 querying time and sleeping are implicitly whitelisted and do not need to be listed explicitly. This option may
1348 be specified more than once, in which case the filter masks are merged. If the empty string is assigned, the
1349 filter is reset, all prior assignments will have no effect. This does not affect commands prefixed with
1350 <literal>+</literal>.</para>
798d3a52 1351
2ca8dc15
LP
1352 <para>Note that strict system call filters may impact execution and error handling code paths of the service
1353 invocation. Specifically, access to the <function>execve</function> system call is required for the execution
1354 of the service binary — if it is blocked service invocation will necessarily fail. Also, if execution of the
1355 service binary fails for some reason (for example: missing service executable), the error handling logic might
1356 require access to an additional set of system calls in order to process and log this failure correctly. It
1357 might be necessary to temporarily disable system call filters in order to simplify debugging of such
1358 failures.</para>
1359
798d3a52
ZJS
1360 <para>If you specify both types of this option (i.e.
1361 whitelisting and blacklisting), the first encountered will
1362 take precedence and will dictate the default action
1363 (termination or approval of a system call). Then the next
1364 occurrences of this option will add or delete the listed
1365 system calls from the set of the filtered system calls,
1366 depending of its type and the default action. (For example, if
1367 you have started with a whitelisting of
1368 <function>read</function> and <function>write</function>, and
1369 right after it add a blacklisting of
1370 <function>write</function>, then <function>write</function>
201c1cc2
TM
1371 will be removed from the set.)</para>
1372
1373 <para>As the number of possible system
1374 calls is large, predefined sets of system calls are provided.
1375 A set starts with <literal>@</literal> character, followed by
1376 name of the set.
1377
1378 <table>
1379 <title>Currently predefined system call sets</title>
1380
1381 <tgroup cols='2'>
1382 <colspec colname='set' />
1383 <colspec colname='description' />
1384 <thead>
1385 <row>
1386 <entry>Set</entry>
1387 <entry>Description</entry>
1388 </row>
1389 </thead>
1390 <tbody>
133ddbbe
LP
1391 <row>
1392 <entry>@basic-io</entry>
1393 <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>
1394 </row>
201c1cc2
TM
1395 <row>
1396 <entry>@clock</entry>
1f9ac68b
LP
1397 <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>
1398 </row>
1399 <row>
1400 <entry>@cpu-emulation</entry>
1401 <entry>System calls for CPU emulation functionality (<citerefentry project='man-pages'><refentrytitle>vm86</refentrytitle><manvolnum>2</manvolnum></citerefentry> and related calls)</entry>
1402 </row>
1403 <row>
1404 <entry>@debug</entry>
1405 <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 1406 </row>
1a1b13c9
LP
1407 <row>
1408 <entry>@file-system</entry>
1409 <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>
1410 </row>
201c1cc2
TM
1411 <row>
1412 <entry>@io-event</entry>
1f9ac68b 1413 <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
1414 </row>
1415 <row>
1416 <entry>@ipc</entry>
cd5bfd7e 1417 <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
1418 </row>
1419 <row>
1420 <entry>@keyring</entry>
1421 <entry>Kernel keyring access (<citerefentry project='man-pages'><refentrytitle>keyctl</refentrytitle><manvolnum>2</manvolnum></citerefentry> and related calls)</entry>
201c1cc2
TM
1422 </row>
1423 <row>
1424 <entry>@module</entry>
d5efc18b 1425 <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
1426 </row>
1427 <row>
1428 <entry>@mount</entry>
d5efc18b 1429 <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
1430 </row>
1431 <row>
1432 <entry>@network-io</entry>
1f9ac68b 1433 <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
1434 </row>
1435 <row>
1436 <entry>@obsolete</entry>
1f9ac68b 1437 <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
1438 </row>
1439 <row>
1440 <entry>@privileged</entry>
1f9ac68b 1441 <entry>All system calls which need super-user capabilities (<citerefentry project='man-pages'><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>)</entry>
201c1cc2
TM
1442 </row>
1443 <row>
1444 <entry>@process</entry>
d5efc18b 1445 <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
1446 </row>
1447 <row>
1448 <entry>@raw-io</entry>
aa6b9cec 1449 <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 1450 </row>
bd2ab3f4
LP
1451 <row>
1452 <entry>@reboot</entry>
1453 <entry>System calls for rebooting and reboot preparation (<citerefentry project='man-pages'><refentrytitle>reboot</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <function>kexec()</function>, …)</entry>
1454 </row>
133ddbbe
LP
1455 <row>
1456 <entry>@resources</entry>
1457 <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>
1458 </row>
bd2ab3f4
LP
1459 <row>
1460 <entry>@swap</entry>
1461 <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>
1462 </row>
201c1cc2
TM
1463 </tbody>
1464 </tgroup>
1465 </table>
1466
869feb33
ZJS
1467 Note, that as new system calls are added to the kernel, additional system calls might be
1468 added to the groups above. Contents of the sets may also change between systemd
1469 versions. In addition, the list of system calls depends on the kernel version and
1470 architecture for which systemd was compiled. Use
1471 <command>systemd-analyze syscall-filter</command> to list the actual list of system calls in
1472 each filter.
1473 </para>
effbd6d2
LP
1474
1475 <para>It is recommended to combine the file system namespacing related options with
1476 <varname>SystemCallFilter=~@mount</varname>, in order to prohibit the unit's processes to undo the
1477 mappings. Specifically these are the options <varname>PrivateTmp=</varname>,
1478 <varname>PrivateDevices=</varname>, <varname>ProtectSystem=</varname>, <varname>ProtectHome=</varname>,
1479 <varname>ProtectKernelTunables=</varname>, <varname>ProtectControlGroups=</varname>,
1480 <varname>ReadOnlyPaths=</varname>, <varname>InaccessiblePaths=</varname> and
1481 <varname>ReadWritePaths=</varname>.</para></listitem>
798d3a52
ZJS
1482 </varlistentry>
1483
1484 <varlistentry>
1485 <term><varname>SystemCallErrorNumber=</varname></term>
1486
1487 <listitem><para>Takes an <literal>errno</literal> error number
1488 name to return when the system call filter configured with
1489 <varname>SystemCallFilter=</varname> is triggered, instead of
1490 terminating the process immediately. Takes an error name such
1491 as <constant>EPERM</constant>, <constant>EACCES</constant> or
1492 <constant>EUCLEAN</constant>. When this setting is not used,
1493 or when the empty string is assigned, the process will be
1494 terminated immediately when the filter is
1495 triggered.</para></listitem>
1496 </varlistentry>
1497
1498 <varlistentry>
1499 <term><varname>SystemCallArchitectures=</varname></term>
1500
aa34055f
ZJS
1501 <listitem><para>Takes a space-separated list of architecture identifiers to
1502 include in the system call filter. The known architecture identifiers are the same
1503 as for <varname>ConditionArchitecture=</varname> described in
1504 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1505 as well as <constant>x32</constant>, <constant>mips64-n32</constant>,
1506 <constant>mips64-le-n32</constant>, and the special identifier
1507 <constant>native</constant>. Only system calls of the specified architectures will
1508 be permitted to processes of this unit. This is an effective way to disable
1509 compatibility with non-native architectures for processes, for example to prohibit
1510 execution of 32-bit x86 binaries on 64-bit x86-64 systems. The special
1511 <constant>native</constant> identifier implicitly maps to the native architecture
1512 of the system (or more strictly: to the architecture the system manager is
1513 compiled for). If running in user mode, or in system mode, but without the
1514 <constant>CAP_SYS_ADMIN</constant> capability (e.g. setting
1515 <varname>User=nobody</varname>), <varname>NoNewPrivileges=yes</varname> is
1516 implied. Note that setting this option to a non-empty list implies that
1517 <constant>native</constant> is included too. By default, this option is set to the
1518 empty list, i.e. no architecture system call filtering is applied.
1519 </para></listitem>
798d3a52
ZJS
1520 </varlistentry>
1521
1522 <varlistentry>
1523 <term><varname>RestrictAddressFamilies=</varname></term>
1524
142bd808
LP
1525 <listitem><para>Restricts the set of socket address families accessible to the processes of this unit. Takes a
1526 space-separated list of address family names to whitelist, such as <constant>AF_UNIX</constant>,
1527 <constant>AF_INET</constant> or <constant>AF_INET6</constant>. When prefixed with <constant>~</constant> the
1528 listed address families will be applied as blacklist, otherwise as whitelist. Note that this restricts access
1529 to the <citerefentry
1530 project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>2</manvolnum></citerefentry> system call
1531 only. Sockets passed into the process by other means (for example, by using socket activation with socket
1532 units, see <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>)
1533 are unaffected. Also, sockets created with <function>socketpair()</function> (which creates connected AF_UNIX
1534 sockets only) are unaffected. Note that this option has no effect on 32-bit x86, s390, s390x, mips, mips-le,
1535 ppc, ppc-le, pcc64, ppc64-le and is ignored (but works correctly on other architectures, including x86-64). If
1536 running in user mode, or in system mode, but without the <constant>CAP_SYS_ADMIN</constant> capability
1537 (e.g. setting <varname>User=nobody</varname>), <varname>NoNewPrivileges=yes</varname> is implied. By default,
1538 no restrictions apply, all address families are accessible to processes. If assigned the empty string, any
1539 previous address familiy restriction changes are undone. This setting does not affect commands prefixed with
1540 <literal>+</literal>.</para>
1541
1542 <para>Use this option to limit exposure of processes to remote access, in particular via exotic and sensitive
1543 network protocols, such as <constant>AF_PACKET</constant>. Note that in most cases, the local
1544 <constant>AF_UNIX</constant> address family should be included in the configured whitelist as it is frequently
1545 used for local communication, including for
798d3a52 1546 <citerefentry><refentrytitle>syslog</refentrytitle><manvolnum>2</manvolnum></citerefentry>
142bd808 1547 logging.</para></listitem>
798d3a52
ZJS
1548 </varlistentry>
1549
add00535
LP
1550 <varlistentry>
1551 <term><varname>RestrictNamespaces=</varname></term>
1552
1553 <listitem><para>Restricts access to Linux namespace functionality for the processes of this unit. For details
1554 about Linux namespaces, see
1555 <citerefentry><refentrytitle>namespaces</refentrytitle><manvolnum>7</manvolnum></citerefentry>. Either takes a
1556 boolean argument, or a space-separated list of namespace type identifiers. If false (the default), no
1557 restrictions on namespace creation and switching are made. If true, access to any kind of namespacing is
1558 prohibited. Otherwise, a space-separated list of namespace type identifiers must be specified, consisting of
1559 any combination of: <constant>cgroup</constant>, <constant>ipc</constant>, <constant>net</constant>,
1560 <constant>mnt</constant>, <constant>pid</constant>, <constant>user</constant> and <constant>uts</constant>. Any
1561 namespace type listed is made accessible to the unit's processes, access to namespace types not listed is
1562 prohibited (whitelisting). By prepending the list with a single tilda character (<literal>~</literal>) the
1563 effect may be inverted: only the listed namespace types will be made inaccessible, all unlisted ones are
1564 permitted (blacklisting). If the empty string is assigned, the default namespace restrictions are applied,
1565 which is equivalent to false. Internally, this setting limits access to the
1566 <citerefentry><refentrytitle>unshare</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
1567 <citerefentry><refentrytitle>clone</refentrytitle><manvolnum>2</manvolnum></citerefentry> and
1568 <citerefentry><refentrytitle>setns</refentrytitle><manvolnum>2</manvolnum></citerefentry> system calls, taking
1569 the specified flags parameters into account. Note that — if this option is used — in addition to restricting
1570 creation and switching of the specified types of namespaces (or all of them, if true) access to the
a7db8614
DH
1571 <function>setns()</function> system call with a zero flags parameter is prohibited.
1572 If running in user mode, or in system mode, but without the <constant>CAP_SYS_ADMIN</constant>
1573 capability (e.g. setting <varname>User=</varname>), <varname>NoNewPrivileges=yes</varname>
1574 is implied.
1575 </para></listitem>
add00535
LP
1576 </varlistentry>
1577
798d3a52
ZJS
1578 <varlistentry>
1579 <term><varname>Personality=</varname></term>
1580
7882632d
LP
1581 <listitem><para>Controls which kernel architecture <citerefentry
1582 project='man-pages'><refentrytitle>uname</refentrytitle><manvolnum>2</manvolnum></citerefentry> shall report,
1583 when invoked by unit processes. Takes one of the architecture identifiers <constant>x86</constant>,
1584 <constant>x86-64</constant>, <constant>ppc</constant>, <constant>ppc-le</constant>, <constant>ppc64</constant>,
1585 <constant>ppc64-le</constant>, <constant>s390</constant> or <constant>s390x</constant>. Which personality
1586 architectures are supported depends on the system architecture. Usually the 64bit versions of the various
1587 system architectures support their immediate 32bit personality architecture counterpart, but no others. For
1588 example, <constant>x86-64</constant> systems support the <constant>x86-64</constant> and
1589 <constant>x86</constant> personalities but no others. The personality feature is useful when running 32-bit
1590 services on a 64-bit host system. If not specified, the personality is left unmodified and thus reflects the
1591 personality of the host system's kernel.</para></listitem>
798d3a52
ZJS
1592 </varlistentry>
1593
1594 <varlistentry>
1595 <term><varname>RuntimeDirectory=</varname></term>
1596 <term><varname>RuntimeDirectoryMode=</varname></term>
1597
1598 <listitem><para>Takes a list of directory names. If set, one
1599 or more directories by the specified names will be created
1600 below <filename>/run</filename> (for system services) or below
1601 <varname>$XDG_RUNTIME_DIR</varname> (for user services) when
1602 the unit is started, and removed when the unit is stopped. The
1603 directories will have the access mode specified in
1604 <varname>RuntimeDirectoryMode=</varname>, and will be owned by
1605 the user and group specified in <varname>User=</varname> and
1606 <varname>Group=</varname>. Use this to manage one or more
1607 runtime directories of the unit and bind their lifetime to the
1608 daemon runtime. The specified directory names must be
1609 relative, and may not include a <literal>/</literal>, i.e.
1610 must refer to simple directories to create or remove. This is
1611 particularly useful for unprivileged daemons that cannot
1612 create runtime directories in <filename>/run</filename> due to
1613 lack of privileges, and to make sure the runtime directory is
1614 cleaned up automatically after use. For runtime directories
1615 that require more complex or different configuration or
1616 lifetime guarantees, please consider using
1617 <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para></listitem>
1618 </varlistentry>
1619
f3e43635
TM
1620 <varlistentry>
1621 <term><varname>MemoryDenyWriteExecute=</varname></term>
1622
1623 <listitem><para>Takes a boolean argument. If set, attempts to create memory mappings that are writable and
d2ffa389
TM
1624 executable at the same time, or to change existing memory mappings to become executable, or mapping shared memory
1625 segments as executable are prohibited.
f3e43635
TM
1626 Specifically, a system call filter is added that rejects
1627 <citerefentry><refentrytitle>mmap</refentrytitle><manvolnum>2</manvolnum></citerefentry>
d2ffa389
TM
1628 system calls with both <constant>PROT_EXEC</constant> and <constant>PROT_WRITE</constant> set,
1629 <citerefentry><refentrytitle>mprotect</refentrytitle><manvolnum>2</manvolnum></citerefentry>
1630 system calls with <constant>PROT_EXEC</constant> set and
1631 <citerefentry><refentrytitle>shmat</refentrytitle><manvolnum>2</manvolnum></citerefentry>
1632 system calls with <constant>SHM_EXEC</constant> set. Note that this option is incompatible with programs
f3e43635
TM
1633 that generate program code dynamically at runtime, such as JIT execution engines, or programs compiled making
1634 use of the code "trampoline" feature of various C compilers. This option improves service security, as it makes
1635 harder for software exploits to change running code dynamically.
a7db8614
DH
1636 If running in user mode, or in system mode, but without the <constant>CAP_SYS_ADMIN</constant>
1637 capability (e.g. setting <varname>User=</varname>), <varname>NoNewPrivileges=yes</varname>
1638 is implied.
f3e43635
TM
1639 </para></listitem>
1640 </varlistentry>
1641
f4170c67
LP
1642 <varlistentry>
1643 <term><varname>RestrictRealtime=</varname></term>
1644
1645 <listitem><para>Takes a boolean argument. If set, any attempts to enable realtime scheduling in a process of
1646 the unit are refused. This restricts access to realtime task scheduling policies such as
1647 <constant>SCHED_FIFO</constant>, <constant>SCHED_RR</constant> or <constant>SCHED_DEADLINE</constant>. See
0a07667d 1648 <citerefentry project='man-pages'><refentrytitle>sched</refentrytitle><manvolnum>7</manvolnum></citerefentry> for details about
a7db8614
DH
1649 these scheduling policies. If running in user mode, or in system mode, but
1650 without the <constant>CAP_SYS_ADMIN</constant> capability
1651 (e.g. setting <varname>User=</varname>), <varname>NoNewPrivileges=yes</varname>
1652 is implied. Realtime scheduling policies may be used to monopolize CPU time for longer periods
f4170c67
LP
1653 of time, and may hence be used to lock up or otherwise trigger Denial-of-Service situations on the system. It
1654 is hence recommended to restrict access to realtime scheduling to the few programs that actually require
1655 them. Defaults to off.</para></listitem>
1656 </varlistentry>
1657
798d3a52
ZJS
1658 </variablelist>
1659 </refsect1>
1660
1661 <refsect1>
1662 <title>Environment variables in spawned processes</title>
1663
1664 <para>Processes started by the system are executed in a clean
1665 environment in which select variables listed below are set. System
1666 processes started by systemd do not inherit variables from PID 1,
1667 but processes started by user systemd instances inherit all
1668 environment variables from the user systemd instance.
1669 </para>
1670
1671 <variablelist class='environment-variables'>
1672 <varlistentry>
1673 <term><varname>$PATH</varname></term>
1674
1675 <listitem><para>Colon-separated list of directories to use
1676 when launching executables. Systemd uses a fixed value of
1677 <filename>/usr/local/sbin</filename>:<filename>/usr/local/bin</filename>:<filename>/usr/sbin</filename>:<filename>/usr/bin</filename>:<filename>/sbin</filename>:<filename>/bin</filename>.
1678 </para></listitem>
1679 </varlistentry>
1680
1681 <varlistentry>
1682 <term><varname>$LANG</varname></term>
1683
1684 <listitem><para>Locale. Can be set in
3ba3a79d 1685 <citerefentry project='man-pages'><refentrytitle>locale.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
798d3a52
ZJS
1686 or on the kernel command line (see
1687 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
1688 and
1689 <citerefentry><refentrytitle>kernel-command-line</refentrytitle><manvolnum>7</manvolnum></citerefentry>).
1690 </para></listitem>
1691 </varlistentry>
1692
1693 <varlistentry>
1694 <term><varname>$USER</varname></term>
1695 <term><varname>$LOGNAME</varname></term>
1696 <term><varname>$HOME</varname></term>
1697 <term><varname>$SHELL</varname></term>
1698
1699 <listitem><para>User name (twice), home directory, and the
8b89628a 1700 login shell. See
3ba3a79d 1701 <citerefentry project='die-net'><refentrytitle>passwd</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
798d3a52
ZJS
1702 </para></listitem>
1703 </varlistentry>
1704
4b58153d
LP
1705 <varlistentry>
1706 <term><varname>$INVOCATION_ID</varname></term>
1707
1708 <listitem><para>Contains a randomized, unique 128bit ID identifying each runtime cycle of the unit, formatted
1709 as 32 character hexadecimal string. A new ID is assigned each time the unit changes from an inactive state into
1710 an activating or active state, and may be used to identify this specific runtime cycle, in particular in data
1711 stored offline, such as the journal. The same ID is passed to all processes run as part of the
1712 unit.</para></listitem>
1713 </varlistentry>
1714
798d3a52
ZJS
1715 <varlistentry>
1716 <term><varname>$XDG_RUNTIME_DIR</varname></term>
1717
1718 <listitem><para>The directory for volatile state. Set for the
1719 user <command>systemd</command> instance, and also in user
1720 sessions. See
1721 <citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
1722 </para></listitem>
1723 </varlistentry>
1724
1725 <varlistentry>
1726 <term><varname>$XDG_SESSION_ID</varname></term>
1727 <term><varname>$XDG_SEAT</varname></term>
1728 <term><varname>$XDG_VTNR</varname></term>
1729
1730 <listitem><para>The identifier of the session, the seat name,
1731 and virtual terminal of the session. Set by
1732 <citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry>
1733 for login sessions. <varname>$XDG_SEAT</varname> and
1734 <varname>$XDG_VTNR</varname> will only be set when attached to
1735 a seat and a tty.</para></listitem>
1736 </varlistentry>
1737
1738 <varlistentry>
1739 <term><varname>$MAINPID</varname></term>
1740
2dd67817 1741 <listitem><para>The PID of the unit's main process if it is
798d3a52
ZJS
1742 known. This is only set for control processes as invoked by
1743 <varname>ExecReload=</varname> and similar. </para></listitem>
1744 </varlistentry>
1745
1746 <varlistentry>
1747 <term><varname>$MANAGERPID</varname></term>
1748
1749 <listitem><para>The PID of the user <command>systemd</command>
1750 instance, set for processes spawned by it. </para></listitem>
1751 </varlistentry>
1752
1753 <varlistentry>
1754 <term><varname>$LISTEN_FDS</varname></term>
1755 <term><varname>$LISTEN_PID</varname></term>
5c019cf2 1756 <term><varname>$LISTEN_FDNAMES</varname></term>
798d3a52
ZJS
1757
1758 <listitem><para>Information about file descriptors passed to a
1759 service for socket activation. See
1760 <citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
1761 </para></listitem>
1762 </varlistentry>
1763
5c019cf2
EV
1764 <varlistentry>
1765 <term><varname>$NOTIFY_SOCKET</varname></term>
1766
1767 <listitem><para>The socket
1768 <function>sd_notify()</function> talks to. See
1769 <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
1770 </para></listitem>
1771 </varlistentry>
1772
1773 <varlistentry>
1774 <term><varname>$WATCHDOG_PID</varname></term>
1775 <term><varname>$WATCHDOG_USEC</varname></term>
1776
1777 <listitem><para>Information about watchdog keep-alive notifications. See
1778 <citerefentry><refentrytitle>sd_watchdog_enabled</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
1779 </para></listitem>
1780 </varlistentry>
1781
798d3a52
ZJS
1782 <varlistentry>
1783 <term><varname>$TERM</varname></term>
1784
1785 <listitem><para>Terminal type, set only for units connected to
1786 a terminal (<varname>StandardInput=tty</varname>,
1787 <varname>StandardOutput=tty</varname>, or
1788 <varname>StandardError=tty</varname>). See
1789 <citerefentry project='man-pages'><refentrytitle>termcap</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
1790 </para></listitem>
1791 </varlistentry>
7bce046b
LP
1792
1793 <varlistentry>
1794 <term><varname>$JOURNAL_STREAM</varname></term>
1795
1796 <listitem><para>If the standard output or standard error output of the executed processes are connected to the
1797 journal (for example, by setting <varname>StandardError=journal</varname>) <varname>$JOURNAL_STREAM</varname>
1798 contains the device and inode numbers of the connection file descriptor, formatted in decimal, separated by a
1799 colon (<literal>:</literal>). This permits invoked processes to safely detect whether their standard output or
1800 standard error output are connected to the journal. The device and inode numbers of the file descriptors should
1801 be compared with the values set in the environment variable to determine whether the process output is still
1802 connected to the journal. Note that it is generally not sufficient to only check whether
1803 <varname>$JOURNAL_STREAM</varname> is set at all as services might invoke external processes replacing their
1804 standard output or standard error output, without unsetting the environment variable.</para>
1805
1806 <para>This environment variable is primarily useful to allow services to optionally upgrade their used log
1807 protocol to the native journal protocol (using
1808 <citerefentry><refentrytitle>sd_journal_print</refentrytitle><manvolnum>3</manvolnum></citerefentry> and other
1809 functions) if their standard output or standard error output is connected to the journal anyway, thus enabling
1810 delivery of structured metadata along with logged messages.</para></listitem>
1811 </varlistentry>
136dc4c4
LP
1812
1813 <varlistentry>
1814 <term><varname>$SERVICE_RESULT</varname></term>
1815
1816 <listitem><para>Only defined for the service unit type, this environment variable is passed to all
1817 <varname>ExecStop=</varname> and <varname>ExecStopPost=</varname> processes, and encodes the service
e0c7d5f7 1818 "result". Currently, the following values are defined: <literal>protocol</literal> (in case of a protocol
7ed0a4c5
JW
1819 violation; if a service did not take the steps required by its unit configuration), <literal>timeout</literal>
1820 (in case of an operation timeout), <literal>exit-code</literal> (if a service process exited with a non-zero
1821 exit code; see <varname>$EXIT_CODE</varname> below for the actual exit code returned), <literal>signal</literal>
e0c7d5f7
JW
1822 (if a service process was terminated abnormally by a signal; see <varname>$EXIT_CODE</varname> below for the
1823 actual signal used for the termination), <literal>core-dump</literal> (if a service process terminated
1824 abnormally and dumped core), <literal>watchdog</literal> (if the watchdog keep-alive ping was enabled for the
1825 service but it missed the deadline), or <literal>resources</literal> (a catch-all condition in case a system
1826 operation failed).</para>
136dc4c4
LP
1827
1828 <para>This environment variable is useful to monitor failure or successful termination of a service. Even
1829 though this variable is available in both <varname>ExecStop=</varname> and <varname>ExecStopPost=</varname>, it
1830 is usually a better choice to place monitoring tools in the latter, as the former is only invoked for services
1831 that managed to start up correctly, and the latter covers both services that failed during their start-up and
1832 those which failed during their runtime.</para></listitem>
1833 </varlistentry>
1834
1835 <varlistentry>
1836 <term><varname>$EXIT_CODE</varname></term>
1837 <term><varname>$EXIT_STATUS</varname></term>
1838
1839 <listitem><para>Only defined for the service unit type, these environment variables are passed to all
1840 <varname>ExecStop=</varname>, <varname>ExecStopPost=</varname> processes and contain exit status/code
1841 information of the main process of the service. For the precise definition of the exit code and status, see
1842 <citerefentry><refentrytitle>wait</refentrytitle><manvolnum>2</manvolnum></citerefentry>. <varname>$EXIT_CODE</varname>
1843 is one of <literal>exited</literal>, <literal>killed</literal>,
1844 <literal>dumped</literal>. <varname>$EXIT_STATUS</varname> contains the numeric exit code formatted as string
1845 if <varname>$EXIT_CODE</varname> is <literal>exited</literal>, and the signal name in all other cases. Note
1846 that these environment variables are only set if the service manager succeeded to start and identify the main
e64e1bfd
ZJS
1847 process of the service.</para>
1848
1849 <table>
1850 <title>Summary of possible service result variable values</title>
1851 <tgroup cols='3'>
1852 <colspec colname='result' />
e64e1bfd 1853 <colspec colname='code' />
a4e26faf 1854 <colspec colname='status' />
e64e1bfd
ZJS
1855 <thead>
1856 <row>
1857 <entry><varname>$SERVICE_RESULT</varname></entry>
e64e1bfd 1858 <entry><varname>$EXIT_CODE</varname></entry>
a4e26faf 1859 <entry><varname>$EXIT_STATUS</varname></entry>
e64e1bfd
ZJS
1860 </row>
1861 </thead>
1862
1863 <tbody>
a4e26faf
JW
1864 <row>
1865 <entry morerows="1" valign="top"><literal>protocol</literal></entry>
1866 <entry valign="top">not set</entry>
1867 <entry>not set</entry>
1868 </row>
1869 <row>
1870 <entry><literal>exited</literal></entry>
1871 <entry><literal>0</literal></entry>
1872 </row>
1873
29df65f9
ZJS
1874 <row>
1875 <entry morerows="1" valign="top"><literal>timeout</literal></entry>
1876 <entry valign="top"><literal>killed</literal></entry>
6757c06a 1877 <entry><literal>TERM</literal>, <literal>KILL</literal></entry>
29df65f9 1878 </row>
29df65f9
ZJS
1879 <row>
1880 <entry valign="top"><literal>exited</literal></entry>
6757c06a
LP
1881 <entry><literal>0</literal>, <literal>1</literal>, <literal>2</literal>, <literal
1882 >3</literal>, …, <literal>255</literal></entry>
29df65f9
ZJS
1883 </row>
1884
e64e1bfd
ZJS
1885 <row>
1886 <entry valign="top"><literal>exit-code</literal></entry>
1887 <entry valign="top"><literal>exited</literal></entry>
6757c06a
LP
1888 <entry><literal>0</literal>, <literal>1</literal>, <literal>2</literal>, <literal
1889 >3</literal>, …, <literal>255</literal></entry>
e64e1bfd
ZJS
1890 </row>
1891
1892 <row>
1893 <entry valign="top"><literal>signal</literal></entry>
1894 <entry valign="top"><literal>killed</literal></entry>
6757c06a 1895 <entry><literal>HUP</literal>, <literal>INT</literal>, <literal>KILL</literal>, …</entry>
e64e1bfd
ZJS
1896 </row>
1897
1898 <row>
1899 <entry valign="top"><literal>core-dump</literal></entry>
1900 <entry valign="top"><literal>dumped</literal></entry>
6757c06a 1901 <entry><literal>ABRT</literal>, <literal>SEGV</literal>, <literal>QUIT</literal>, …</entry>
e64e1bfd 1902 </row>
136dc4c4 1903
e64e1bfd
ZJS
1904 <row>
1905 <entry morerows="2" valign="top"><literal>watchdog</literal></entry>
1906 <entry><literal>dumped</literal></entry>
1907 <entry><literal>ABRT</literal></entry>
1908 </row>
1909 <row>
1910 <entry><literal>killed</literal></entry>
6757c06a 1911 <entry><literal>TERM</literal>, <literal>KILL</literal></entry>
e64e1bfd
ZJS
1912 </row>
1913 <row>
1914 <entry><literal>exited</literal></entry>
6757c06a
LP
1915 <entry><literal>0</literal>, <literal>1</literal>, <literal>2</literal>, <literal
1916 >3</literal>, …, <literal>255</literal></entry>
e64e1bfd
ZJS
1917 </row>
1918
1919 <row>
1920 <entry><literal>resources</literal></entry>
1921 <entry>any of the above</entry>
1922 <entry>any of the above</entry>
1923 </row>
29df65f9
ZJS
1924
1925 <row>
1926 <entry namest="results" nameend="code">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.</entry>
1927 </row>
e64e1bfd
ZJS
1928 </tbody>
1929 </tgroup>
1930 </table>
1931
1932 </listitem>
1933 </varlistentry>
798d3a52
ZJS
1934 </variablelist>
1935
1936 <para>Additional variables may be configured by the following
1937 means: for processes spawned in specific units, use the
5c019cf2
EV
1938 <varname>Environment=</varname>, <varname>EnvironmentFile=</varname>
1939 and <varname>PassEnvironment=</varname> options above; to specify
798d3a52
ZJS
1940 variables globally, use <varname>DefaultEnvironment=</varname>
1941 (see
1942 <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>)
1943 or the kernel option <varname>systemd.setenv=</varname> (see
1944 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>).
1945 Additional variables may also be set through PAM,
1946 cf. <citerefentry project='man-pages'><refentrytitle>pam_env</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
1947 </refsect1>
1948
1949 <refsect1>
1950 <title>See Also</title>
1951 <para>
1952 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
1953 <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
869feb33 1954 <citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
798d3a52
ZJS
1955 <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
1956 <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1957 <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1958 <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1959 <citerefentry><refentrytitle>systemd.swap</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1960 <citerefentry><refentrytitle>systemd.mount</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1961 <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1962 <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
a4c18002 1963 <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
798d3a52
ZJS
1964 <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
1965 <citerefentry><refentrytitle>tmpfiles.d</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1966 <citerefentry project='man-pages'><refentrytitle>exec</refentrytitle><manvolnum>3</manvolnum></citerefentry>
1967 </para>
1968 </refsect1>
dd1eb43b 1969
e64e1bfd 1970
dd1eb43b 1971</refentry>