1.1.2.1 Ensure /tmp is a separate partition

Information

The /tmp directory is a world-writable directory used for temporary storage by all users and some applications.

Rationale:

Making /tmp its own file system allows an administrator to set additional mount options such as the noexec option on the mount, making /tmp useless for an attacker to install executable code. It would also prevent an attacker from establishing a hard link to a system setuid program and wait for it to be updated. Once the program was updated, the hard link would be broken and the attacker would have his own copy of the program. If the program happened to have a security vulnerability, the attacker could continue to exploit the known flaw.

This can be accomplished by either mounting tmpfs to /tmp, or creating a separate partition for /tmp.

Impact:

Since the /tmp directory is intended to be world-writable, there is a risk of resource exhaustion if it is not bound to a separate partition.

Running out of /tmp space is a problem regardless of what kind of filesystem lies under it, but in a configuration where /tmp is not a separate file system it will essentially have the whole disk available, as the default installation only creates a single / partition. On the other hand, a RAM-based /tmp (as with tmpfs) will almost certainly be much smaller, which can lead to applications filling up the filesystem much more easily. Another alternative is to create a dedicated partition for /tmp from a separate volume or disk. One of the downsides of a disk-based dedicated partition is that it will be slower than tmpfs which is RAM-based.

/tmp utilizing tmpfs can be resized using the size={size} parameter in the relevant entry in /etc/fstab.

Solution

For specific configuration requirements of the /tmp mount for your environment, modify /etc/fstab or tmp.mount unit file:
Using /etc/fstab:
Configure /etc/fstab as appropriate:
Example:

tmpfs/tmptmpfs defaults,rw,nosuid,nodev,noexec,relatime 0 0

-OR-
Using a tmp.mount unit file:
Run the following command to create the tmp.mount file is the correct location:

# cp -v /usr/share/systemd/tmp.mount /etc/systemd/system/

Edit /etc/systemd/system/tmp.mount to configure the /tmp mount:
Example:

# SPDX-License-Identifier: LGPL-2.1+
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.

[Unit]
Description=Temporary Directory (/tmp)
Documentation=https://systemd.io/TEMPORARY_DIRECTORIES
Documentation=man:file-hierarchy(7)
Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems
ConditionPathIsSymbolicLink=!/tmp
DefaultDependencies=no
Conflicts=umount.target
Before=local-fs.target umount.target
After=swap.target

[Mount]
What=tmpfs
Where=/tmp
Type=tmpfs
Options=mode=1777,strictatime,nosuid,nodev,noexec

[Install]
WantedBy=local-fs.target

Run the following command to reload the systemd daemon with the updated tmp.mount unit file:

# systemctl daemon-reload

Run the following command to enable and start tmp.mount

# systemctl --now enable tmp.mount

Note: A reboot may be required to transition to /tmp mounted to tmpfs

See Also

https://workbench.cisecurity.org/benchmarks/13007

Item Details

Category: ACCESS CONTROL, MEDIA PROTECTION

References: 800-53|AC-3, 800-53|AC-5, 800-53|AC-6, 800-53|MP-2, CSCv7|14.6

Plugin: Unix

Control ID: 81fb3faaac3d7f280ab9c87b176afb866f8f41e852066ff5636a8a0a894ca4c8