openEuler 24.03 LTS SP3 motd标志区使用教程

一、背景认知

1.1 什么是motd标志区

motd全称Message of the Day(每日消息),是Linux系统(含openEuler)在用户完成终端登录(本地控制台登录、SSH远程登录)后,自动展示在命令行界面的文本信息区域,即登录后的欢迎/公告/提示信息展示区,无需用户手动触发,登录后自动显示。

1.2 openEuler 24.03 LTS SP3中motd的核心作用

  1. 系统公告推送:运维人员向所有登录用户发布系统维护通知、安全预警、使用规范等,确保所有用户及时获取关键信息;

  2. 系统状态展示:实时展示CPU负载、内存使用率、磁盘空间、本机IP地址等运维核心信息,无需手动执行free、df等命令查看;

  3. 安全合规提示:展示授权访问声明、操作审计提示、行业合规要求等,满足企业级服务器安全管理需求;

  4. 个性化定制:打造专属登录界面,可区分测试环境与生产环境,提升运维辨识度,避免误操作。

1.3 openEuler 24.03 LTS SP3中motd的技术特性

  1. 兼容Linux标准PAM认证机制,支持静态文本+动态脚本双模式,比传统/etc/motd配置更灵活,可满足不同场景需求;

  2. 基于DNF包管理器,可扩展安装update-motd框架,实现模块化动态配置,便于脚本管理和功能扩展;

  3. 适配SELinux安全机制,默认权限管控符合企业级安全基线,无需额外修改安全配置即可正常使用;

  4. 支持多用户差异化展示、条件触发告警等进阶能力,完美适配企业服务器运维场景。

二、核心配置

本章节明确motd所有相关配置文件、目录、权限规则,是初学者理解motd生效逻辑的核心基础,所有配置文件路径、权限均为默认值,无特殊需求请勿随意修改。

2.1 底层生效核心:PAM认证模块

openEuler的motd显示由PAM(可插拔认证模块)控制,核心是pam_motd.so模块,这是motd生效的底层基础,系统默认已配置完成,无需手动修改。

  1. 本地控制台登录配置文件:/etc/pam.d/login

  2. SSH远程登录配置文件:/etc/pam.d/sshd

openEuler 24.03 LTS SP3默认已在上述两个文件中启用pam_motd.so模块,默认配置如下(无需修改):

session optional pam_motd.so

session optional pam_motd.so noupdate

⚠️ 注意:初学者无特殊需求,严禁修改这两个文件,否则可能导致系统登录异常,无法正常进入终端。

2.2 静态motd核心配置文件

静态motd适用于无需实时更新的固定内容(如欢迎语、使用规范),配置简单,零门槛适合初学者入门,核心配置如下:

|------|--------------------------------------|
| 配置项 | 详情 |
| 文件路径 | /etc/motd |
| 核心作用 | 纯静态文本配置,直接写入的文本内容会在用户登录后直接展示,无任何执行逻辑 |
| 默认权限 | 644(root用户读写,其他用户只读) |
| 所有者 | root:root |

2.3 动态motd核心配置目录

动态motd适用于需要实时更新的内容(如系统负载、IP地址),通过脚本实现内容动态生成,核心配置如下:

|--------|-----------------------------------------------------------------------|
| 配置项 | 详情 |
| 目录路径 | /etc/update-motd.d/ |
| 核心作用 | 动态motd的模块化脚本目录,目录下的可执行shell脚本,会按数字前缀从小到大的顺序依次执行,脚本的标准输出内容会拼接成完整motd展示 |
| 目录默认权限 | 755 |
| 目录所有者 | root:root |

