accounts - User account security controls

Security controls for user accounts on Linux systems are a crucial barrier to prevent unauthorized access.

Overview

Many of the STIG requirements for user account controls are already included in many Linux distributions or they can be applied without disruptions. However, some requirements can cause problems with user authentication without coordination.

Deployers should consider an authentication solution that uses centralized authentication, such as LDAP, Active Directory, or Kerberos, for the best security posture.

STIG requirements

All of the tasks for these STIG requirements are included in tasks/rhel7stig/accounts.yml.

V-71903

  • Summary: When passwords are changed or new passwords are established, the new password must contain at least one upper-case character.

  • Severity: Medium

  • Implementation Status: Opt-In

Deployer/Auditor notes

The password quality requirements from the STIG are examples of good security practice, but deployers are strongly encouraged to use centralized authentication for administrative server access whenever possible.

Password quality requirements are controlled by two Ansible variables: one for each individual password requirement and one “master switch” variable. The master switch variable controls all password requirements and it is disabled by default.

Deployers can enable all password quality requirements by setting the master switch variable to yes:

security_pwquality_apply_rules: yes

When the master switch variable is enabled, each individual password quality requirement can be disabled by a variable. To disable the fix for this STIG control, set the following Ansible variable:

security_pwquality_require_uppercase: no

V-71905

  • Summary: When passwords are changed or new passwords are established, the new password must contain at least one lower-case character.

  • Severity: Medium

  • Implementation Status: Opt-In

Deployer/Auditor notes

The password quality requirements from the STIG are examples of good security practice, but deployers are strongly encouraged to use centralized authentication for administrative server access whenever possible.

Password quality requirements are controlled by two Ansible variables: one for each individual password requirement and one “master switch” variable. The master switch variable controls all password requirements and it is disabled by default.

Deployers can enable all password quality requirements by setting the master switch variable to yes:

security_pwquality_apply_rules: yes

When the master switch variable is enabled, each individual password quality requirement can be disabled by a variable. To disable the fix for this STIG control, set the following Ansible variable:

security_pwquality_require_lowercase: no

V-71907

  • Summary: When passwords are changed or new passwords are assigned, the new password must contain at least one numeric character.

  • Severity: Medium

  • Implementation Status: Opt-In

Deployer/Auditor notes

The password quality requirements from the STIG are examples of good security practice, but deployers are strongly encouraged to use centralized authentication for administrative server access whenever possible.

Password quality requirements are controlled by two Ansible variables: one for each individual password requirement and one “master switch” variable. The master switch variable controls all password requirements and it is disabled by default.

Deployers can enable all password quality requirements by setting the master switch variable to yes:

security_pwquality_apply_rules: yes

When the master switch variable is enabled, each individual password quality requirement can be disabled by a variable. To disable the fix for this STIG control, set the following Ansible variable:

security_pwquality_require_numeric: no

V-71909

  • Summary: When passwords are changed or new passwords are assigned, the new password must contain at least one special character.

  • Severity: Medium

  • Implementation Status: Opt-In

Deployer/Auditor notes

The password quality requirements from the STIG are examples of good security practice, but deployers are strongly encouraged to use centralized authentication for administrative server access whenever possible.

Password quality requirements are controlled by two Ansible variables: one for each individual password requirement and one “master switch” variable. The master switch variable controls all password requirements and it is disabled by default.

Deployers can enable all password quality requirements by setting the master switch variable to yes:

security_pwquality_apply_rules: yes

When the master switch variable is enabled, each individual password quality requirement can be disabled by a variable. To disable the fix for this STIG control, set the following Ansible variable:

security_pwquality_require_special: no

V-71911

  • Summary: When passwords are changed a minimum of eight of the total number of characters must be changed.

  • Severity: Medium

  • Implementation Status: Opt-In

Deployer/Auditor notes

The password quality requirements from the STIG are examples of good security practice, but deployers are strongly encouraged to use centralized authentication for administrative server access whenever possible.

