Ensure /tmp is a separate partition
Profile
Level 1 - Server, Level 1 - Workstation, Assessment: Automated
Description
The /tmp directory is a world-writable directory used for temporary storage by all users and some applications.
Note: If an entry for /tmp exists in /etc/fstab it will take precedence over entries in a systemd unit file. There is an exception to this when a system is diskless and connected to iSCSI, entries in /etc/fstab may not take precedence over a systemd unit file.
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
By design files saved to /tmp should have no expectation of surviving a reboot of the system. tmpfs is ram based and all files stored to tmpfs will be lost when the system is rebooted.
If files need to be persistent through a reboot, they should be saved to /var/tmp not /tmp.
Since the /tmp directory is intended to be world-writable, there is a risk of resource exhaustion if it is not bound to tmpfs or 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.
Audit Procedure
Command Line
Run the following command and verify the output shows that /tmp is mounted. Particular requirements pertaining to mount options are covered in ensuing sections.
# findmnt -kn /tmp
Example output:
/tmp tmpfs tmpfs rw,nosuid,nodev,noexec
Ensure that systemd will mount the /tmp partition at boot time.
# systemctl is-enabled tmp.mount
Example output:
generated
Verify output is not masked or disabled.
Note: By default, systemd will output generated if there is an entry in /etc/fstab for /tmp. This just means systemd will use the entry in /etc/fstab instead of its default unit file configuration for /tmp.
Expected Result
/tmp should be mounted as a separate partition.
Remediation
Command Line
First ensure that systemd is correctly configured to ensure that /tmp will be mounted at boot time.
# systemctl unmask tmp.mount
For specific configuration requirements of the /tmp mount for your environment, modify /etc/fstab.
Example of using tmpfs with specific mount options:
tmpfs /tmp tmpfs defaults,rw,nosuid,nodev,noexec,relatime,size=2G 0 0
Note: the size=2G is an example of setting a specific size for tmpfs.
Example of using a volume or disk with specific mount options:
<device> /tmp <fstype> defaults,nodev,nosuid,noexec 0 0
Default Value
Not configured by default.
References
- https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems/
- https://www.freedesktop.org/software/systemd/man/systemd-fstab-generator.html
- https://www.kernel.org/doc/Documentation/filesystems/tmpfs.txt
- NIST SP 800-53 Rev. 5: CM-7
- RHEL 8 STIG Vul ID: V-230295
- RHEL 8 Rule ID: SV-30295r627750
CIS Controls
v8 - 3.3 Configure Data Access Control Lists (IG 1, IG 2, IG 3) v7 - 14.6 Protect Information through Access Control Lists (IG 1, IG 2, IG 3)
MITRE ATT&CK Mappings: T1499, T1499.001 | TA0005 | M1022