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