Password quality requirements are controlled by two Ansible variables: one for each individual password requirement and one “master switch” variable. The master switch variable controls all password requirements and it is disabled by default.

Deployers can enable all password quality requirements by setting the master switch variable to yes:

security_pwquality_apply_rules: yes

When the master switch variable is enabled, each individual password quality requirement can be disabled by a variable. To disable the fix for this STIG control, set the following Ansible variable:

security_pwquality_require_characters_changed: no

V-71913

  • Summary: When passwords are changed a minimum of four character classes must be changed.

  • Severity: Medium

  • Implementation Status: Opt-In

Deployer/Auditor notes

The password quality requirements from the STIG are examples of good security practice, but deployers are strongly encouraged to use centralized authentication for administrative server access whenever possible.

Password quality requirements are controlled by two Ansible variables: one for each individual password requirement and one “master switch” variable. The master switch variable controls all password requirements and it is disabled by default.

Deployers can enable all password quality requirements by setting the master switch variable to yes:

security_pwquality_apply_rules: yes

When the master switch variable is enabled, each individual password quality requirement can be disabled by a variable. To disable the fix for this STIG control, set the following Ansible variable:

security_pwquality_require_character_classes_changed: no

V-71915

  • Summary: When passwords are changed the number of repeating consecutive characters must not be more than three characters.

  • Severity: Medium

  • Implementation Status: Opt-In

Deployer/Auditor notes

The password quality requirements from the STIG are examples of good security practice, but deployers are strongly encouraged to use centralized authentication for administrative server access whenever possible.

Password quality requirements are controlled by two Ansible variables: one for each individual password requirement and one “master switch” variable. The master switch variable controls all password requirements and it is disabled by default.

Deployers can enable all password quality requirements by setting the master switch variable to yes:

security_pwquality_apply_rules: yes

When the master switch variable is enabled, each individual password quality requirement can be disabled by a variable. To disable the fix for this STIG control, set the following Ansible variable:

security_pwquality_limit_repeated_characters: no

V-71917

  • Summary: When passwords are changed the number of repeating characters of the same character class must not be more than four characters.

  • Severity: Medium

  • Implementation Status: Opt-In

Deployer/Auditor notes

The password quality requirements from the STIG are examples of good security practice, but deployers are strongly encouraged to use centralized authentication for administrative server access whenever possible.

Password quality requirements are controlled by two Ansible variables: one for each individual password requirement and one “master switch” variable. The master switch variable controls all password requirements and it is disabled by default.

Deployers can enable all password quality requirements by setting the master switch variable to yes:

security_pwquality_apply_rules: yes

When the master switch variable is enabled, each individual password quality requirement can be disabled by a variable. To disable the fix for this STIG control, set the following Ansible variable:

security_pwquality_limit_repeated_character_classes: no

V-71919

  • Summary: The PAM system service must be configured to store only encrypted representations of passwords.

  • Severity: Medium

  • Implementation Status: Implemented

Deployer/Auditor notes

The PAM configuration file for password storage is checked to ensure that sha512 is found on the pam_unix.so line. If sha512 is not found, a debug message is printed in the Ansible output.


V-71921

  • Summary: The shadow file must be configured to store only encrypted representations of passwords.

  • Severity: Medium

  • Implementation Status: Implemented

Deployer/Auditor notes

The default password storage mechanism for Ubuntu 16.04, CentOS 7, openSUSE Leap, SUSE Linux Enterprise 12 and Red Hat Enterprise Linux 7 is SHA512 and the tasks in the security role ensure that the default is maintained.

Deployers can configure a different password storage mechanism by setting the following Ansible variable:

security_password_encrypt_method: SHA512

Warning

SHA512 is the default on most modern Linux distributions and it meets the requirement of the STIG. Do not change the value unless a system has a specific need for a different password mechanism.


V-71923

  • Summary: User and group account administration utilities must be configured to store only encrypted representations of passwords.

  • Severity: Medium

  • Implementation Status: Implemented - Red Hat Only

Deployer/Auditor notes

