运行 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
:
- 检查文件的大小。
- 分配该大小的缓冲区。
- 将整个文件读入缓冲区。
- 通过使用的任何输出方法输出缓冲区。 (毕竟 PAM 是模块化的;不能假设它是一个终端。)
由于管道没有文件大小,因此在步骤 1 中失败。
编辑:为什么 PAM 首先关心尺寸?我想这是为了防止有意或无意的拒绝服务。当 PAM 检查文件大小时,如果文件大于 64 KB,它也会拒绝输出 motd。我想,例如,如果有人设法将 DVD 电影文件通过管道传输到 /etc/motd 中,那么尝试登录系统的人都会感到非常难过——更不用说可能需要多少内存了。
答案2
这关联将引导您完成所有必要步骤