// 安全研究 · 2025-06-14

自定义Linux服务器的Banner设置:打造专业与个性化的SSH欢迎信息

在Linux服务器的日常管理中,每次通过SSH登录时,屏幕上显示的欢迎信息(Banner或MOTD,Message of the Day)不仅仅是一段简单的文本提示,它可以传递关键信息、强化安全策略,甚至为服务器增添独特的个性。本文将深入探讨Linux系统中Banner的设置方法,包括系统启动Banner、SSH登录前Banner和登录后Banner的配置,带你打造一个既专业又炫酷的欢迎界面。


一、Banner的类型与作用

在Linux系统中,Banner可以分为以下几种类型,每种类型的显示时机和用途不同:

  1. 系统启动Banner(/etc/issue)

    • 显示时机:用户通过本地控制台(如物理终端或虚拟终端)登录前显示。
    • 用途:通常用于提供系统基本信息(如操作系统版本、主机名)或简单的欢迎信息。
    • 对SSH的影响:默认情况下,/etc/issue不影响SSH登录,除非SSH配置文件明确引用它。
    • 动态变量:支持如\n(主机名)、\l(终端线路号)等变量,用于动态显示系统信息。
  2. SSH登录前Banner(/etc/ssh/sshd_config中的Banner)

    • 显示时机:用户通过SSH连接服务器,在输入用户名和密码之前显示。
    • 用途:常用于法律警告、授权提示或安全声明,提醒用户系统的使用规则。
    • 配置文件:通过/etc/ssh/sshd_config中的Banner选项指定文件路径。
  3. SSH登录后Banner(/etc/motd或/etc/update-motd.d/)

    • 显示时机:用户成功登录后显示。
    • 用途:显示系统状态(如运行时间、磁盘使用情况)、欢迎信息或自定义提示。
    • 静态MOTD:由/etc/motd文件直接提供内容,适合简单的静态信息。
    • 动态MOTD:在支持动态MOTD的系统(如Ubuntu)中,由/etc/update-motd.d/目录下的脚本生成,内容更灵活。

二、配置前的准备工作

在开始配置Banner之前,需要确保以下条件:

  1. 系统环境:本文以Ubuntu Server 22.04为例,确保系统已正确安装并可通过SSH访问。

  2. 权限要求:所有配置操作需要root权限。可以通过以下命令切换到root用户:

    sudo -i
  3. 工具安装:为了支持动态信息显示和ASCII艺术,建议安装以下工具:

    sudo apt update
    sudo apt install figlet toilet neofetch
  4. SSH服务:确保SSH服务(sshd)已启用并运行:

    sudo systemctl enable ssh
    sudo systemctl start ssh

完成这些准备后,我们可以开始配置不同类型的Banner。


三、配置系统启动Banner(/etc/issue)

1. 用途与场景

/etc/issue文件控制本地控制台登录前的欢迎信息。尽管它对SSH登录的直接影响有限,但在某些场景下(如SSH配置中引用了/etc/issue),它仍然是重要的Banner来源。以下是如何配置一个动态更新的系统启动Banner。

2. 静态配置

直接编辑/etc/issue文件可以设置简单的欢迎信息:

sudo nano /etc/issue

输入以下内容:

欢迎体验CTF靶机系统
操作系统:Ubuntu Server 22.04
主机名:\n
终端:\l

保存后,通过本地控制台登录即可看到效果。动态变量如\n和\l会自动替换为主机名和终端线路号。

3. 动态更新Banner

为了让/etc/issue显示动态信息(如IP地址、系统运行时间),可以借助脚本和cron任务自动更新。以下是具体步骤:

步骤:

  1. 创建脚本文件:

    sudo nano /usr/local/bin/issue-banner.sh

    输入以下内容:

    #!/bin/bash
    echo "==========================================" > /etc/issue
    echo "        🚩  欢迎体验CTF靶机系统" >> /etc/issue
    echo "==========================================" >> /etc/issue
    echo "    📛 名称:CTF Machine" >> /etc/issue
    echo "    🧑 作者:vortex5" >> /etc/issue
    echo "    🌐 IP地址:$(hostname -I | awk '{print $1}')" >> /etc/issue
    echo "    📈 运行时间:$(uptime -p)" >> /etc/issue
    echo "    💾 磁盘使用:$(df -h / | awk 'NR==2 {print $3 "/" $2}')" >> /etc/issue
    echo "    🧠 内存使用:$(free -h | awk '/Mem:/ {print $3 "/" $2}')" >> /etc/issue
    echo "==========================================" >> /etc/issue

    该脚本会在/etc/issue中写入包含系统IP、运行时间、磁盘和内存使用情况的动态信息。

  2. 赋予执行权限:

    sudo chmod +x /usr/local/bin/issue-banner.sh
  3. 设置开机自动运行: 使用cron的@reboot选项确保系统启动时执行脚本:

    sudo crontab -e

    在编辑器中添加以下行:

    @reboot /usr/local/bin/issue-banner.sh
  4. 重启系统测试:

    sudo reboot

    重启后,通过本地控制台登录,将看到类似以下的欢迎信息:

    ==========================================
            🚩  欢迎体验CTF靶机系统
    ==========================================
        📛 名称:CTF Machine
        🧑 作者:vortex5
        🌐 IP地址:192.168.1.100
        📈 运行时间:up 1 hour, 23 minutes
        💾 磁盘使用:5.2G/20G
        🧠 内存使用:1.3G/4G
    ==========================================

4. 注意事项

  • 确保脚本中的命令(如hostname、uptime、df、free)在系统中可用。
  • 如果SSH配置中启用了Banner /etc/issue,此文件的内容也会在SSH登录前显示。

四、配置SSH登录前Banner

