处理 ECS 启用 kernel.yama.ptrace_scope 报错

更新时间:
复制为 MD 格式

问题现象

在修改 kernel.yama.ptrace_scope 内核参数时,系统报错:

  • 错误信息:sysctl: cannot stat /proc/sys/kernel/yama/ptrace_scope: No such file or directory。

  • 直接表现/proc/sys/kernel/yama/ 目录不存在。

问题原因

Yama LSM 模块未初始化:Yama 作为一个 Linux 安全模块(LSM),其内核参数路径是由内核启动时加载该模块产生的。如果内核启动参数中未包含 yama,该路径将不会在 /proc 中创建。

解决方案

请先执行以下命令确认内核支持:

grep CONFIG_SECURITY_YAMA /boot/config-$(uname -r)
  • 若返回 y 或 m:请按以下场景进行修复。

  • 若无返回:当前内核不支持 Yama,请升级内核或更换镜像。

场景一:Alibaba Cloud Linux / CentOS / RHEL

使用 grubby 工具快速修改启动参数。

  1. 添加 yama 到启动序列
    执行以下命令。注意:为保证兼容性,通过追加方式确保 yama 被加载。

    # 检查当前启动参数
    grubby --info=DEFAULT
    
    # 添加安全模块参数
    grubby --args="security=yama" --update-kernel=ALL

    注意:如果系统依赖 SELinux,建议咨询技术支持确认内核是否支持 LSM 堆叠。

  2. 重启实例

    reboot
  3. 配置持久化

    echo "kernel.yama.ptrace_scope = 1" >> /etc/sysctl.conf
    sysctl -p

场景二:Ubuntu / Debian

通过手动编辑 GRUB 配置文件修复。

  1. 编辑 GRUB 配置
    修改 /etc/default/grub 文件:

    vim /etc/default/grub

    找到 GRUB_CMDLINE_LINUX_DEFAULT 行,在引号内添加 security=yama。例如:
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash security=yama"

  2. 更新 GRUB 并重启

    update-grub
    reboot
  3. 配置持久化

    sysctl -w kernel.yama.ptrace_scope=1
    echo "kernel.yama.ptrace_scope = 1" >> /etc/sysctl.conf

后续建议

  • 内核堆叠检查:在 Kernel 5.1 及以上版本中,建议使用 lsm=capability,yama,selinux 替代 security=yama 以获得更好的多模块支持。

  • 验证状态:重启后通过 cat /sys/kernel/security/lsm 查看当前已激活的安全模块列表。