The role ensures that crypt_style is set to sha512 in /etc/libuser.conf, which is the default for CentOS 7 and Red Hat Enterprise Linux 7.

Ubuntu, openSUSE and SUSE Linux Enterprise 12 do not use libuser, so this change is not applicable.

Deployers can opt out of this change by setting the following Ansible variable:

security_libuser_crypt_style_sha512: no

V-71925

  • Summary: Passwords for new users must be restricted to a 24 hours/1 day minimum lifetime.

  • Severity: Medium

  • Implementation Status: Opt-In

Deployer/Auditor notes

Although the STIG requires that all passwords have a minimum lifetime set, this can cause issue in some production environments. Therefore, deployers must opt in for this change.

Set the following Ansible variable to an integer (in days) to enable this setting:

security_password_min_lifetime_days: 1

The STIG requires the minimum lifetime for password to be one day.


V-71927

  • Summary: Passwords must be restricted to a 24 hours/1 day minimum lifetime.

  • Severity: Medium

  • Implementation Status: Opt-In

Deployer/Auditor notes

Setting a minimum password lifetime on interactive user accounts provides security benefits by limiting the frequency of password changes. However, this can cause login problems for users without proper communication and coordination.

Deployers can opt-in for this change by setting the following Ansible variable:

security_set_minimum_password_lifetime: yes

The tasks will examine each interactive user account and set the minimum password age if the existing setting is not equal to one day.


V-71929

  • Summary: Passwords for new users must be restricted to a 60-day maximum lifetime.

  • Severity: Medium

  • Implementation Status: Opt-In

Deployer/Auditor notes

Although the STIG requires that all passwords have a maximum lifetime set, this can cause authentication disruptions in production environments if users are not aware that their password will expire. Therefore, this change is not applied by default.

Deployers can opt in for this change and provide a maximum lifetime for user passwords (in days) by setting the following Ansible variable:

security_password_max_lifetime_days: 60

The STIG requires that all passwords expire after 60 days.


V-71931

  • Summary: Existing passwords must be restricted to a 60-day maximum lifetime.

  • Severity: Medium

  • Implementation Status: Opt-In

Deployer/Auditor notes

Although the STIG requires that a maximum password lifetime is set for all interactive user accounts, the security benefits of this configuration are debatable. The draft of NIST Publication 800-63B argues that password rotation may reduce overall security in some situations.

Deployers can opt-in for this change by setting the following Ansible variable:

security_set_maximum_password_lifetime: yes

The tasks will examine each interactive user account and set the maximum password age if the existing setting is not equal to 60 days.


V-71933

  • Summary: Passwords must be prohibited from reuse for a minimum of five generations.

  • Severity: Medium

  • Implementation Status: Opt-In

Deployer/Auditor notes

Although the STIG requires that five passwords are remembered to prevent re- use, this can cause issues in production environment if the change is not communicated well to users. Therefore, the tasks in the security role do not apply this change by default.

Deployers can opt in for the change and specify a number of passwords to remember by setting the following Ansible variable:

security_password_remember_password: 5

V-71935

  • Summary: Passwords must be a minimum of 15 characters in length.

  • Severity: Medium

  • Implementation Status: Opt-In

Deployer/Auditor notes

Although the STIG requires that passwords have a minimum length of 15 characters, this change might be disruptive to users on a production system without communicating the change first. Therefore, this change is not applied by default.

Deployers can opt in for the change by setting the following Ansible variable:

security_pwquality_require_minimum_password_length: yes

V-71941

  • Summary: The operating system must disable account identifiers (individuals, groups, roles, and devices) if the password expires.

  • Severity: Medium

  • Implementation Status: Opt-In

Deployer/Auditor notes

The STIG requires that user accounts are disabled when their password expires. This might be disruptive for some users or for automated processes. Therefore, the tasks in the security role do not apply this change by default.

Deployers can opt in for this change by setting the following Ansible variable:

security_disable_account_if_password_expires: yes

V-71951

  • Summary: The delay between logon prompts following a failed console logon attempt must be at least four seconds.

  • Severity: Medium

  • Implementation Status: Implemented

