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

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

运行 Gentoo 3.4.0

最近听说了 /etc/motd 文件,我尝试让它显示随机的牛赛财富。我编写了一些随机的 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                      |
\ <[email protected]>      /
 --------------------------------------- 
   \
    \
        .--.
       |o_o |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/

我错过了一些明显的东西吗?

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

答案1

你没有遗漏任何明显的东西。我深入研究了pam_motd模块来源弄清楚这个问题。

诀窍是pam_motd执行以下操作/etc/motd

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

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

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

答案2

关联将引导您完成所有必要步骤

相关内容