Linux登录前警告横幅由/etc/issue(本地终端)和/etc/issue.net(远程SSH)控制,而非/etc/motd;后者仅在登录成功后显示。需分别配置并重启对应服务,且应清空敏感信息、设为只读以加固安全。

Linux 登录前警告横幅不是靠 /etc/motd,而是靠 /etc/issue 和 /etc/issue.net。/etc/motd 是登录成功后才显示的,属于“登录后提示”,不能用于登录前警告。真正控制登录前横幅的是另外两个文件,且它们的生效场景和配置逻辑完全不同。
/etc/issue:本地终端登录前显示
这个文件只对物理机、虚拟控制台(如 Ctrl+Alt+F2)、串口登录等本地文本终端生效。SSH 远程连接时默认不读取它。
- 内容支持转义符,比如
\r(内核版本)、\m(CPU 架构)、\s(系统名)、\t(当前时间)——但这些恰恰是安全风险点,容易泄露系统细节 - 若要加法律警告,建议清空原内容,只写纯文本,例如:
WARNING: Unauthorized access is strictly prohibited. - 修改后需重启 getty 服务才能立即生效:
sudo systemctl restart getty@tty1(按实际 tty 编号调整) - 设为只读可防意外覆盖:
sudo chmod 444 /etc/issue
/etc/issue.net:远程登录前显示(SSH/telnet)
该文件专为网络登录设计,但是否显示取决于 SSH 服务配置。它本身不支持转义符(\r、\m 等会被原样打印),所以不用担心泄露内核信息。
- 默认情况下,OpenSSH 不自动读取
/etc/issue.net;必须在/etc/ssh/sshd_config中启用 Banner 功能:Banner /etc/issue.net - 取消注释该行后,执行
sudo systemctl reload sshd生效 - 确保文件权限为 root 可读:
sudo chown root:root /etc/issue.net && sudo chmod 644 /etc/issue.net - 如果已有
Banner指向其他路径,优先级更高,/etc/issue.net就不会起作用
为什么改了 /etc/motd 却没出现在登录前?
/etc/motd 根本不参与登录前流程。它的作用是在用户输入密码成功、shell 启动前输出一段静态或动态消息。常见误区是把它当成 Banner 使用,结果调试半天也不出现。
- 登录顺序(以 SSH 为例):Banner → 密码验证 → issue.net(若 Banner 未启用)→ motd → shell 提示符
- 如果你看到的是登录成功后的文字,那一定是 motd 或 profile.d 脚本输出的,和登录前警告无关
- 想统一所有入口的警告,就不要依赖 motd,专注配置 issue 和 issue.net + sshd_config
安全加固建议
避免信息泄露比加提示更重要。很多默认 issue 内容会暴露内核、架构、主机名等敏感字段。
- 清空并锁定两个文件:
sudo truncate -s 0 /etc/issue /etc/issue.net && sudo chmod 444 /etc/issue /etc/issue.net - 如果必须保留法律声明,只用 ASCII 文本,禁用所有反斜杠开头的字符
- 检查 SELinux 或 AppArmor 是否阻止 sshd 读取 banner 文件(尤其当 banner 放在非标准路径时)


