动态脚本核心执行规则(初学者必记)

  1. 脚本必须以数字开头命名(如00-header、10-sysinfo),数字越小执行优先级越高,显示位置越靠前;

  2. 脚本必须拥有可执行权限(755),所有者必须为root:root,其他用户不可有写权限,否则PAM会出于安全考虑禁止执行;

  3. 脚本开头必须有shebang行(#!/bin/bash 或 #!/bin/sh),否则无法正常执行;

  4. 脚本执行异常不会影响用户正常登录,仅对应内容不显示,可手动测试排查错误。

2.4 关联配置:SSH服务参数

SSH服务参数控制SSH登录时是否额外打印motd内容,若配置不当会导致motd内容重复显示,核心配置如下:

|------|---------------------------------------|
| 配置项 | 详情 |
| 文件路径 | /etc/ssh/sshd_config |
| 核心参数 | PrintMotd |
| 作用 | 控制SSH服务是否主动打印/etc/motd内容 |
| 最佳实践 | 设置为no,仅通过PAM控制motd显示,避免两者同时开启导致内容重复显示 |
| 默认权限 | 600 |
| 所有者 | root:root |

2.5 权限核心规则(安全红线)

motd相关配置的权限直接影响系统安全,以下权限规则必须严格遵守,禁止违规修改:

|--------------------------|------|-----------|--------------------|
| 配置对象 | 推荐权限 | 所有者 | 强制要求 |
| /etc/motd | 644 | root:root | 禁止给其他用户写权限 |
| /etc/update-motd.d/ 目录 | 755 | root:root | 禁止给其他用户写权限 |
| /etc/update-motd.d/ 下的脚本 | 755 | root:root | 必须有可执行权限,禁止其他用户写权限 |
| /etc/pam.d/login、sshd | 644 | root:root | 无特殊需求禁止修改 |
| /etc/ssh/sshd_config | 600 | root:root | 严格控制权限,禁止其他用户读取/写入 |

三、基础实操

本章节从零开始,全步骤无省略,所有操作均需root权限(普通用户可在命令前加sudo),初学者照着操作即可100%成功,每一步均标注操作目的和注意事项。

前置准备

  1. 已安装openEuler 24.03 LTS SP3操作系统,确保系统可正常启动;

  2. 拥有root权限或sudo权限(普通用户需知道sudo密码);

  3. 可通过本地控制台或SSH工具(如Xshell、Putty)登录系统;

  4. 系统已配置好软件源,可正常使用dnf命令(若无法使用,需先配置系统软件源)。

3.1 实操一:静态motd基础配置(零门槛入门)

目标:自定义登录后的静态欢迎信息,无复杂逻辑,快速上手,适合初学者首次配置motd。

步骤1:切换至root权限

普通用户无法修改motd相关配置,需先切换至root权限,执行以下命令:

普通用户切换root,输入root密码(密码输入时不显示,输入完成按回车)

su - root

或使用sudo获取root权限(输入当前普通用户密码)

sudo -i

步骤2:备份原始配置文件(必做,防止改坏无法恢复)

修改任何系统配置前,备份原始文件是良好习惯,执行以下命令备份/etc/motd:

按日期备份,避免备份文件覆盖(如20241001为备份日期)

cp /etc/motd /etc/motd.bak.$(date +%Y%m%d)

步骤3:查看当前默认motd内容

执行以下命令,查看系统默认的motd内容(部分系统默认为空):

cat /etc/motd

步骤4:编辑/etc/motd文件,写入自定义内容

推荐初学者使用nano编辑器(操作简单,底部有明确提示),执行以下命令打开编辑器:

nano /etc/motd

打开后,写入自定义内容(示例如下,可直接复制修改):

=============================================

欢迎使用 openEuler 24.03 LTS SP3

=============================================

⚠️ 注意:本系统仅限授权人员访问,所有操作将被审计记录

�� 系统维护时间:每月最后1个周日 00:00-06:00

�� 运维联系:admin@example.com

=============================================

编辑完成后,按以下步骤保存退出(严格按照顺序操作):

  1. 按下 Ctrl+O(写入文件,底部会提示"File Name to Write: /etc/motd");

  2. 按下 Enter(确认保存路径,不要修改路径);

  3. 按下 Ctrl+X(退出nano编辑器,返回终端)。

步骤5:验证配置效果

静态motd配置无需重启任何服务,即时生效,验证方法:

  1. 新开一个终端窗口(或关闭当前终端,重新打开);

  2. 重新登录系统(输入账号密码);

  3. 登录后即可看到刚才自定义的motd内容,说明配置成功。

步骤6:异常恢复方案(改坏了直接用)

若修改后motd不显示、显示异常,或想恢复默认配置,执行以下命令,用备份文件还原:

用当天的备份文件还原(若备份日期不是当天,修改后面的日期即可)

cp /etc/motd.bak.$(date +%Y%m%d) /etc/motd

3.2 实操二:SSH配置优化(解决内容重复显示问题)

初学者最常见的踩坑:motd内容登录时显示2次,根源是SSH服务和PAM同时开启了motd打印,本操作一步解决,全程无风险。

步骤1:备份SSH配置文件(必做)

SSH配置文件修改错误会导致SSH服务无法启动,无法远程登录,先执行备份:

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%Y%m%d)

