Linux motd 详解

motd 答疑解惑以及配置指南。


motd 答疑

  • motd 能用来干什么
    • 一般用来打印提示信息,可以结合使用 crontab 计划任务,将预先准备好的脚本,如系统监控,异常信息收集通过 crontab 在后台定期执行,并把收集到的信息重定向写到 /etc/motd 文件中。在用户登录系统时,就可以显示这些系统监控、异常处理信息了,另外还可利用 motd 发邮件给管理员哪些用户登录了系统。
    • 注意:motd 会将所有系统信息与 Canonical(Ubuntu 母公司) 共享
  • motd 是如何生效的
    • UNIX/Linux 系统管理员通常通过在文件 /etc/motd 中维护文本来向控制台和远程用户传达重要信息,传统上,此文件是静态文本,ubuntu 默认没有此文件,需要自己创建并往里面添加内容也能显示自定义的 motd
    • 在Ubuntu中,提供了一组脚本在目录 /etc/update-motd.d/ 中,在用户登录时,按照脚本名字前缀的数字(00-99,数字越小越优先执行)顺序执行,并将这些脚本的输出保存到文件 /run/motd.dynamic 中,最终用户成功登录后,在登录的屏幕界面中打印出来。
    • 实际上是通过 /etc/pam.d/login 和 /etc/pam.d/sshd 来输出信息的
  • motd 如何保存信息的
    • 通过执行 /etc/update-motd.d/ 中的各种脚本,然后将脚本输出保存在 /run/motd.dynamic
    • 通过 /etc/pam.d/login 和 /etc/pam.d/sshd 来读取并输出保存在 /run/motd.dynamic 中的内容
  • /etc/update-motd.d/ 下的脚本有什么作用
    • 00-header打印欢迎信息
    • 10-help-text打印 Ubuntu 帮助信息
    • 50-motd-news(重点查看):Ubuntu 更新信息及广告信息,可通过设置 /etc/default/motd-news 里的 ENABLED=0 关闭,在 ubuntu20.04.4 以上版本中没有/etc/default/motd-news 文件,可直接在 50-motd-news31 行 添加 ENABLED=0,此脚本关联着 motd-news.service 以及 motd-news.timer 可通过 systemctl list-unit-files|grep motd 查看
    • 50-landscape-sysinfo显示系统使用情况
    • 91-release-upgrade显示系统更新
    • 92-unattended-upgrades显示未更新的软件包个数
    • 98-reboot-required系统重启需要的服务
  • 如何查看运行了哪些 motd 脚本
    • /etc/update-motd.d/ 下有执行权限的脚本代表已经被 motd 运行
  • 如何自定义 motd?
    • 在大多数 Linux 分发版中,可以直接修改 /etc/motd 文件来定制任何想要的提示信息,修改方法是将需要打印的提示消息文件粘贴到该文件中即可(一些可执行命令或脚本在文件中仅仅被当作是普通字符/文本)。/etc/motd 内的文本消息是固定不变,除非我们手动修改它。因此,在/etc/motd 中定制的消息是静态 MOTD。
    • 但在 ubuntu 中需要将你的脚本复制到 /etc/update-motd.d/ 目录中,如我这里添加了:99-info 的脚本
    • 文件名必须是两位数,后跟连字符,然后是脚本的通用名称或参考。文件不应包含扩展名。该文件可以是您的系统能够运行的任何可执行类型
    • 开启自定义的 motd : chmod +x 99-info,系统会扫描 /etc/update-motd.d/ 目录并启用已经赋权的脚本
  • 禁用 Motd 脚本
    • 方法一(禁用所有登录信息显示):修改 /etc/pam.d/login 和 /etc/pam.d/sshd 配置文件,注释下面两行参数
      •   # session    optional   pam_motd.so motd=/run/motd.dynamic
          # session    optional   pam_motd.so noupdate
        
    • 方法二(禁用所有登录信息显示):设置目录权限禁止调用 Update MOTD 脚本文件,简单粗暴
      • sudo chmod -x /etc/update-motd.d/*
    • 禁用单个脚本,如:sudo chmod -x /etc/update-motd.d/00-header
    • 禁止显示最后登录信息:sudo vim /etc/ssh/sshd_config 增加配置信息 PrintLastLog no 重启 ssh 服务 sudo /etc/init.d/ssh restart
    • 为某个用户禁用 MOTD:要为某个用户禁用 MOTD,请将一个空白文件添加到用户的主目录。命名文件 .hushlogin。通过运行创建它:touch $HOME/.hushlogin 然后重新登录就看不到 motd 消息了。
  • 非 Debian/Ubuntu 如何使用 motd
    • 在 RHEL/CentOS 中不可能实现像在 Debian/Ubuntu 中这样的功能,因为 RHEL/CentOS 并没有提供与之相关的任何脚本。我们可以通过环境变量文件,如 /etc/profile、/etc/bashrc 等,将需要执行的命令或脚本添加到这些文件末尾,这样当每次用户登陆时,系统就会读取这些文件,执行文件里定义好的脚本。除此之外,也可以结合使用 crontab 计划任务,将预先准备好的脚本,如系统监控,异常信息收集通过 crontab 在后台定期执行,并把收集到的信息重定向写到 /etc/motd 文件中。在用户登录系统时,就可以显示这些系统监控、异常处理信息了。
    • 开启 SSH 服务打印 MOTD 消息,配置文件 /etc/ssh/sshd_config,确认是否如下配置 PrintMotd yes
    • 修改 /etc/motd 文件,将提示消息粘贴到该文件中
      •   ***************************************************
          * 注意: 这是一台重要的生产服务器,请谨慎操作!!  *
          ***************************************************
        
  • 参考
  • 默认 motd 是什么样子的?
    • Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-113-generic x86_64)
      
      * Documentation:  https://help.ubuntu.com
      * Management:     https://landscape.canonical.com
      * Support:        https://ubuntu.com/advantage
      
        System information as of Sat Jun 11 18:22:21 CST 2022
      
        System load:  0.0                Processes:             109
        Usage of /:   10.7% of 39.12GB   Users logged in:       0
        Memory usage: 23%                IPv4 address for eth0: 192.168.121.153
        Swap usage:   0%                 IPv4 address for eth1: 192.168.121.108
      
      0 updates can be applied immediately.
      
      
      *** System restart required ***
      Last login: Sat Jun 11 17:02:57 2022 from 192.168.121.1
      
上次更新:
贡献者: iEchoxu