在Linux服务器的日常管理中,每次通过SSH登录时,屏幕上显示的欢迎信息(Banner或MOTD,Message of the Day)不仅仅是一段简单的文本提示,它可以传递关键信息、强化安全策略,甚至为服务器增添独特的个性。本文将深入探讨Linux系统中Banner的设置方法,包括系统启动Banner、SSH登录前Banner和登录后Banner的配置,带你打造一个既专业又炫酷的欢迎界面。
一、Banner的类型与作用
在Linux系统中,Banner可以分为以下几种类型,每种类型的显示时机和用途不同:
-
系统启动Banner(/etc/issue)
- 显示时机:用户通过本地控制台(如物理终端或虚拟终端)登录前显示。
- 用途:通常用于提供系统基本信息(如操作系统版本、主机名)或简单的欢迎信息。
- 对SSH的影响:默认情况下,
/etc/issue不影响SSH登录,除非SSH配置文件明确引用它。 - 动态变量:支持如
\n(主机名)、\l(终端线路号)等变量,用于动态显示系统信息。
-
SSH登录前Banner(/etc/ssh/sshd_config中的Banner)
- 显示时机:用户通过SSH连接服务器,在输入用户名和密码之前显示。
- 用途:常用于法律警告、授权提示或安全声明,提醒用户系统的使用规则。
- 配置文件:通过
/etc/ssh/sshd_config中的Banner选项指定文件路径。
-
SSH登录后Banner(/etc/motd或/etc/update-motd.d/)
- 显示时机:用户成功登录后显示。
- 用途:显示系统状态(如运行时间、磁盘使用情况)、欢迎信息或自定义提示。
- 静态MOTD:由
/etc/motd文件直接提供内容,适合简单的静态信息。 - 动态MOTD:在支持动态MOTD的系统(如Ubuntu)中,由
/etc/update-motd.d/目录下的脚本生成,内容更灵活。
二、配置前的准备工作
在开始配置Banner之前,需要确保以下条件:
-
系统环境:本文以Ubuntu Server 22.04为例,确保系统已正确安装并可通过SSH访问。
-
权限要求:所有配置操作需要root权限。可以通过以下命令切换到root用户:
sudo -i -
工具安装:为了支持动态信息显示和ASCII艺术,建议安装以下工具:
sudo apt update sudo apt install figlet toilet neofetch -
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任务自动更新。以下是具体步骤:
步骤:
-
创建脚本文件:
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、运行时间、磁盘和内存使用情况的动态信息。 -
赋予执行权限:
sudo chmod +x /usr/local/bin/issue-banner.sh -
设置开机自动运行: 使用
cron的@reboot选项确保系统启动时执行脚本:sudo crontab -e在编辑器中添加以下行:
@reboot /usr/local/bin/issue-banner.sh -
重启系统测试:
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. 配置步骤
-
编辑SSH配置文件:
sudo nano /etc/ssh/sshd_config找到或添加以下行:
Banner /etc/ssh/ssh_banner -
创建Banner文件:
sudo nano /etc/ssh/ssh_banner输入以下内容:
=== 注意 === 此系统仅限授权CTF测试人员使用 所有活动将被记录和监控 未经授权的访问将被追踪并报告 =============================== -
重启SSH服务:
sudo systemctl restart ssh -
测试效果: 使用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配置:
-
创建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 "==========================================" -
设置执行权限并禁用其他脚本: 为避免冲突,禁用
/etc/update-motd.d/目录下其他脚本的执行权限:sudo chmod -x /etc/update-motd.d/* sudo chmod +x /etc/update-motd.d/00-ctf-banner -
测试效果: 重新通过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
保存并赋予执行权限后,重新登录即可看到效果。
六、注意事项与最佳实践
-
兼容性测试:不同终端(如PuTTY、iTerm2)对颜色和ASCII艺术的支持可能不同,建议在多种终端上测试显示效果。
-
权限管理:确保脚本和Banner文件的权限正确,避免非授权用户修改。建议使用
chmod 644或chmod 755。 -
性能优化:动态MOTD脚本应尽量简洁,避免执行耗时命令(如频繁的网络请求),以减少登录延迟。
-
备份配置文件:在修改
/etc/ssh/sshd_config或/etc/issue等文件前,建议备份:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak -
法律警告:对于公开服务器,登录前Banner应包含明确的法律声明,以保护系统安全。
原文 https://blog.csdn.net/2301_79518550/article/details/148025551