步骤2:修改PrintMotd参数

执行以下命令,用nano编辑器打开SSH配置文件:

nano /etc/ssh/sshd_config

在文件中找到"PrintMotd"相关行(可按Ctrl+W,输入PrintMotd搜索),修改为以下内容:

PrintMotd no

⚠️ 注意:若文件中没有PrintMotd行,直接在文件末尾添加上述内容即可。

步骤3:验证配置语法(必做,防止SSH服务启动失败)

修改完成后,执行以下命令,验证配置文件语法是否正确:

sshd -t

若命令执行后没有任何输出,说明语法正确;若有报错,根据提示修改错误(通常是拼写错误),不要继续下一步。

步骤4:重启SSH服务使配置生效

语法验证正确后,执行以下命令,重启SSH服务:

systemctl restart sshd

⚠️ 注意:若通过SSH远程登录操作,重启SSH服务后会暂时断开连接,重新连接即可。

步骤5:验证效果

重新登录系统(本地或远程),motd内容不会再重复显示,仅显示一次,说明配置成功。

3.3 实操三:动态motd基础配置(展示实时系统信息)

目标:创建动态motd脚本,登录时自动展示系统实时信息(内核版本、CPU负载、内存、磁盘、IP等),实现更实用的motd功能,步骤详细,初学者可直接复制脚本。

步骤1:安装update-motd框架(openEuler默认未预装)

动态motd依赖update-motd框架,执行以下命令安装(需联网):

更新软件源(确保能正常下载安装包)

dnf update -y

安装update-motd框架

dnf install -y update-motd

步骤2:创建动态motd核心目录(安装后未自动创建则执行)

部分情况下,安装update-motd后不会自动创建脚本目录,执行以下命令创建并设置权限:

创建目录

mkdir -p /etc/update-motd.d

设置目录权限(符合安全规则)

chmod 755 /etc/update-motd.d

chown root:root /etc/update-motd.d

步骤3:创建第一个动态脚本:00-header(欢迎头部,最先显示)

该脚本用于显示欢迎信息、主机名、系统版本、当前时间,是motd的头部内容,执行以下命令创建脚本:

nano /etc/update-motd.d/00-header

写入以下内容(可直接复制,无需修改):

#!/bin/bash

00-header: motd欢迎头部脚本

获取主机名

HOSTNAME=$(hostname)

获取系统版本

OS_VERSION=(cat /etc/openEuler-latest \| grep openEulerversion \| awk -F= '{print 2}')

获取当前时间

CURRENT_TIME=$(date +"%Y年%m月%d日 %H:%M:%S %Z")

输出头部内容

echo "============================================="

echo " 欢迎来到 $HOSTNAME 服务器"

echo " 系统版本:openEuler $OS_VERSION"

echo " 当前时间:$CURRENT_TIME"

echo "============================================="

echo ""

保存退出(Ctrl+O → Enter → Ctrl+X),然后给脚本添加可执行权限(必做,否则脚本无法执行):

chmod 755 /etc/update-motd.d/00-header

chown root:root /etc/update-motd.d/00-header

步骤4:创建第二个动态脚本:10-sysinfo(系统实时信息)

该脚本用于显示系统核心实时信息,所有命令均为系统自带,无需额外安装,执行以下命令创建脚本:

nano /etc/update-motd.d/10-sysinfo

写入以下内容(可直接复制):

#!/bin/bash

10-sysinfo: 系统实时信息展示脚本

1. 内核版本

KERNEL=$(uname -r)

2. 1分钟平均负载

LOAD_1=(uptime \| awk -F'load average:' '{print 2}' | awk '{print $1}' | sed 's/,//')

3. 内存使用率

MEM_TOTAL=(free -h \| grep Mem \| awk '{print 2}')

MEM_USED=(free -h \| grep Mem \| awk '{print 3}')

MEM_USAGE=(free \| grep Mem \| awk '{printf "%.1f%%", 3/$2*100}')

4. 根磁盘使用率

