Group
Guide to the Secure Configuration of Ubuntu 1604
Group contains 21 groups and 36 rules |
Group
Services
Group contains 5 groups and 16 rules |
[ref]
The best protection against vulnerable software is running less software. This section describes how to review
the software which Ubuntu 1604 installs on a system and disable software which is not needed. It
then enumerates the software packages installed on a default Ubuntu 1604 system and provides guidance about which
ones can be safely disabled.
Ubuntu 1604 provides a convenient minimal install option that essentially installs the bare necessities for a functional
system. When building Ubuntu 1604 systems, it is highly recommended to select the minimal packages and then build up
the system from there. |
Group
Deprecated services
Group contains 5 rules |
[ref]
Some deprecated software services impact the overall system security due to their behavior (leak of
confidentiality in network exchange, usage as uncontrolled communication channel, risk associated with the service due to its old age, etc. |
Rule
Uninstall the nis package
[ref] | The support for Yellowpages should not be installed unless it is required. | Rationale: | NIS is the historical SUN service for central account management, more and more replaced by LDAP.
NIS does not support efficiently security constraints, ACL, etc. and should not be used. | Severity: | low | Rule ID: | xccdf_org.ssgproject.content_rule_package_nis_removed | Identifiers and References | Identifiers:
CCE- | |
|
Rule
Uninstall the inet-based telnet server
[ref] | The inet-based telnet daemon should be uninstalled. | Rationale: | telnet allows clear text communications, and does not protect any data transmission between client and server. Any confidential data can be listened and no integrity checking is made. | Severity: | high | Rule ID: | xccdf_org.ssgproject.content_rule_package_inetutils-telnetd_removed | Identifiers and References | Identifiers:
CCE- References:
NT007(R03), AC-17(8), CM-7 | |
|
Rule
Uninstall the ntpdate package
[ref] | ntpdate is a historical ntp synchronization client for unixes. It sould be uninstalled. | Rationale: | ntpdate is an old not security-compliant ntp client. It should be replaced by modern ntp clients such as ntpd, able to use cryptographic mechanisms integrated in NTP. | Severity: | low | Rule ID: | xccdf_org.ssgproject.content_rule_package_ntpdate_removed | Identifiers and References | Identifiers:
CCE- | |
|
Rule
Uninstall the ssl compliant telnet server
[ref] | The telnet daemon, even with ssl support, should be uninstalled. | Rationale: | telnet, even with ssl support, should not be installed. When remote shell is required, up-to-date ssh daemon can be used. | Severity: | high | Rule ID: | xccdf_org.ssgproject.content_rule_package_telnetd-ssl_removed | Identifiers and References | Identifiers:
CCE- References:
NT007(R02), AC-17(8), CM-7 | |
|
Rule
Uninstall the telnet server
[ref] | The telnet daemon should be uninstalled. | Rationale: | telnet allows clear text communications, and does not protect any data transmission between client and server. Any confidential data can be listened and no integrity checking is made. | Severity: | high | Rule ID: | xccdf_org.ssgproject.content_rule_package_telnetd_removed | Identifiers and References | Identifiers:
CCE- References:
NT007(R03), AC-17(8), CM-7 | |
|
Group
Generic required services
Group contains 5 rules |
[ref]
Some services need to be deployed in order to ensure basic verifications and reporting on GNU/Linux operating systems.
Each of these service take part in the administrability of the system. |
Rule
Install the cron service
[ref] | The Cron service should be installed. | Rationale: | The cron service allow periodic job execution, needed for almost all administrative tasks and services (software update, log rotating, etc.). Access to cron service should be restricted to administrative accounts only. | Severity: | medium | Rule ID: | xccdf_org.ssgproject.content_rule_package_cron_installed | Identifiers and References | Identifiers:
CCE- References:
NT28(R50), CM-7 | |
|
Rule
Install the ntp service
[ref] | The ntpd service should be installed. | Rationale: | Time synchronization (using NTP) is required by almost all network and administrative tasks (syslog, cryptographic based services (authentication, etc.), etc.). Ntpd is regulary maintained and updated, supporting security features such as RFC 5906. | Severity: | high | Rule ID: | xccdf_org.ssgproject.content_rule_package_ntp_installed | Identifiers and References | Identifiers:
CCE- References:
NT012(R03), CCI-000160, AU-8(1), Req-10.4 | |
|
Rule
install the auditd service
[ref] | The auditd service should be installed. | Rationale: | The auditd service is an access monitoring and accounting daemon, watching system calls to audit any access, in comparision with potential local access control policy such as SELinux policy. | Severity: | medium | Rule ID: | xccdf_org.ssgproject.content_rule_package_auditd_installed | Identifiers and References | Identifiers:
CCE- References:
NT28(R50) | |
|
Rule
Enable the ntpd service
[ref] | The ntpd service should be enabled. | Rationale: | Time synchronization (using NTP) is required by almost all network and administrative tasks (syslog, cryptographic based services (authentication, etc.), etc.). Ntpd is regulary maintained and updated, supporting security features such as RFC 5906. | Severity: | high | Rule ID: | xccdf_org.ssgproject.content_rule_service_ntpd_enabled | Identifiers and References | Identifiers:
CCE- References:
NT012(R03), CCI-000160, AU-8(1), Req-10.4 | |
|
Rule
Enable the auditd service
[ref] | The auditd service should be enabled. | Rationale: | The auditd service is an access monitoring and accounting daemon, watching system calls to audit any access, in comparision with potential local access control policy such as SELinux policy. | Severity: | medium | Rule ID: | xccdf_org.ssgproject.content_rule_service_auditd_enabled | Identifiers and References | Identifiers:
CCE- References:
NT28(R50), CCI-000347, CCI-000157, CCI-000172, CCI-000880, CCI-001353, CCI-001462, CCI-001487, CCI-001115, CCI-001454, CCI-000067, CCI-000158, CCI-000831, CCI-001190, CCI-001312, CCI-001263, CCI-000130, CCI-000120, CCI-001589, AC-17(1), AU-1(b), AU-10, AU-12(a), AU-12(c), IR-5, Req-10 | |
|
Group
SSH Server
Group contains 1 group and 5 rules |
[ref]
The SSH protocol is recommended for remote access (remote login and secure remote file transfer).
SSH provides both confidentiality and integrity for exchanged data but needs to be configured properly in term of:
Cryptography usage, according to the current CVEs associated to the various cryptographic modes
Authentication and autorization, depending on your needs but requiring some specific initial generic security
consideration in the OpenSSH configuration writing
More detailed information is available from the OpenSSH project's website http://www.openssh.org. The Ubuntu package for
server side implementation is called openssh-server . |
Group
Configure OpenSSH Server if deployed
Group contains 5 rules |
[ref]
If the system needs to act as an SSH server, then
certain changes should be made to the OpenSSH daemon configuration
file /etc/ssh/sshd_config . The following recommendations can be
applied to this file. See the sshd_config(5) man page for more
detailed information. |
Rule
Allow Only SSH Protocol 2
[ref] | Only SSH protocol version 2 connections should be
permitted. The default setting in
/etc/ssh/sshd_config is correct, and can be
verified by ensuring that the following
line appears:
Protocol 2 | Rationale: | SSH protocol version 1 suffers from design flaws that
result in security vulnerabilities and
should not be used. | Severity: | high | Rule ID: | xccdf_org.ssgproject.content_rule_sshd_allow_only_protocol2 | Identifiers and References | Identifiers:
CCE- References:
NT007(R1), AC-17(7), IA-5(1)(c) | |
|
Rule
Disable SSH Access via Empty Passwords
[ref] | To explicitly disallow remote login from accounts with
empty passwords, add or correct the following line in
/etc/ssh/sshd_config :
PermitEmptyPasswords no
Any accounts with empty passwords should be disabled immediately, and PAM configuration
should prevent users from being able to assign themselves empty passwords. | Rationale: | Configuring this setting for the SSH daemon provides additional assurance that
remote login via SSH will require a password,
even in the event of misconfiguration elsewhere. | Severity: | high | Rule ID: | xccdf_org.ssgproject.content_rule_sshd_disable_empty_passwords | Identifiers and References | Identifiers:
CCE- References:
NT007(R17), AC-3 | |
|
Rule
Set SSH Idle Timeout Interval
[ref] | SSH allows administrators to set an idle timeout interval.
After this interval has passed, the idle user will be automatically logged out.
To set an idle timeout interval, edit the following line in /etc/ssh/sshd_config as
follows:
ClientAliveInterval interval
The timeout interval is given in seconds. To have a timeout
of 15 minutes, set interval to 900.
If a shorter timeout has already been set for the login
shell, that value will preempt any SSH
setting made here. Keep in mind that some processes may stop SSH
from correctly detecting that the user is idle. | Rationale: | Causing idle users to be automatically logged out
guards against compromises one system leading trivially
to compromises on another. | Severity: | unknown | Rule ID: | xccdf_org.ssgproject.content_rule_sshd_set_idle_timeout | Identifiers and References | Identifiers:
CCE- References:
AC-2(5), SA-8, Req-8.1.8 | |
|
Rule
Set SSH Client Alive Count
[ref] | To ensure the SSH idle timeout occurs precisely when the ClientAliveCountMax is set,
edit /etc/ssh/sshd_config as
follows:
ClientAliveCountMax 0 | Rationale: | This ensures a user login will be terminated as soon as the ClientAliveCountMax
is reached. | Severity: | unknown | Rule ID: | xccdf_org.ssgproject.content_rule_sshd_set_keepalive | Identifiers and References | Identifiers:
CCE- References:
AC-2(5), SA-8 | |
|
Rule
Disable SSH Root Login
[ref] | The root user should never be allowed to login to a
system directly over a network.
To disable root login via SSH, add or correct the following line
in /etc/ssh/sshd_config :
PermitRootLogin no | Rationale: | Permitting direct root login reduces auditable information about who ran
privileged commands on the system
and also allows direct attack attempts on root's password. | Severity: | medium | Rule ID: | xccdf_org.ssgproject.content_rule_sshd_disable_root_login | Identifiers and References | Identifiers:
CCE- References:
NT007(R21), AC-3, AC-6(2), IA-2(1) | |
|
Group
APT service configuration
Group contains 1 rule |
[ref]
The apt service manage the package management and update of the whole system. Its configuration need to be properly defined to ensure efficient security updates, packages and repository authentication and proper lifecycle management. |
Rule
Disable unauthenticated repositories in APT configuration
[ref] | Unauthenticated repositories should not be used for updates. | Rationale: | Repositories hosts all packages that will be intsalled on the system during update.
If a repository is not authenticated, the associated packages can't be trusted,
and then should not be installed localy. | Severity: | unknown | Rule ID: | xccdf_org.ssgproject.content_rule_apt_conf_disallow_unauthenticated | Identifiers and References | References:
NT28(R15) | |
|
Group
System Settings
Group contains 14 groups and 20 rules |
[ref]
Contains rules that check correct system settings. |
Group
Access Control using sudo
Group contains 2 rules |
[ref]
Sudo , which stands for "su 'do'", provides the ability to delegate authority
to certain users, groups of users, or system administrators. When configured for system
users and/or groups, Sudo can allow a user or group to execute privileged commands
that normally only root is allowed to execute.
For more information on Sudo and addition Sudo configuration options, see
https://www.sudo.ws |
Rule
Ensure Users Re-Authenticate for Privilege Escalation - sudo !authenticate
[ref] | The sudo !authenticate option, when specified, allows a user to execute commands using
sudo without having to authenticate. This should be disabled by making sure that the
!authenticate option does not exist in /etc/sudoers configuration file or
any sudo configuration snippets in /etc/sudoers.d/ . | Rationale: | Without re-authentication, users may access resources or perform tasks for which they
do not have authorization.
When operating systems provide the capability to escalate a functional capability, it
is critical that the user re-authenticate. | Severity: | medium | Rule ID: | xccdf_org.ssgproject.content_rule_sudo_remove_no_authenticate | Identifiers and References | References:
NT28(R5), CCI-002038, IA-11, SRG-OS-000373-GPOS-00156, SRG-OS-000373-GPOS-00157, SRG-OS-000373-GPOS-00158 | |
|
Rule
Ensure Users Re-Authenticate for Privilege Escalation - sudo NOPASSWD
[ref] | The sudo NOPASSWD tag, when specified, allows a user to execute commands using
sudo without having to authenticate. This should be disabled by making sure that the
NOPASSWD tag does not exist in /etc/sudoers configuration file or
any sudo configuration snippets in /etc/sudoers.d/ . | Rationale: | Without re-authentication, users may access resources or perform tasks for which they
do not have authorization.
When operating systems provide the capability to escalate a functional capability, it
is critical that the user re-authenticate. | Severity: | medium | Rule ID: | xccdf_org.ssgproject.content_rule_sudo_remove_nopasswd | Identifiers and References | References:
NT28(R5), CCI-002038, IA-11, SRG-OS-000373-GPOS-00156, SRG-OS-000373-GPOS-00157, SRG-OS-000373-GPOS-00158 | |
|
Group
Configure Syslog
Group contains 2 groups and 4 rules |
[ref]
The syslog service has been the default Unix logging mechanism for
many years. It has a number of downsides, including inconsistent log format,
lack of authentication for received messages, and lack of authentication,
encryption, or reliable transport for messages sent over a network. However,
due to its long history, syslog is a de facto standard which is supported by
almost all Unix applications.
In Ubuntu 1604, rsyslog has replaced syslog as the syslog daemon of choice,
and it includes some additional security features such as reliable,
connection-oriented (i.e. TCP) transmission of logs, the option to log to
database formats, and the encryption of log data en route to
a central logging server. This section discusses how to configure rsyslog for
best effect, and how to use tools provided with the system to maintain and
monitor logs. Yet, it is also possible to install syslog-ng to manage local and
server-side logging services. Both are tested here, to let the administrator
choose. |
Group
Ensure Proper Configuration of Log Files
Group contains 3 rules |
[ref]
The file /etc/rsyslog.conf controls where log message are written.
These are controlled by lines called rules, which consist of a
selector and an action.
These rules are often customized depending on the role of the system, the
requirements of the environment, and whatever may enable
the administrator to most effectively make use of log data.
The default rules in Ubuntu 1604 are:
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
mail.info -/var/log/mail.info
mail.warn -/var/log/mail.warn
mail.err /var/log/mail.err
news.crit /var/log/news/news.crit
news.err /var/log/news/news.err
news.notice -/var/log/news/news.notice
See the man page rsyslog.conf(5) for more information.
Note that the rsyslog daemon is configured to use traditional timestamping
to be understood by any log processing program. For high precision timestamping,
comment the following line in /etc/rsyslog.conf :
$ ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
|
Rule
Ensure Log Files Are Owned By Appropriate Group
[ref] | The group-owner of all log files written by
rsyslog should be root.
These log files are determined by the second part of each Rule line in
/etc/rsyslog.conf and typically all appear in /var/log .
For each log file LOGFILE referenced in /etc/rsyslog.conf ,
run the following command to inspect the file's group owner:
$ ls -l LOGFILE
If the owner is not adm , run the following command to
correct this:
$ sudo chgrp adm LOGFILE | Rationale: | The log files generated by rsyslog contain valuable information regarding system
configuration, user authentication, and other such information. Log files should be
protected from unauthorized access. | Severity: | medium | Rule ID: | xccdf_org.ssgproject.content_rule_rsyslog_files_groupownership | Identifiers and References | References:
NT28(R46), NT28(R5), CCI-001314, AC-6, SI-11, Req-10.5.1, Req-10.5.2 | |
|
Rule
Ensure Log Files Are Owned By Appropriate User
[ref] | The owner of all log files written by
rsyslog should be root.
These log files are determined by the second part of each Rule line in
/etc/rsyslog.conf and typically all appear in /var/log .
For each log file LOGFILE referenced in /etc/rsyslog.conf ,
run the following command to inspect the file's owner:
$ ls -l LOGFILE
If the owner is not root , run the following command to
correct this:
$ sudo chown root LOGFILE | Rationale: | The log files generated by rsyslog contain valuable information regarding system
configuration, user authentication, and other such information. Log files should be
protected from unauthorized access. | Severity: | medium | Rule ID: | xccdf_org.ssgproject.content_rule_rsyslog_files_ownership | Identifiers and References | References:
NT28(R46), NT28(R5), CCI-001314, AC-6, SI-11, Req-10.5.1, Req-10.5.2 | |
|
Rule
Ensure System Log Files Have Correct Permissions
[ref] | The file permissions for all log files written by
rsyslog should be set to 640, or more restrictive.
These log files are determined by the second part of each Rule line in
/etc/rsyslog.conf and typically all appear in /var/log .
For each log file LOGFILE referenced in /etc/rsyslog.conf ,
run the following command to inspect the file's permissions:
$ ls -l LOGFILE
If the permissions are not 640 or more restrictive,
run the following command to correct this:
$ sudo chmod 0640 LOGFILE | Rationale: | Log files can contain valuable information regarding system
configuration. If the system log files are not protected unauthorized
users could change the logged data, eliminating their forensic value. | Severity: | medium | Rule ID: | xccdf_org.ssgproject.content_rule_rsyslog_files_permissions | Identifiers and References | References:
NT28(R36), 5.1.4, CCI-001314, SI-11, Req-10.5.1, Req-10.5.2 | |
|
Group
Ensure All Logs are Rotated by <tt>logrotate</tt>
Group contains 1 rule |
[ref]
Edit the file /etc/logrotate.d/rsyslog . Find the first
line, which should look like this (wrapped for clarity):
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler \
/var/log/boot.log /var/log/cron {
Edit this line so that it contains a one-space-separated
listing of each log file referenced in /etc/rsyslog.conf .
All logs in use on a system must be rotated regularly, or the
log files will consume disk space over time, eventually interfering
with system operation. The file /etc/logrotate.d/syslog is the
configuration file used by the logrotate program to maintain all
log files written by syslog . By default, it rotates logs weekly and
stores four archival copies of each log. These settings can be
modified by editing /etc/logrotate.conf , but the defaults are
sufficient for purposes of this guide.
Note that logrotate is run nightly by the cron job
/etc/cron.daily/logrotate . If particularly active logs need to be
rotated more often than once a day, some other mechanism must be
used. |
Rule
Ensure Logrotate Runs Periodically
[ref] | The logrotate utility allows for the automatic rotation of
log files. The frequency of rotation is specified in /etc/logrotate.conf ,
which triggers a cron task. To configure logrotate to run daily, add or correct
the following line in /etc/logrotate.conf :
# rotate log files frequency
daily | Rationale: | Log files that are not properly rotated run the risk of growing so large
that they fill up the /var/log partition. Valuable logging information could be lost
if the /var/log partition becomes full. | Severity: | unknown | Rule ID: | xccdf_org.ssgproject.content_rule_ensure_logrotate_activated | Identifiers and References | References:
CCI-000366, AU-9, Req-10.7 | |
|
Group
Hardening the filesystem
Group contains 2 groups and 7 rules |
[ref]
Hardening the filesystem and its usage is an efficient way to ensure an efficient separation of services,
data and configurations while ensuring a more precise management of filesystem level access rights, enabling deactivation
of some specific rights at the filesystem level. Moreover, the Linux Virtual file system support various hardening mechanisms
that can be set using sysctl. |
Group
Partitioning
Group contains 5 rules |
[ref]
Separating various locations of the file systems in different partitions allows a more restrictive
segregation, distinctly from one location to another. Moreover, some native restrictions can be made by
partitioning, such as no hard link between different filesystems, and reduce the corruption impact to the
affected filesystem instead of the entire system. The last gain is to allow a differenciated usage of storage
media, depending on the operational needs (speed, resilience, etc.). |
Rule
Ensure /home Located On Separate Partition
[ref] | If user home directories will be stored locally, create a separate partition
for /home at installation time (or migrate it later using LVM). If
/home will be mounted from another system such as an NFS server, then
creating a separate partition is not necessary at installation time, and the
mountpoint can instead be configured later. | Rationale: | Ensuring that /home is mounted on its own partition enables the
setting of more restrictive mount options, and also helps ensure that
users cannot trivially fill partitions used for log or audit data storage. | Severity: | unknown | Rule ID: | xccdf_org.ssgproject.content_rule_partition_for_home | Identifiers and References | References:
NT28(R12), CCI-001208, SC-32 | |
|
Rule
Ensure /var Located On Separate Partition
[ref] | The /var directory is used by daemons and other system
services to store frequently-changing data. Ensure that /var has its own partition
or logical volume at installation time, or migrate it using LVM. | Rationale: | Ensuring that /var is mounted on its own partition enables the
setting of more restrictive mount options. This helps protect
system services such as daemons or other programs which use it.
It is not uncommon for the /var directory to contain
world-writable directories installed by other software packages. | Severity: | unknown | Rule ID: | xccdf_org.ssgproject.content_rule_partition_for_var | Identifiers and References | References:
NT28(R12), SC-32 | |
|
Rule
Ensure /tmp Located On Separate Partition
[ref] | The /tmp directory is a world-writable directory used
for temporary file storage. Ensure it has its own partition or
logical volume at installation time, or migrate it using LVM (when non-ephemeral is needed) or use tmpfs if possible. | Rationale: | The /tmp partition is used as temporary storage by many programs.
Placing /tmp in its own partition enables the setting of more
restrictive mount options, which can help protect programs which use it. | Severity: | unknown | Rule ID: | xccdf_org.ssgproject.content_rule_partition_for_tmp | Identifiers and References | References:
NT28(R12), SC-32 | |
|
Rule
Ensure /var/log/audit Located On Separate Partition
[ref] | Audit logs are stored in the /var/log/audit directory. Ensure that it
has its own partition or logical volume at installation time, or migrate it
later using LVM. Make absolutely certain that it is large enough to store all
audit logs that will be created by the auditing daemon. | Rationale: | Placing /var/log/audit in its own partition
enables better separation between audit files
and other files, and helps ensure that
auditing cannot be halted due to the partition running out
of space. | Severity: | unknown | Rule ID: | xccdf_org.ssgproject.content_rule_partition_for_var_log_audit | Identifiers and References | References:
AU-4, AU-9, SC-32 | |
|
Rule
Ensure /var/log Located On Separate Partition
[ref] | System logs are stored in the /var/log directory.
Ensure that it has its own partition or logical
volume at installation time, or migrate it using LVM. | Rationale: | Placing /var/log in its own partition
enables better separation between log files
and other files in /var/ . | Severity: | unknown | Rule ID: | xccdf_org.ssgproject.content_rule_partition_for_var_log | Identifiers and References | References:
NT28(R12), NT28(R47), AU-9, SC-32 | |
|
Group
filesystem rights management
Group contains 2 rules |
[ref]
Adding filesystem specific hardening seriously limits various exploitation vectors based on
filesystem invalid usage, such as invalid file types in invalid places (devices or setuid root files in external
media, executable file in insecure filesystems, etc.). Some of these hardening require an efficient system
partitioning. |
Rule
Disallow creating symlinks to a file you not own
[ref] |
To set the runtime status of the fs.protected_hardlinks kernel parameter,
run the following command:
$ sudo sysctl -w fs.protected_hardlinks=1
If this is not the system's default value, add the following line to /etc/sysctl.conf :
fs.protected_hardlinks = 1
| Rationale: | Disallowing such hardlink mitigate vulnerabilities based on insecure file system
accessed by privilegied programs, avoiding an exploitation vector exploiting unsafe use of
open() or creat() . | Severity: | unknown | Rule ID: | xccdf_org.ssgproject.content_rule_sysctl_fs_protected_hardlinks | Identifiers and References | References:
NT28(R23), 1.6.1, SI-11 | |
|
Rule
Disallow creating symlinks to a file you not own
[ref] |
To set the runtime status of the fs.protected_symlinks kernel parameter,
run the following command:
$ sudo sysctl -w fs.protected_symlinks=1
If this is not the system's default value, add the following line to /etc/sysctl.conf :
fs.protected_symlinks = 1
| Rationale: | Disallowing such symlink mitigate vulnerabilities based on insecure file system
accessed by privilegied programs, avoiding an exploitation vector exploiting unsafe use of
open() or creat() . | Severity: | unknown | Rule ID: | xccdf_org.ssgproject.content_rule_sysctl_fs_protected_symlinks | Identifiers and References | References:
NT28(R23), 1.6.1, SI-11 | |
|
Group
File Permissions and Masks
Group contains 6 groups and 7 rules |
[ref]
Traditional Unix security relies heavily on file and
directory permissions to prevent unauthorized users from reading or
modifying files to which they should not have access.
Several of the commands in this section search filesystems
for files or directories with certain characteristics, and are
intended to be run on every local partition on a given system.
When the variable PART appears in one of the commands below,
it means that the command is intended to be run repeatedly, with the
name of each local partition substituted for PART in turn.
The following command prints a list of all xfs partitions on the local
system, which is the default filesystem for Red Hat Enterprise Linux
7 installations:
$ mount -t xfs | awk '{print $3}'
For any systems that use a different
local filesystem type, modify this command as appropriate. |
Group
Verify Permissions on Important Files and
Directories
Group contains 2 groups and 5 rules |
[ref]
Permissions for many files on a system must be set
restrictively to ensure sensitive information is properly protected.
This section discusses important
permission restrictions which can be verified
to ensure that no harmful discrepancies have
arisen. |
Group
Verify Permissions on Files with Local Account Information and Credentials
Group contains 4 rules |
[ref]
The default restrictive permissions for files which act as
important security databases such as passwd , shadow ,
group , and gshadow files must be maintained. Many utilities
need read access to the passwd file in order to function properly, but
read access to the shadow file allows malicious attacks against system
passwords, and should never be enabled. |
Rule
Verify Permissions and ownership on group File
[ref] |
To properly set the permissions of /etc/passwd , run the command:
$ sudo chmod 0644 /etc/passwd
To properly set the owner of /etc/passwd , run the command:
$ sudo chown root /etc/passwd
To properly set the group owner of /etc/passwd , run the command:
$ sudo chgrp root /etc/passwd
| Rationale: | The /etc/shadow file contains information about the groups that are configured on
the system. Protection of this file is critical for system security. | Severity: | medium | Rule ID: | xccdf_org.ssgproject.content_rule_file_permissions_etc_group | Identifiers and References | References:
AC-6 | |
|
Rule
Verify Permissions and ownership on shadow File
[ref] |
To properly set the permissions of /etc/shadow , run the command:
$ sudo chmod 0640 /etc/shadow
To properly set the owner of /etc/shadow , run the command:
$ sudo chown root /etc/shadow
To properly set the group owner of /etc/shadow , run the command:
$ sudo chgrp shadow /etc/shadow
| Rationale: | The /etc/shadow file contains the list of local
system accounts and stores password hashes. Protection of this file is
critical for system security. Failure to give ownership of this file
to root provides the designated owner with access to sensitive information
which could weaken the system security posture. | Severity: | medium | Rule ID: | xccdf_org.ssgproject.content_rule_file_permissions_etc_shadow | Identifiers and References | References:
NT28(R36), AC-6, Req-8.7.c | |
|
Rule
Verify Permissions and ownership on gshadow File
[ref] |
To properly set the permissions of /etc/gshadow , run the command:
$ sudo chmod 0640 /etc/gshadow
To properly set the owner of /etc/gshadow , run the command:
$ sudo chown root /etc/gshadow
To properly set the group owner of /etc/gshadow , run the command:
$ sudo chgrp shadow /etc/gshadow
| Rationale: | The /etc/shadow file contains group password hashes. Protection of this file
is critical for system security. | Severity: | medium | Rule ID: | xccdf_org.ssgproject.content_rule_file_permissions_etc_gshadow | Identifiers and References | References:
NT28(R36), AC-6 | |
|
Rule
Verify Permissions and ownership on passwd File
[ref] |
To properly set the permissions of /etc/passwd , run the command:
$ sudo chmod 0644 /etc/passwd
To properly set the owner of /etc/passwd , run the command:
$ sudo chown root /etc/passwd
To properly set the group owner of /etc/passwd , run the command:
$ sudo chgrp root /etc/passwd
| Rationale: | The /etc/shadow file contains information about the users that are configured on
the system. Protection of this file is critical for system security. | Severity: | medium | Rule ID: | xccdf_org.ssgproject.content_rule_file_permissions_etc_passwd | Identifiers and References | References:
AC-6 | |
|
Group
Verify permissions on files containing sensitive informations about the system
Group contains 1 rule |
[ref]
Various files contains sensitive informations that can leads to specific weaknesses or
give structural informations for local exploits. |
Rule
Verify that local System.map file (if exists) is readable only by root
[ref] | Files containing sensitive informations should be protected by restrictive
permissions. Most of the time, there is no need that these files need to be read by any non-root user
To properly set the permissions of /boot/System.map-* , run the command:
$ sudo chmod 0600 /boot/System.map-*
To properly set the owner of /boot/System.map-* , run the command:
$ sudo chown root /boot/System.map-* | Rationale: | The System.map file contains information about kernel symbols and
can give some hints to generate local exploitation. | Severity: | unknown | Rule ID: | xccdf_org.ssgproject.content_rule_file_permissions_boot_system_map | Identifiers and References | References:
NT28(R13) | |
|
Group
Restrict Programs from Dangerous Execution Patterns
Group contains 2 groups and 2 rules |
[ref]
The recommendations in this section are designed to
ensure that the system's features to protect against potentially
dangerous program execution are activated.
These protections are applied at the system initialization or
kernel level, and defend against certain types of badly-configured
or compromised programs. |
Group
Disable Core Dumps
Group contains 1 rule |
[ref]
A core dump file is the memory image of an executable
program when it was terminated by the operating system due to
errant behavior. In most cases, only software developers
legitimately need to access these files. The core dump files may
also contain sensitive information, or unnecessarily occupy large
amounts of disk space.
Once a hard limit is set in /etc/security/limits.conf , a
user cannot increase that limit within his or her own session. If access
to core dumps is required, consider restricting them to only
certain users or groups. See the limits.conf man page for more
information.
The core dumps of setuid programs are further protected. The
sysctl variable fs.suid_dumpable controls whether
the kernel allows core dumps from these programs at all. The default
value of 0 is recommended. |
Rule
Disable Core Dumps for SUID programs
[ref] |
To set the runtime status of the fs.suid_dumpable kernel parameter,
run the following command:
$ sudo sysctl -w fs.suid_dumpable=0
If this is not the system's default value, add the following line to /etc/sysctl.conf :
fs.suid_dumpable = 0
| Rationale: | The core dump of a setuid program is more likely to contain
wve data, as the program itself runs with greater privileges than the
user who initiated execution of the program. Disabling the ability for any
setuid program to write a core file decreases the risk of unauthorized access
of such data. | Severity: | unknown | Rule ID: | xccdf_org.ssgproject.content_rule_sysctl_fs_suid_dumpable | Identifiers and References | References:
NT28(R23), 1.6.1, SI-11 | |
|
Group
Enable ExecShield
Group contains 1 rule |
[ref]
ExecShield describes kernel features that provide
protection against exploitation of memory corruption errors such as buffer
overflows. These features include random placement of the stack and other
memory regions, prevention of execution in memory that should only hold data,
and special handling of text buffers. These protections are enabled by default
on 32-bit systems and controlled through sysctl variables
kernel.exec-shield and kernel.randomize_va_space . On the latest
64-bit systems, kernel.exec-shield cannot be enabled or disabled with
sysctl . |
Rule
Enable Randomized Layout of Virtual Address Space
[ref] |
To set the runtime status of the kernel.randomize_va_space kernel parameter,
run the following command:
$ sudo sysctl -w kernel.randomize_va_space=2
If this is not the system's default value, add the following line to /etc/sysctl.conf :
kernel.randomize_va_space = 2
| Rationale: | Address space layout randomization (ASLR) makes it more difficult
for an attacker to predict the location of attack code they have introduced
into a process's address space during an attempt at exploitation. Additionally, ASLR
makes it more difficult for an attacker to know the location of existing code
in order to re-purpose it using return oriented programming (ROP) techniques. | Severity: | medium | Rule ID: | xccdf_org.ssgproject.content_rule_sysctl_kernel_randomize_va_space | Identifiers and References | References:
NT28(R23), 1.6.1, SC-30(2) | |
|