id: os_policy_banner_ssh_enforce
title: Enforce SSH to Display Policy Banner
discussion: |
  SSH _MUST_ be configured to display a policy banner.

  Displaying a standardized and approved use notification before granting access to the operating system ensures that users are provided with privacy and security notification verbiage that is consistent with applicable federal laws, Executive Orders, directives, policies, regulations, standards, and guidance.

  System use notifications are required only for access via login interfaces with human users and are not required when such human interfaces do not exist

  NOTE: /etc/ssh/sshd_config will be automatically modified to its original state following any update or major upgrade to the operating system.
check: |
  /usr/sbin/sshd -G | /usr/bin/grep -c "^banner /etc/banner"
result:
  integer: 1
fix: |
  [source,bash]
  ----
  include_dir=$(/usr/bin/awk '/^Include/ {print $2}' /etc/ssh/sshd_config | /usr/bin/tr -d '*')

  if [[ -z $include_dir ]]; then
    /usr/bin/sed -i.bk "1s/.*/Include \/etc\/ssh\/sshd_config.d\/\*/" /etc/ssh/sshd_config
  fi

  /usr/bin/grep -qxF 'banner /etc/banner' "${include_dir}01-mscp-sshd.conf" 2>/dev/null || echo "banner /etc/banner" >> "${include_dir}01-mscp-sshd.conf"

  for file in $(ls ${include_dir}); do
    if [[ "$file" == "100-macos.conf" ]]; then
        continue
    fi
    if [[ "$file" == "01-mscp-sshd.conf" ]]; then
        break
    fi
    /bin/mv ${include_dir}${file} ${include_dir}20-${file}
  done
  ----
references:
  cce:
    - CCE-95259-8
  cci:
    - CCI-000048
    - CCI-000050
  800-53r5:
    - AC-8
  800-53r4:
    - AC-8
  srg:
    - SRG-OS-000024-GPOS-00007
    - SRG-OS-000023-GPOS-00006
  disa_stig:
    - APPL-26-000024
  800-171r3:
    - 03.01.09
  cmmc:
    - AC.L2-3.1.9
macOS:
  - '26.0'
tags:
  - 800-53r5_low
  - 800-53r5_moderate
  - 800-53r5_high
  - 800-53r4_low
  - 800-53r4_moderate
  - 800-53r4_high
  - 800-171
  - cnssi-1253_low
  - cnssi-1253_high
  - cmmc_lvl2
  - stig
  - cnssi-1253_moderate
severity: medium
mobileconfig: false
mobileconfig_info:
ddm_info:
  declarationtype: com.apple.configuration.services.configuration-files
  service: com.apple.sshd
  config_file: sshd_config
  configuration_key: Banner
  configuration_value: /etc/banner