1. 用途与场景

SSH登录前Banner在用户输入用户名和密码之前显示,通常用于法律警告或安全提示。例如,CTF靶机可以显示授权使用声明,以提醒用户遵守规则。

2. 配置步骤

  1. 编辑SSH配置文件:

    sudo nano /etc/ssh/sshd_config

    找到或添加以下行:

    Banner /etc/ssh/ssh_banner
  2. 创建Banner文件:

    sudo nano /etc/ssh/ssh_banner

    输入以下内容:

    === 注意 ===
    此系统仅限授权CTF测试人员使用
    所有活动将被记录和监控
    未经授权的访问将被追踪并报告
    ===============================
  3. 重启SSH服务:

    sudo systemctl restart ssh
  4. 测试效果: 使用SSH客户端(如ssh user@server_ip)连接服务器,在输入密码前将看到上述警告信息。

3. 进阶技巧:动态登录前Banner

虽然/etc/ssh/sshd_config中的Banner选项不支持动态脚本,但可以通过外部脚本定期更新Banner文件。例如,修改/usr/local/bin/issue-banner.sh脚本,将输出同时写入/etc/ssh/ssh_banner,从而实现动态效果。


五、配置SSH登录后Banner(动态MOTD)

1. 用途与场景

登录后Banner(MOTD)在用户成功登录后显示,适合展示系统状态、欢迎信息或个性化内容。Ubuntu Server使用/etc/update-motd.d/目录来生成动态MOTD,提供了极高的灵活性。

2. 配置步骤

以下提供了一个CTF风格的动态MOTD配置:

  1. 创建MOTD脚本:

    sudo nano /etc/update-motd.d/00-ctf-banner

    输入以下内容:

    #!/bin/bash
    
    # ========================
    # 🧠 CTF: CTF Machine
    # 👨‍💻 作者: vortex5
    # ========================
    
    IP=$(hostname -I | awk '{print $1}')
    UPTIME=$(uptime -p)
    DISK=$(df -h / | awk 'NR==2 {print $3 "/" $2}')
    MEM=$(free -h | awk '/Mem:/ {print $3 "/" $2}')
    
    echo "=========================================="
    echo "    🚩  欢迎体验CTF靶机系统"
    echo "=========================================="
    echo "  📛 名称:CTF Machine"
    echo "  🧑 作者:vortex5"
    echo "  🌐 IP地址:$IP"
    echo "  📈 运行时间:$UPTIME"
    echo "  💾 磁盘使用:$DISK"
    echo "  🧠 内存使用:$MEM"
    echo "=========================================="
  2. 设置执行权限并禁用其他脚本: 为避免冲突,禁用/etc/update-motd.d/目录下其他脚本的执行权限:

    sudo chmod -x /etc/update-motd.d/*
    sudo chmod +x /etc/update-motd.d/00-ctf-banner
  3. 测试效果: 重新通过SSH登录,将看到类似以下的输出:

    ==========================================
        🚩  欢迎体验CTF靶机系统
    ==========================================
      📛 名称:CTF Machine
      🧑 作者:vortex5
      🌐 IP地址:192.168.1.100
      📈 运行时间:up 1 hour, 23 minutes
      💾 磁盘使用:5.2G/20G
      🧠 内存使用:1.3G/4G
    ==========================================

3. 进阶技巧:添加颜色与ASCII艺术

为了让MOTD更具吸引力,可以使用ANSI颜色代码和ASCII艺术工具。

添加颜色

修改/etc/update-motd.d/00-ctf-banner:

#!/bin/bash

# ========================
# 🧠 CTF: CTF Machine
# 👨‍💻 作者: vortex5
# ========================

IP=$(hostname -I | awk '{print $1}')
UPTIME=$(uptime -p)
DISK=$(df -h / | awk 'NR==2 {print $3 "/" $2}')
MEM=$(free -h | awk '/Mem:/ {print $3 "/" $2}')

echo -e "\033[31m==========================================\033[0m"
echo -e "\033[32m    🚩  欢迎体验CTF靶机系统\033[0m"
echo -e "\033[31m==========================================\033[0m"
echo -e "\033[33m  📛 名称:CTF Machine\033[0m"
echo -e "\033[33m  🧑 作者:vortex5\033[0m"
echo -e "\033[36m  🌐 IP地址:$IP\033[0m"
echo -e "\033[36m  📈 运行时间:$UPTIME\033[0m"
echo -e "\033[36m  💾 磁盘使用:$DISK\033[0m"
echo -e "\033[36m  🧠 内存使用:$MEM\033[0m"
echo -e "\033[31m==========================================\033[0m"

添加ASCII艺术

使用figlet或neofetch添加艺术效果。例如:

#!/bin/bash
figlet "CTF Machine"
echo -e "\033[32m欢迎体验CTF靶机系统\033[0m"

或使用neofetch:

#!/bin/bash
neofetch --ascii

保存并赋予执行权限后,重新登录即可看到效果。


六、注意事项与最佳实践

  1. 兼容性测试:不同终端(如PuTTY、iTerm2)对颜色和ASCII艺术的支持可能不同,建议在多种终端上测试显示效果。

  2. 权限管理:确保脚本和Banner文件的权限正确,避免非授权用户修改。建议使用chmod 644或chmod 755。

  3. 性能优化:动态MOTD脚本应尽量简洁,避免执行耗时命令(如频繁的网络请求),以减少登录延迟。

  4. 备份配置文件:在修改/etc/ssh/sshd_config或/etc/issue等文件前,建议备份:

    sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
  5. 法律警告:对于公开服务器,登录前Banner应包含明确的法律声明,以保护系统安全。

原文 https://blog.csdn.net/2301_79518550/article/details/148025551