Deployer/Auditor notes

The tasks in the Ansible role set a four second delay between failed login attempts. Deployers can configure a different delay (in seconds) by setting the following Ansible variable:

security_shadow_utils_fail_delay: 4

V-71995

  • Summary: The operating system must define default permissions for all authenticated users in such a way that the user can only read and modify their own files.

  • Severity: Medium

  • Implementation Status: Opt-In - Ubuntu And Suse Only

Deployer/Auditor notes

The STIG requires that the umask for all authenticated users is 077. This ensures that all new files and directories created by a user are accessible only by that user.

Although this change has a significant security benefit, it can cause problems for users who are not expecting the change. The security role will not adjust the umask by default.

Deployers can opt-in for the change by setting the default umask with an Ansible variable:

security_shadow_utils_umask: 077

Note

Ubuntu, openSUSE Leap and SUSE Linux Enterpsise 12 use pam_umask and it uses the default umask provided by the UMASK line in /etc/login.defs. The default setting on Ubuntu, openSUSE Leap and SUSE Linux Enterprise 12 systems is 022. This allows the user’s group and other users on the system to read and execute files, but they cannot write to them.

CentOS and Red Hat Enterprise Linux do not use pam_umask and instead set a default umask of 0002 for regular users and 0022 for root. This gives the regular user’s group full access to newly created files, but other users cannot write to those files.

The tasks for this STIG requirement are not currently applied to CentOS and Red Hat Enterprise Linux systems. See Launchpad Bug #1656003 for more details.


V-72003

  • Summary: All Group Identifiers (GIDs) referenced in the /etc/passwd file must be defined in the /etc/group file.

  • Severity: Low

  • Implementation Status: Implemented

Deployer/Auditor notes

If any users are found with invalid GIDs, those users are printed in the Ansible output. Deployers should review the list and ensure all users are assigned to a valid group that is defined in /etc/group.


V-72005

  • Summary: The root account must be the only account having unrestricted access to the system.

  • Severity: High

  • Implementation Status: Implemented

Deployer/Auditor notes

If an account with UID 0 other than root exists on the system, the playbook will fail with an error message that includes the other accounts which have a UID of 0.

Deployers are strongly urged to keep only one account with UID 0, root, and to use sudo any situations where root access is required.


V-72011

  • Summary: All local interactive users must have a home directory assigned in the /etc/passwd file.

  • Severity: Medium

  • Implementation Status: Implemented

Deployer/Auditor notes

The usernames of all users without home directories assigned are provided in the Ansible console output. Deployers should use this list of usernames to audit each system to ensure every user has a valid home directory.


V-72013

  • Summary: All local interactive user accounts, upon creation, must be assigned a home directory.

  • Severity: Medium

  • Implementation Status: Implemented

Deployer/Auditor notes

The CREATE_HOME variable is set to yes by the tasks in the security role. This ensures that home directories are created each time a new user account is created.

Deployers can opt out of this change by setting the following Ansible variable:

security_shadow_utils_create_home: no

Note

On CentOS 7, Red Hat Enterprise Linux 7 systems, openSUSE Leap and SUSE Linux Enterprise 12, home directories are always created with new users by default. Home directories are not created by default on Ubuntu systems.


V-72015

  • Summary: All local interactive user home directories defined in the /etc/passwd file must exist.

  • Severity: Medium

  • Implementation Status: Implemented

Deployer/Auditor notes

Each interactive user on the system is checked to verify that their assigned home directory exists on the filesystem. If a home directory is missing, the name of the user and their assigned home directory is printed in the Ansible console output.


V-73159

  • Summary: When passwords are changed or new passwords are established, pwquality must be used.

  • Severity: Medium

  • Implementation Status: Opt-In

Deployer/Auditor notes

The security role can require new or changed passwords to follow the pwquality rules, but this change can be disruptive for users without proper communication. Deployers must opt in for this change by setting the following variable:

security_enable_pwquality_password_set: yes