Defaults lecture=always 强制每次执行 sudo 前显示自定义安全提示,需配合 lecture_file 指定只读文本文件(权限 444),并确保无其他 lecture 设置覆盖,以满足等保、ISO27001 等合规场景的提权前明示要求。

在 Linux 中,Defaults lecture=always 是 sudoers 文件中一个被长期支持但常被忽视的安全提示机制。它能在每次用户执行 sudo 命令前,强制显示一段自定义文本(即“知悉告知书”),且该提示不可跳过、不可静默关闭——只要用户输入 sudo,就必须完整阅读并按回车确认,才进入密码输入阶段。这非常适用于合规场景(如等保、金融审计、内部安全政策)中要求“每次提权前必须明示风险与责任”。
以下是具体实现方式,兼顾安全性、可维护性与实际生效验证:
一、启用 lecture 并设置自定义提示内容
lecture=always 本身只控制“是否显示”,真正呈现的文本由 lecture_file 指定。二者需配合使用:
# 编辑 sudoers(务必用 visudo) sudo visudo
在文件顶部(推荐在 Defaults env_reset 后)添加两行:
Defaults lecture=always Defaults lecture_file="/etc/sudoers.lecture"
✅ 注意:
lecture_file路径必须是绝对路径,且文件不能有写权限给非 root 用户(否则 sudo 会拒绝加载)。
二、创建合规告知书文本文件
新建 /etc/sudoers.lecture,内容为纯文本(UTF-8 编码,无 BOM),例如:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
────────────────────────────────────────────────────── ⚠️ 安全合规知悉告知书(依据《XX公司信息系统权限管理规范》第5.2条) ────────────────────────────────────────────────────── 您即将以提升权限执行命令。请确认: • 此操作将继承 root 权限,可能影响系统稳定性与数据安全; • 所有 sudo 行为已被完整记录(含命令、参数、时间、终端、IP); • 非授权操作、越权执行或绕过审批流程,将触发安全审计并追究责任; • 如非本人操作,请立即终止并报告 IT 安全部。 ✅ 请按 [Enter] 键继续 —— 您的确认即表示已阅读并接受上述条款。 ──────────────────────────────────────────────────────
保存后设权限(关键!否则 sudo 会忽略):
sudo chmod 444 /etc/sudoers.lecture sudo chown root:root /etc/sudoers.lecture
? 权限必须为
444(只读)且属主为root;若为644或属组可写,sudo将静默禁用 lecture。
三、限制干扰项,确保强制生效
默认情况下,lecture 可能被 env_reset 或其他策略覆盖。建议补充以下防护配置(仍在 visudo 中):
# 确保环境变量不干扰 lecture 显示 Defaults env_reset Defaults env_keep += "LANG LC_ALL" # 禁止通过环境变量绕过(如 SUDO_ASKPASS) Defaults !use_pty, !requiretty # ⚠️ 注意:此项仅在明确需要图形环境时启用,多数服务器应保留 requiretty # 更推荐保留 requiretty(防 cron/webshell 静默提权) Defaults requiretty
四、验证是否真正生效
切换到目标用户(如 testuser),执行任意 sudo 命令:
sudo ls /root
✅ 正确表现应为:
→ 先完整显示 /etc/sudoers.lecture 内容;
→ 光标停在最后一行末尾,等待你按 Enter;
→ 然后才提示输入密码;
→ 密码正确后执行命令。
❌ 若未显示、一闪而过、或直接跳到密码提示,则检查:
-
sudo visudo -c是否报语法错; -
/etc/sudoers.lecture权限是否为444; - 是否有其他
Defaults lecture=行覆盖了always(如never或once); - 用户是否属于
exempt_group(极少见,但存在时 lecture 不触发)。
这套机制不依赖 shell hook、不修改用户环境、不拦截命令流,完全由 sudo 自身解析执行,符合等保三级“特权操作强身份鉴别+操作前明确告知”要求,也满足 ISO 27001 A.9.4.3 关于“特权访问控制”的审计证据留存需求。

