DISK_TOTAL=(df -h / \| grep / \| awk '{print 2}')

DISK_USED=(df -h / \| grep / \| awk '{print 3}')

DISK_USAGE=(df -h / \| grep / \| awk '{print 5}')

5. 本机IP地址(排除127.0.0.1)

LOCAL_IP=(ip addr \| grep inet \| grep -v 127.0.0.1 \| grep -v inet6 \| awk '{print 2}' | awk -F/ '{print $1}' | xargs)

6. 当前在线用户数

ONLINE_USERS=$(who | wc -l)

输出系统信息

echo "�� 系统核心信息"

echo "---------------------------------------------"

echo " 内核版本:$KERNEL"

echo " 1分钟负载:$LOAD_1"

echo " 内存使用:MEM_USED / MEM_TOTAL ($MEM_USAGE)"

echo " 磁盘使用:DISK_USED / DISK_TOTAL ($DISK_USAGE)"

echo " 本机IP:$LOCAL_IP"

echo " 在线用户:$ONLINE_USERS 人"

echo "---------------------------------------------"

echo ""

保存退出后,添加可执行权限:

chmod 755 /etc/update-motd.d/10-sysinfo

chown root:root /etc/update-motd.d/10-sysinfo

步骤5:创建第三个动态脚本:99-footer(页脚提示,最后显示)

该脚本用于显示安全提示、运维联系方式,是motd的页脚内容,执行以下命令创建脚本:

nano /etc/update-motd.d/99-footer

写入以下内容(可修改联系方式):

#!/bin/bash

99-footer: motd页脚脚本

echo "⚠️ 安全提示:请规范操作,禁止执行未经授权的命令"

echo "�� 运维紧急联系:13xxxxxxxxx | 工作日 9:00-18:00"

echo "============================================="

echo ""

保存退出后,添加可执行权限:

chmod 755 /etc/update-motd.d/99-footer

chown root:root /etc/update-motd.d/99-footer

步骤6:手动测试脚本是否正常执行(必做,提前排查错误)

脚本创建完成后,先手动测试执行,避免登录时无内容显示,执行以下命令:

按顺序执行所有动态脚本,查看输出结果

run-parts /etc/update-motd.d/

若正常输出头部、系统信息、页脚内容,无任何报错,说明脚本正常;若有报错,根据提示修改对应脚本(通常是拼写错误、权限不足)。

步骤7:验证最终效果

重新登录系统(本地或远程),即可看到动态生成的、带实时系统信息的完整motd内容,每次登录都会更新最新的系统数据(如时间、负载)。

步骤8:禁用/恢复单个动态脚本(无需删除)

若不需要某个动态脚本(如不需要页脚),无需删除,只需去掉可执行权限即可,执行以下命令:

禁用脚本(示例:禁用99-footer页脚脚本)

chmod -x /etc/update-motd.d/99-footer

恢复脚本执行权限(重新启用)

chmod +x /etc/update-motd.d/99-footer

四、高阶用法

适合有基础的初学者进阶,实现更强大的motd能力,所有用法均适配openEuler 24.03 LTS SP3,步骤同样详细,可直接对照操作。

4.1 高阶用法一:带颜色美化的motd(突出重点信息)

利用ANSI转义码,给motd内容添加颜色、加粗、高亮等效果,让关键信息更醒目,提升可读性,以下是详细实操。

常用ANSI格式代码(直接复制使用)

