互联网安全中心(CIS)Ubuntu 24.04 基准

重要

本文仅适用于 AKS 使用的 Ubuntu 24.04 映像。 建议状态和指南反映 CIS Ubuntu 24.04 LTS 基准 v1.0.0以及特定时间的 Ubuntu 24.04 映像(发布于 2025 年 9 月 18 日)。 它们可能不适用于其他 Ubuntu 版本(例如 Ubuntu 22.04)。 在应用指南之前,请验证 OS 版本和基准版本。

本文介绍适用于 AKS 使用的 Ubuntu 映像的安全 OS 配置。 AKS 是符合 SOC、ISO、PCI DSS 和 HIPAA 标准的安全服务。 有关 AKS 安全性的详细信息,请参阅 Azure Kubernetes 服务(AKS)中群集的安全概念。 若要详细了解 CIS 基准,请参阅 Center for Internet Security (CIS) 基准

Recommendations

表格包含四个部分:

  • CIS ID:与每个基线规则关联的规则 ID
  • 建议说明:CIS 基准发布的建议的说明
  • 级别:L1(即级别 1)推荐可在任何系统上配置的基本必需安全要求,这些要求应该很少或不会导致服务中断或功能降低
  • 状态:
    • 通过 - 已应用建议。
    • 失败 - 未应用建议
    • Manual - 无法自动扫描此建议。 CIS 基准中有指示需要手动审核。
    • N/A - 建议涉及与 AKS 无关的清单文件权限要求。
    • 取决于环境 - 建议在用户的特定环境中应用,且不受 AKS 控制
    • 等效控制 - 建议以不同的等效方式实现
  • 原因:
    • 潜在的操作影响 - 未应用建议,因为该建议会对服务产生负面影响
    • 在其他地方覆盖 - 建议在 Azure 云计算中的另一项控制措施的覆盖范围内。

Ubuntu LTS 24.04

AKS 群集部署在主机虚拟机上,该虚拟机运行具有内置安全配置的操作系统。 此操作系统用于在 AKS 上运行容器。 此主机操作系统基于已应用安全配置的 Ubuntu 24.04.LTS 映像。

作为安全优化操作系统的一部分:

  • AKS 默认提供经过安全优化的主机 OS,但不提供选择备用操作系统的选项。
  • 安全优化的主机 OS 专为 AKS 构建和维护,不支持 AKS 平台以外的使用。
  • 为了减少受攻击面,我们在 OS 中禁用了一些不必要的内核模块驱动程序。

注释

与 CIS 基准无关,Azure 会将每日修补程序(包括安全修补程序)应用到 AKS 虚拟主机。

内置安全配置的主机 OS 旨在减少受攻击面,并以安全的方式优化容器部署。

Ubuntu LTS 24.04 基准测试

以下是基于 CIS 规则的 CIS Ubuntu 24.04 LTS 基准 v1.0.0 建议的结果:

