/ etc / motd命名管道时不显示?


8

运行Gentoo 3.4.0

最近听说过/ etc / motd文件后,我试图让它显示随机的Cowsay财富。我写了一些随机的bash脚本充当守护程序,将/ etc / motd作为命名管道提供,如在某些论坛上看到的那样。

我认为该脚本没有任何问题,因为对管道进行管理可以正常工作,但MOTD不会在登录时显示(使用常规文件有效)!

fira@nyan ~ % cat /etc/motd
 _______________________________________ 
/ We didn't put in ^^ because then we'd \
| have to keep telling people what it   |
| means, and then we'd have to keep     |
| telling them why it doesn't short     |
| circuit. :-/                          |
|                                       |
| -- Larry Wall in                      |
\ <199707300650.XAA05515@wall.org>      /
 --------------------------------------- 
   \
    \
        .--.
       |o_o |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/

我缺少明显的东西吗?

如果不使用.hushlogin之类的东西,或尝试使用多个shell,则管道可读a + r。

Answers:


7

您不会错过任何明显的东西。我挖掘pam_motd模块源代码以弄清楚这一点。

诀窍是,pam_motd确实有以下/etc/motd

  1. 检查文件的大小。
  2. 分配该大小的缓冲区。
  3. 将整个文件读入缓冲区。
  4. 通过使用任何输出方法输出缓冲区。(毕竟,PAM是模块化的;不能假定它是终端。)

由于管道没有文件大小,因此在步骤1中失败。

编辑:为什么PAM首先关注尺寸?我想这是为了防止拒绝服务,无论是有意还是无意。当PAM检查文件大小时,如果文件大于64 KB,它也拒绝输出motd。我想如果有人设法将DVD电影文件通过管道传送到/ etc / motd中,那么试图登录系统的人都会感到非常难过-更不用说可能占用多少内存了。


好吧,最后,我只是用自定义补丁重建了PAM,因此如果它是一个管道,它将可以正确读取管道=> pastebin.com/bMpbLskH
Fira

开源真是太好了。^ _ ^我添加了有关PAM为什么检查文件大小的想法,我认为您可能会从补丁程序中的“需要更多检查”注释中怀疑这一点。我猜最简单的事情是在64k之后停止读取管道。
詹德(Jander)2012年

2

链接将引导您完成所有基本步骤


1
真好 您也应该直接在答案中添加步骤,因此,如果将来链接中断,您的答案仍然有用。
詹德(Jander)2012年

因此,禁用MotD,并手动显示一些内容吗?为什么不这样做,但是我可以独立于bash以全局方式进行此操作吗?我使用ZSH所以在/ etc /配置文件的内容不被执行
菲拉
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.