|---------|------------|
| 效果 | 代码 |
| 黑色 | \033[30m |
| 红色(警告用) | \033[31m |
| 绿色(正常用) | \033[32m |
| 黄色(提醒用) | \033[33m |
| 蓝色(标题用) | \033[34m |
| 加粗 | \033[1m |
| 重置所有格式 | \033[0m |

实操示例:美化00-header脚本

修改之前创建的00-header脚本,添加颜色效果,执行以下命令:

nano /etc/update-motd.d/00-header

替换为以下带颜色的内容(可直接复制):

#!/bin/bash

带颜色美化的header脚本

HOSTNAME=$(hostname)

OS_VERSION=(cat /etc/openEuler-latest \| grep openEulerversion \| awk -F= '{print 2}')

CURRENT_TIME=$(date +"%Y年%m月%d日 %H:%M:%S %Z")

颜色定义(方便后续修改)

BLUE="\033[34m"

GREEN="\033[32m"

BOLD="\033[1m"

RESET="\033[0m"

输出带颜色的内容(echo必须加-e参数,解析ANSI转义码)

echo -e "{BLUE}============================================={RESET}"

echo -e "{BOLD}{GREEN} 欢迎来到 HOSTNAME 服务器{RESET}"

echo -e " 系统版本:openEuler $OS_VERSION"

echo -e " 当前时间:$CURRENT_TIME"

echo -e "{BLUE}============================================={RESET}"

echo ""

保存退出后,重新登录系统,即可看到蓝色边框、绿色加粗的标题美化效果,其他脚本可按此方法添加颜色。

4.2 高阶用法二:条件触发式告警motd

实现当系统出现异常(磁盘使用率过高、负载过高、内存不足)时,自动在motd中显示红色告警,正常状态显示绿色提示,无需手动查看系统状态,登录即可知晓。

实操示例:创建20-alert告警脚本

执行以下命令,创建告警脚本(数字20表示在10-sysinfo之后、30-security之前执行):

nano /etc/update-motd.d/20-alert

写入以下内容(可直接复制,阈值可修改):

#!/bin/bash

20-alert: 系统异常告警脚本

颜色定义

RED="\033[31m"

GREEN="\033[32m"

YELLOW="\033[33m"

BOLD="\033[1m"

RESET="\033[0m"

1. 磁盘使用率告警(阈值80%,可修改)

DISK_USAGE_NUM=(df / \| grep / \| awk '{print 5}' | sed 's/%//g')

2. 内存使用率告警(阈值90%,可修改)

MEM_USAGE_NUM=(free \| grep Mem \| awk '{printf "%.0f", 3/$2*100}')

3. 系统负载告警(阈值=CPU核心数,自动获取)

CPU_CORES=$(nproc)

LOAD_1_NUM=(uptime \| awk -F'load average:' '{print 2}' | awk '{print 1}' \| sed 's/,//' \| awk '{printf "%.0f", 1}')

输出告警标题

echo -e "{BOLD}�� 系统状态告警{RESET}"

echo "---------------------------------------------"

磁盘状态判断

if [ $DISK_USAGE_NUM -ge 80 ]; then

echo -e " 根磁盘使用率:{RED}{BOLD}DISK_USAGE_NUM% 【严重告警,超过80%阈值】{RESET}"

else

echo -e " 根磁盘使用率:{GREEN}DISK_USAGE_NUM% 【正常】${RESET}"

fi

内存状态判断

if [ $MEM_USAGE_NUM -ge 90 ]; then

echo -e " 内存使用率:{RED}{BOLD}MEM_USAGE_NUM% 【严重告警,超过90%阈值】{RESET}"

else

echo -e " 内存使用率:{GREEN}MEM_USAGE_NUM% 【正常】${RESET}"

fi

系统负载判断

if [ LOAD_1_NUM -ge CPU_CORES ]; then

echo -e " 系统负载:{RED}{BOLD}LOAD_1_NUM 【严重告警,超过CPU核心数阈值CPU_CORES】${RESET}"

else

echo -e " 系统负载:{GREEN}LOAD_1_NUM 【正常】${RESET}"

fi

echo "---------------------------------------------"

echo ""

保存退出后,添加可执行权限:

chmod 755 /etc/update-motd.d/20-alert

chown root:root /etc/update-motd.d/20-alert

重新登录系统,即可看到系统状态的自动判断和颜色告警,异常情况会自动标红加粗提醒,可根据实际需求修改阈值(如磁盘阈值改为85%)。

4.3 高阶用法三:登录安全审计motd

展示上一次登录信息、失败登录次数,提醒用户是否有异常登录行为,提升系统安全性,适合企业服务器使用。

实操示例:创建30-security安全审计脚本

执行以下命令,创建安全审计脚本:

nano /etc/update-motd.d/30-security

写入以下内容(可直接复制):

#!/bin/bash

30-security: 登录安全审计脚本

颜色定义

RED="\033[31m"

GREEN="\033[32m"

YELLOW="\033[33m"

BOLD="\033[1m"

RESET="\033[0m"

获取当前登录用户

CURRENT_USER=$USER

上一次成功登录信息

LAST_LOGIN=(last -n 1 CURRENT_USER | grep -v wtmp | head -n 1)

失败登录次数(近100条记录)

FAILED_LOGIN=(lastb -n 100 CURRENT_USER 2>/dev/null | wc -l)

输出安全信息

echo -e "{BOLD}�� 登录安全审计{RESET}"

echo "---------------------------------------------"

echo " 当前登录用户:$CURRENT_USER"

echo " 上一次成功登录:$LAST_LOGIN"

失败登录判断

if [ $FAILED_LOGIN -gt 0 ]; then

echo -e " 历史失败登录次数:{RED}{BOLD}FAILED_LOGIN 次【请注意账号安全】{RESET}"

else

echo -e " 历史失败登录次数:{GREEN}0 次【正常】{RESET}"

fi

echo "---------------------------------------------"

echo ""

保存退出后,添加可执行权限:

chmod 755 /etc/update-motd.d/30-security

chown root:root /etc/update-motd.d/30-security

重新登录即可看到登录安全信息,若有失败登录会自动标红提醒,可及时排查账号是否被盗用。

4.4 高阶用法四:多用户差异化motd

实现不同用户登录,显示不同的motd内容:root用户显示完整运维信息,普通用户仅显示欢迎和使用规范,避免普通用户看到敏感运维信息。

实操示例:修改00-header脚本实现差异化显示

执行以下命令,修改之前的00-header脚本:

nano /etc/update-motd.d/00-header

替换为以下内容(可直接复制):

#!/bin/bash

多用户差异化header脚本

HOSTNAME=$(hostname)

OS_VERSION=(cat /etc/openEuler-latest \| grep openEulerversion \| awk -F= '{print 2}')

CURRENT_TIME=$(date +"%Y年%m月%d日 %H:%M:%S %Z")

CURRENT_USER=$USER

颜色定义

BLUE="\033[34m"

GREEN="\033[32m"

RED="\033[31m"

BOLD="\033[1m"

RESET="\033[0m"

root用户专属内容(显示警告和完整信息)

if [ $CURRENT_USER = "root" ]; then

echo -e "{BLUE}============================================={RESET}"

echo -e "{BOLD}{RED} 警告:您当前使用ROOT超级用户登录${RESET}"

echo -e "{BOLD}{RED} 请谨慎操作,所有操作将直接影响系统${RESET}"

echo -e " 主机名:$HOSTNAME"

echo -e " 系统版本:openEuler $OS_VERSION"

echo -e " 当前时间:$CURRENT_TIME"

echo -e "{BLUE}============================================={RESET}"

echo ""

普通用户内容(仅显示欢迎和使用规范)

else

echo -e "{BLUE}============================================={RESET}"

echo -e "{BOLD}{GREEN} 欢迎使用 HOSTNAME 服务器{RESET}"

echo -e " 系统版本:openEuler $OS_VERSION"

echo -e " 当前时间:$CURRENT_TIME"

echo -e "{BLUE}============================================={RESET}"

echo ""

echo "�� 使用规范:"

echo " 1. 禁止执行未经运维授权的命令"

echo " 2. 禁止泄露账号密码给无关人员"

echo " 3. 禁止在系统中存储违规数据"

echo "---------------------------------------------"

echo ""

fi

保存退出,分别用 root 用户和普通用户登录,即可看到不同的 motd 内容。


五、拓展建议

5.1 安全最佳实践(重中之重,初学者必看)

  1. 严格控制权限:所有 motd 相关的配置文件、脚本,必须保证所有者为 root:root,禁止给其他用户写权限。若其他用户可修改 motd 脚本,会导致登录时以 root 权限执行恶意代码,造成严重的提权安全风险;
  2. 禁止敏感信息泄露:不要在 motd 中写入系统内部 IP、运维接口、账号密码、业务系统地址等敏感信息,防止登录界面泄露核心数据;
  3. 禁止高风险命令:不要在 motd 脚本中执行 rm、chmod -R、systemctl stop 关键服务等高风险命令,避免脚本执行异常导致系统故障;
  4. 脚本容错处理 :进阶脚本建议添加set -e参数,或对关键命令做异常判断,避免脚本执行失败导致登录卡顿;
  5. 适配 SELinux :openEuler 默认启用 SELinux,若脚本执行异常,可通过journalctl -xe查看 SELinux 拦截日志,不要直接关闭 SELinux,而是通过chcon调整上下文权限。

5.2 性能优化建议

  1. 控制脚本执行耗时 :motd 脚本在用户登录时同步执行,若脚本中有耗时操作(大文件扫描、无超时的网络请求),会导致用户登录卡顿。建议:
    • 网络请求添加超时时间,如curl --connect-timeout 2
    • 避免执行复杂的磁盘遍历、日志分析命令;
    • 单脚本执行时间控制在 1 秒内完成。
  2. 精简内容:motd 内容不宜过长,避免刷屏,只展示核心的公告、告警、关键系统信息;
  3. 禁用无用脚本:不需要的动态脚本,直接去掉可执行权限,减少登录时的执行开销。

5.3 常见问题排错指南(初学者踩坑必看)

常见问题 核心原因 排查解决步骤
配置了 motd,登录不显示 1. SSH 的 PrintMotd 和 PAM 同时关闭;2. 脚本无执行权限;3. 脚本语法错误;4. PAM 配置被修改 1. 检查 /etc/ssh/sshd_config 的 PrintMotd,建议设为 no;2. 检查 /etc/pam.d/sshd 和 login 中是否有 pam_motd.so 配置;3. 给脚本添加 755 权限,确认所有者为 root;4. 手动执行 run-parts /etc/update-motd.d/ 看是否有报错
motd 内容重复显示两次 SSH 服务和 PAM 同时开启了 motd 打印 编辑 /etc/ssh/sshd_config,设置 PrintMotd no,重启 sshd 服务即可
动态脚本不执行,无内容输出 1. 脚本无执行权限;2. 脚本无 shebang 行;3. 脚本有语法错误;4. 权限不符合安全要求 1. 执行 chmod 755 给脚本添加执行权限;2. 检查脚本开头是否有 #!/bin/bash;3. 手动执行 bash -x 脚本名,调试语法错误;4. 确认脚本所有者为 root:root,其他用户无写权限
登录时卡顿,很久才进入命令行 motd 脚本中有耗时操作,或网络请求超时 1. 检查脚本中的 curl、wget 等网络命令,添加超时参数;2. 去掉复杂的遍历、查询命令;3. 逐个禁用脚本,定位卡顿的脚本
脚本手动执行正常,登录时不显示 1. 脚本中使用了相对路径,登录时环境变量不一致;2. 命令不存在,登录时 PATH 环境变量不全 1. 脚本中所有命令使用绝对路径,如 /usr/bin/df;2. 脚本开头添加 PATH 环境变量声明:export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

5.4 进阶学习方向

  1. Shell 脚本进阶:学习 Shell 脚本编写,优化 motd 脚本,实现对接监控系统、自动拉取企业公告、工单提醒等复杂逻辑;
  2. PAM 模块深入学习:了解 PAM 认证机制,掌握 pam_motd 模块的高级参数,实现更灵活的 motd 显示控制;
  3. 批量运维管理:结合 Ansible 等自动化运维工具,批量管理数百台 openEuler 服务器的 motd 配置,统一推送公告、更新脚本;
  4. 整合监控系统:对接 Prometheus、Zabbix 等监控系统,将监控告警信息实时推送到 motd 中,登录即可看到业务系统告警;
  5. 合规审计适配:根据等保 2.0、行业合规要求,在 motd 中添加授权声明、审计提示、合规规范等内容,满足监管要求。
相关推荐
皮卡蛋炒饭.2 小时前
Ext系列文件系统
运维
齐齐大魔王2 小时前
linux-核心工具
linux·运维·服务器
醇氧2 小时前
Linux 系统的启动过程
linux·运维·服务器
IMPYLH2 小时前
Linux 的 dircolors 命令
linux·运维·服务器·数据库
齐齐大魔王2 小时前
linux-基础操作
linux·运维·服务器
一个有温度的技术博主2 小时前
网安实验系列二:服务器信息收集
运维·服务器
bwz999@88.com3 小时前
ubuntu24.04更换国内源
linux·运维·服务器
腾科IT教育3 小时前
红帽认证考试全国考点信息新发布,便捷参考
运维·服务器·红帽认证·linux考试·rhcsa考试
历程里程碑3 小时前
Protobuf 环境搭建:Windows 与 Linux 系统安装教程
linux·运维·数据结构·windows·线性代数·算法·矩阵