CIS 段落编号 建议说明 状态 原因
1 初始设置
1.1 文件系统
1.1.1 配置文件系统内核模块
1.1.1.1 确保 cramfs 内核模块不可用 通过
1.1.1.2 确保 freevxfs 内核模块不可用 通过
1.1.1.3 确保 hfs 内核模块不可用 通过
1.1.1.4 确保 hfsplus 内核模块不可用 通过
1.1.1.5 确保 jffs2 内核模块不可用 通过
1.1.1.9 确保 usb-storage 内核模块不可用。 通过
1.1.1.10 确保未使用的文件系统内核模块不可用 Manual
1.1.2 配置文件系统分区
1.1.2.1 配置 /tmp
1.1.2.1.1 确保 /tmp 是单独的分区 失败 操作影响:将 /tmp 作为单独的分区需要将其转变为 tmpfs(基于内存的文件系统),这将消耗与 Pod 可用内存相同的资源。
1.1.2.1.2 确保在 /tmp 分区上设置 nodev 选项 通过
1.1.2.1.3 确保在 /tmp 分区上设置 nosuid 选项 通过
1.1.2.1.4 确保在 /tmp 分区上设置 noexec 选项 通过
1.1.2.2 配置 /dev/shm
1.1.2.2.1 确保 /dev/shm 是单独的分区 通过
1.1.2.2.2 确保在 /dev/shm 分区上设置 nodev 选项 通过
1.1.2.2.3 确保在 /dev/shm 分区上设置 nosuid 选项 通过
1.1.2.2.4 确保在 /dev/shm 分区上设置 noexec 选项 通过
1.1.2.3 配置 /home
1.1.2.3.2 确保在 /home 分区上设置 nodev 选项 通过
1.1.2.3.3 确保在 /home 分区上设置 nosuid 选项 通过
1.1.2.4 配置 /var
1.1.2.4.2 确保在 /var 分区上设置 nodev 选项 通过
1.1.2.4.3 确保在 /var 分区上设置 nosuid 选项 通过
1.1.2.5 配置 /var/tmp
1.1.2.5.2 确保在 /var/tmp 分区上设置 nodev 选项 通过
1.1.2.5.3 确保在 /var/tmp 分区上设置 nosuid 选项 通过
1.1.2.5.4 确保对 /var/tmp 分区设置 noexec 选项 通过
1.1.2.6 配置 /var/log
1.1.2.6.2 确保在 /var/log 分区上设置 nodev 选项 通过
1.1.2.6.3 确保在 /var/log 分区上设置 nosuid 选项 通过
1.1.2.6.4 确保对 /var/log 分区设置 noexec 选项 通过
1.1.2.7 配置 /var/log/audit
1.1.2.7.2 确保在 /var/log/audit 分区上设置 nodev 选项 通过
1.1.2.7.3 确保在 /var/log/audit 分区上设置 nosuid 选项 通过
1.1.2.7.4 确保在 /var/log/audit 分区上设置 noexec 选项 通过
1.2 包管理
1.2.1 配置包存储库
1.2.1.1 确保已配置 GPG 密钥 Manual
1.2.1.2 确保配置包管理器存储库 通过
1.2.2 配置包更新
1.2.2.1 确保已安装更新、修补程序和其他安全软件 取决于环境 节点 OS 升级通道 可用于自动执行更新和修补程序。
1.3 强制访问控制
1.3.1 配置 AppArmor
1.3.1.1 确保已安装 AppArmor 通过
1.3.1.2 确保已在启动加载程序配置中启用 AppArmor 通过
1.3.1.3 确保所有 AppArmor 配置文件都处于强制或抱怨模式 失败 操作影响:可能会阻止合法的工作负荷和加载项。
1.4 配置 Bootloader
1.4.1 确保已设置启动加载程序密码 通过
1.4.2 确保配置了对启动加载程序配置的访问权限 通过
1.5 配置额外的进程加固
1.5.1 确保已启用地址空间布局随机化 通过
1.5.2 确保限制 ptrace_scope 通过
1.5.3 确保已对核心转储进行限制 通过
1.5.4 确保未安装预链接 通过
1.5.5 确保未启用自动错误报告 通过
1.6 配置命令行警告横幅
1.6.1 确保已正确配置“每日消息” 通过
1.6.2 确保正确配置本地登录警告横幅 通过
1.6.3 确保正确配置远程登录警告横幅 通过
1.6.4 确保已配置对 /etc/motd 的访问 通过
1.6.5 确保已配置对 /etc/issue 的访问 通过
1.6.6 确保已配置对 /etc/issue.net 的访问 通过
1.7 配置 GNOME 显示管理器
1.7.2 确保已配置 GDM 登录横幅 通过
1.7.3 确保已启用 GDM disable-user-list 选项 通过
1.7.4 确保在用户空闲时,GDM 屏幕锁定 通过
1.7.5 确保 GDM 屏幕锁无法被覆盖 通过
1.7.6 确保禁用 GDM 的可移动媒体自动挂载 通过
1.7.7 确保 GDM 禁用可移动媒体自动挂载不会被覆盖 通过
1.7.8 确保已启用 GDM 自动运行-永不启用 通过
1.7.9 确保不覆盖 GDM autorun-never 通过
1.7.10 确保未启用 XDMCP 通过
2 Services
2.1 配置服务器服务
2.1.1 确保 autofs 服务未使用 通过
2.1.2 确保 avahi 守护程序服务没有被使用 通过
2.1.3 确保 dhcp 服务器服务未使用 通过
2.1.4 确保 DNS 服务器服务未使用 通过
2.1.5 确保 dnsmasq 服务未使用 通过
2.1.6 确保 ftp 服务器服务未使用 通过
2.1.7 确保 LDAP 服务器的服务未被使用 通过
2.1.8 确保消息访问服务器服务未被使用 通过
2.1.9 确保不要使用网络文件系统服务 通过
2.1.10 确保 NIS 服务器服务未使用 通过
2.1.11 确保打印服务器服务未使用 通过
2.1.12 确保 rpcbind 服务未使用 失败 操作影响:rpcbind 是 Azure CSI 驱动程序使用的 NFS 的必需依赖项。
2.1.13 确保 rsync 服务没有被使用 通过
2.1.14 确保 samba 文件服务器服务未使用 通过
2.1.15 确保 snmp 服务未被使用 通过
2.1.16 确保 tftp 服务器服务没有被使用 通过
2.1.17 确保 Web 代理服务器服务未使用 通过
2.1.18 确保 Web 服务未被使用 通过
2.1.19 确保未使用 xinetd 服务 通过
2.1.21 确保邮件传输代理配置为仅限本地模式 通过
2.1.22 确保在网络接口上仅允许已批准的服务进行侦听 通过
2.2 配置客户端服务
2.2.1 确保未安装 NIS 客户端 通过
2.2.2 确保未安装 rsh 客户端 通过
2.2.3 确保未安装 talk 客户端 通过
2.2.4 确保未安装 telnet 客户端 通过
2.2.5 确保未安装 ldap 客户端 通过
2.2.6 确保未安装 ftp 客户端 通过
2.3 配置时间同步
2.3.1 确保使用时间同步
2.3.1.1 确保使用单一同步守护程序 通过
2.3.2 配置 systemd-timesyncd
2.3.2.1 确保 systemd-timesyncd 配置了经过授权的时间服务器 通过
2.3.2.2 确保已启用并运行 systemd-timesyncd 通过
2.3.3 配置 chrony
2.3.3.1 确保 chrony 配置有授权的时间服务器 失败 AKS 节点被配置为使用 chrony 通过管理程序接口同步到宿主机的 PTP 硬件时钟。 PTP 硬件时钟是 Azure 的授权时间服务器。 有关详细信息,请参阅 chrony 的配置。
2.3.3.2 确保 chrony 作为用户 _chrony 运行 通过
2.3.3.3 确保启用并运行 chrony 通过
2.4 作业调度程序
2.4.1 配置 cron
2.4.1.1 确保已启用 cron 守护程序并处于活动状态 通过
2.4.1.2 确保配置 /etc/crontab 上的权限 通过
2.4.1.3 确保 /etc/cron.hourly 的权限已设置 通过
2.4.1.4 确保已配置 /etc/cron.daily 的权限 通过
2.4.1.5 请确保已配置 /etc/cron.weekly 的权限 通过
2.4.1.6 确保已配置 /etc/cron.monthly 的权限 通过
2.4.1.7 确保已配置 /etc/cron.d 的权限 通过
2.4.1.8 确保 crontab 仅限于授权用户 通过
2.4.2 配置于
2.4.2.1 确保 at 仅限于授权用户 通过
3 Network
3.1 配置网络设备
3.1.1 确保标识 IPv6 状态 通过
3.1.2 确保已禁用无线接口 通过
3.1.3 确保蓝牙服务没有被占用 通过
3.3 配置网络内核参数
3.3.1 确保禁用 IP 转发 失败 操作影响:为了容器网络的正常运行,这是必需的。
3.3.2 确保禁用数据包重定向发送 通过
3.3.3 确保忽略虚假的 ICMP 响应 通过
3.3.4 确保忽略广播 ICMP 请求 通过
3.3.5 确保不接受 icmp 重定向 通过
3.3.6 确保不接受安全的 ICMP 重定向 通过
3.3.7 确保已启用反向路径筛选 通过
3.3.8 确保不接受源路由的数据包 通过
3.3.9 确保记录可疑的数据包 通过
3.3.10 确保已启用 tcp syn cookie 通过
3.3.11 确保不接受 ipv6 路由器通告 通过
4 基于主机的防火墙
4.1 配置单个防火墙实用工具
4.1.1 确保正在使用单个防火墙配置实用工具 在其他地方覆盖
4.2 配置 UncomplicatedFirewall
4.2.1 确保已安装 ufw 在其他地方覆盖
4.2.2 确保未安装带有 ufw 的 iptables-persistent 在其他地方覆盖
4.2.3 确保已启用 ufw 服务 在其他地方覆盖
4.2.4 确保已配置 ufw 环回流量 在其他地方覆盖
4.2.5 确保已配置 ufw 出站连接 在其他地方覆盖
4.2.6 确保所有打开端口都存在 ufw 防火墙规则 在其他地方覆盖
4.2.7 确保 ufw 启用默认的“拒绝防火墙”策略 在其他地方覆盖
4.3 配置 nftables
4.3.1 确保已安装 nftables 在其他地方覆盖
4.3.2 确保 ufw 已随 nftable 一起卸载或禁用 在其他地方覆盖
4.3.3 确保 iptable 已随 nftable 一起刷新 在其他地方覆盖
4.3.4 确保存在 nftables 表 在其他地方覆盖
4.3.5 确保存在 nftables 基链 在其他地方覆盖
4.3.6 确保已配置 nftables 环回流量 在其他地方覆盖
4.3.7 确保已配置 nftables 出站连接和已建立连接 在其他地方覆盖
4.3.8 确保 nftables 启用默认的“拒绝防火墙”策略 在其他地方覆盖
4.3.9 确保已启用 nftables 服务 在其他地方覆盖
4.3.10 确保 nftables 规则是永久性的 在其他地方覆盖
4.4 配置 iptables
4.4.1 配置 iptables 软件
4.4.1.1 确保已安装 iptables 包 在其他地方覆盖
4.4.1.2 确保 nftable 不与 iptable 一起使用 在其他地方覆盖
4.4.1.3 确保 ufw 未与 iptable 一起使用 在其他地方覆盖
4.4.2 配置 IPV4 iptables
4.4.2.1 确保 iptables 启用默认的“拒绝防火墙”策略 在其他地方覆盖
4.4.2.2 确保已配置 iptables 环回流量 在其他地方覆盖
4.4.2.3 确保已配置 iptables 出站连接和已建立连接 在其他地方覆盖
4.4.2.4 确保所有打开端口都存在 iptables 防火墙规则 在其他地方覆盖
4.4.3 配置 IPv6 ip6tables
4.4.3.1 确保 ip6tables 启用默认的“拒绝防火墙”策略 在其他地方覆盖
4.4.3.2 确保已配置 ip6tables 环回流量 在其他地方覆盖
4.4.3.3 确保已配置 ip6tables 出站连接和已建立连接 在其他地方覆盖
4.4.3.4 确保所有打开端口都存在 ip6tables 防火墙规则 在其他地方覆盖
5 存取控制
5.1 配置 SSH 服务器
5.1.1 确保已配置 /etc/ssh/sshd_config 的权限 通过
5.1.2 确保已正确配置 SSH 私有主机密钥文件的权限 通过
5.1.3 确保 SSH 公用主机密钥文件的权限已配置正确 通过
5.1.4 确保配置 sshd 访问 通过
5.1.5 确保配置 sshd 横幅 通过
5.1.6 确保配置 sshd 密码 通过
5.1.7 确保配置 sshd ClientAliveInterval 和 ClientAliveCountMax 通过
5.1.10 确保已禁用 sshd HostbasedAuthentication 通过
5.1.11 确保已启用 sshd IgnoreRhosts 通过
5.1.12 确保配置 sshd KexAlgorithms 通过
5.1.13 确保配置 sshd LoginGraceTime 通过
5.1.14 确保配置 sshd LogLevel 通过
5.1.15 确保配置 sshd MACs 通过
5.1.16 确保配置 sshd MaxAuthTries 通过
5.1.17 确保配置 sshd MaxSessions 通过
5.1.18 确保配置 sshd MaxStartups 通过
5.1.19 确保已禁用 sshd PermitEmptyPasswords 通过
5.1.20 确保已禁用 sshd PermitRootLogin 通过
5.1.21 确保已禁用 sshd PermitUserEnvironment 通过
5.1.22 确保已启用 sshd UsePAM 通过
5.2 配置特权提升
5.2.1 确保已安装 sudo 通过
5.2.2 确保 sudo 命令使用 pty 通过
5.2.3 确保 sudo 日志文件存在 通过
5.2.5 确保全局不会禁用特权升级的重新身份验证 通过
5.2.6 确保正确配置 sudo 身份验证超时 通过
5.2.7 确保限制对 su 命令的访问 通过
5.3 可插入身份验证模块
5.3.1 配置 PAM 软件包
5.3.1.1 确保已安装 pam 的最新版本 通过
5.3.1.2 确保已安装“libpam-modules” 通过
5.3.1.3 确保已安装 libpam-pwquality 通过
5.3.2 配置 pam-auth-update 配置文件
5.3.2.1 确保已启用pam_unix模块 通过
5.3.2.2 确保已启用pam_faillock模块 通过
5.3.2.3 确保已启用pam_pwquality模块 通过
5.3.2.4 确保已启用pam_pwhistory模块 通过
5.3.3 配置 PAM 参数
5.3.3.1 配置pam_faillock模块
5.3.3.1.1 确保配置密码失败尝试的锁定功能 通过
5.3.3.1.2 确保已配置密码解锁时间 通过
5.3.3.1.3 确保密码失败尝试锁定机制应用于根帐户 通过
5.3.3.2 配置pam_pwquality模块
5.3.3.2.1 确保已配置更改字符的密码数 通过
5.3.3.2.2 确保配置了最小密码长度 通过
5.3.3.2.3 确保密码复杂性得到正确配置 Manual 由 AKS 默认配置
5.3.3.2.4 确保配置密码相同的连续字符 通过
5.3.3.2.5 确保配置密码最大顺序字符数 通过
5.3.3.2.6 确保启用密码字典检查 通过
5.3.3.2.7 确保强制实施密码质量检查 通过
5.3.3.2.8 确保为根用户强制实施密码质量 通过
5.3.3.3 配置pam_pwhistory模块
5.3.3.3.1 确保配置了密码历史记录功能记忆 通过
5.3.3.3.2 确保为根用户强制实施密码历史记录 通过
5.3.3.3.3 确保pam_pwhistory包括use_authtok 通过
5.3.3.4 配置pam_unix模块
5.3.3.4.1 确保pam_unix不包含nullok 通过
5.3.3.4.2 确保pam_unix不包括记住 通过
5.3.3.4.3 确保pam_unix包含强密码哈希算法 通过
5.3.3.4.4 确保 pam_unix 包含 use_authtok 通过
5.4 用户帐户和环境
5.4.1 配置影子密码套件参数
5.4.1.1 确保已配置密码的过期时间 通过
5.4.1.2 确保配置了最短密码天数 通过
5.4.1.3 确保配置密码过期警告日期 通过
5.4.1.4 确保配置强密码哈希算法 通过
5.4.1.5 确保配置了非活动密码锁定 通过
5.4.1.6 确保所有用户的上次密码更改日期都是过去的日期 通过
5.4.2 配置根帐户、系统帐户和环境
5.4.2.1 确保根账号是唯一的 UID 0 帐户 通过
5.4.2.2 确保 root 是唯一的 GID 0 账户 通过
5.4.2.3 确保组根是唯一的 GID 0 组 通过
5.4.2.4 确保控制根帐户访问权限 通过
5.4.2.5 确保根路径完整性 通过
5.4.2.6 确保配置根用户 umask 通过
5.4.2.7 确保系统帐户没有有效的登录 shell 通过
5.4.2.8 确保没有有效登录 shell 的帐户被锁定 通过
5.4.3 配置用户默认环境
5.4.3.1 确保未在 /etc/shells 中列出 nologin 通过
5.4.3.2 确保配置默认用户 shell 超时 通过
5.4.3.3 确保默认用户的 umask 已被正确配置 通过
6 日志记录和审核
6.1 系统日志记录
6.1.1 配置 systemd-journald 服务
6.1.1.1 确保 journald 服务已启用且处于活动状态 通过
6.1.1.2 确保已配置对 journald 日志文件的访问权限 Manual
6.1.1.3 确保已配置日记日志文件轮换 Manual 默认情况下,在 AKS 上配置
6.1.1.4 确保仅使用一个日志记录系统 通过
6.1.2 配置journald
6.1.2.1 配置 systemd-journal-remote
6.1.2.1.1 确保已安装 systemd-journal-remote 通过
6.1.2.1.2 确保配置 systemd-journal-upload 身份验证 不適用 AKS 不使用日志上传,并且依赖于 rsyslog。
6.1.2.1.3 确保已启用 systemd-journal-upload 且处于活动状态 通过
6.1.2.1.4 确保 systemd-journal-remote 服务未使用 通过
6.1.2.2 确保已禁用已记录的 ForwardToSyslog 通过
6.1.2.3 确保已配置 journald 压缩 通过
6.1.2.4 确保已配置 journald 存储 通过
6.1.3 配置 rsyslog
6.1.3.1 确保已安装 rsyslog 通过
6.1.3.2 确保 rsyslog 服务已启用且处于活动状态 通过
6.1.3.3 确保配置journald以将日志发送到rsyslog 通过
6.1.3.4 确保已配置 rsyslog 日志文件创建模式 通过
6.1.3.5 确保配置 rsyslog 日志记录 通过
6.1.3.6 确保 rsyslog 配置为将日志发送到远程日志主机 不適用 配置了适用于 Linux 的 Azure Monitor 代理
6.1.3.7 确保 rsyslog 未配置为从远程客户端接收日志 通过
6.1.3.8 确保已配置 logrotate 通过
6.1.4 配置 Logfiles
6.1.4.1 确保已配置对所有日志文件的访问权限 通过
6.3 配置完整性检查
6.3.1 确保已安装 AIDE 操作影响 扫描将定期影响工作负荷
6.3.2 确保定期检查文件系统完整性 操作影响 扫描将定期影响工作负荷
7 系统维护
7.1 系统文件权限
7.1.1 确保已配置 /etc/passwd 的权限 通过
7.1.2 确保已配置 /etc/passwd- 的权限 通过
7.1.3 确保已配置 /etc/group 的权限 通过
7.1.4 确保已配置 /etc/group- 的权限 通过
7.1.5 确保 /etc/shadow 的权限已正确配置 通过
7.1.6 确保已配置 /etc/shadow- 上的权限 通过
7.1.7 确保已配置 /etc/gshadow 的权限 通过
7.1.8 确保已配置 /etc/gshadow- 的权限 通过
7.1.9 确保配置了对 /etc/shell 的权限 通过
7.1.10 确保配置了对 /etc/security/opasswd 的权限 通过
7.1.11 确保所有人都可写的文件和目录受到保护 通过
7.1.12 确保不存在无所有者且无所属组的文件或目录 通过
7.1.13 确保查看 SUID 和 SGID 文件 Manual
7.2 本地用户和组设置
7.2.1 确保 /etc/passwd 中的帐户使用隐藏密码 通过
7.2.2 确保 /etc/shadow 密码字段不为空 通过
7.2.3 确保 /etc/passwd 中的所有组也均存在于 /etc/group 中 通过
7.2.4 确保影子组为空 通过
7.2.5 确保不存在重复的 UID 通过
7.2.6 确保不存在重复的 GID 通过
7.2.7 确保不存在重复的用户名 通过
7.2.8 确保不存在重复的组名 通过
7.2.9 确保已配置本地交互用户主目录 通过
7.2.10 确保已配置本地交互用户点文件访问权限 通过

后续步骤

有关 AKS 安全性的详细信息,请参阅以下文章: