/ etc / motd tidak ditampilkan ketika pipa bernama?


8

Menjalankan Gentoo 3.4.0

Setelah baru-baru ini mendengar tentang file / etc / motd, saya mencoba untuk membuatnya menampilkan keberuntungan cowsay acak. Saya menulis beberapa bash script acak untuk bertindak sebagai daemon, memberi makan / etc / motd sebagai pipa bernama, seperti yang terlihat di beberapa forum.

Saya tidak berpikir ada masalah dengan skrip karena cating pipa berfungsi dengan baik, tetapi MOTD tidak akan ditampilkan saat login (menggunakan file biasa berfungsi)!

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 |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/

Apakah saya kehilangan sesuatu yang jelas?

Tidak menggunakan sesuatu seperti .hushlogin atau yang lainnya, mencoba menggunakan beberapa shell, pipa dapat dibaca + r.

Jawaban:


7

Anda tidak melewatkan sesuatu yang jelas. Saya menggali sumber pam_motdmodul untuk mencari tahu yang ini.

Kuncinya adalah pam_motdmelakukan hal berikut dengan /etc/motd:

  1. Periksa ukuran file.
  2. Alokasikan buffer ukuran itu.
  3. Baca seluruh file ke dalam buffer.
  4. Keluarkan buffer melalui metode output apa pun yang digunakan. (Bagaimanapun, PAM bersifat modular; tidak dapat menganggap itu terminal.)

Karena pipa tidak memiliki ukuran file, ini gagal pada langkah 1.

EDIT : Mengapa PAM peduli tentang ukuran di tempat pertama? Saya membayangkan itu untuk mencegah penolakan layanan, baik disengaja atau tidak disengaja. Ketika PAM memeriksa ukuran file, itu juga menolak untuk mengeluarkan motd jika file lebih besar dari 64 kbytes. Saya membayangkan siapa pun yang mencoba masuk ke sistem akan sangat sedih jika seseorang berhasil menyalurkan file film DVD ke / etc / motd, misalnya - belum lagi berapa banyak memori yang mungkin diperlukan.


Nah, pada akhirnya saya baru saja membangun kembali PAM dengan tambalan khusus sehingga akan membaca pipa dengan benar jika itu salah satu => pastebin.com/bMpbLskH
Fira

Open source memang luar biasa. ^ _ ^ Saya menambahkan pemikiran saya tentang mengapa PAM memeriksa file, yang saya pikir Anda mungkin curigai dari catatan "perlu pemeriksaan lebih lanjut" di tambalan Anda. Saya kira hal yang paling mudah untuk dilakukan adalah berhenti membaca pipa setelah 64k.
Jander

2

Tautan ini akan memandu Anda melalui semua langkah penting


1
Bagus. Anda harus menambahkan langkah-langkah secara langsung dalam jawaban juga, jadi jika tautan tersebut terputus di masa depan, jawaban Anda akan tetap berguna.
Jander

Jadi, nonaktifkan MotD, dan tampilkan sesuatu secara manual? Kenapa tidak, tetapi bisakah saya melakukan ini secara global, independen dari bash? Saya menggunakan ZSH sehingga isi dari / etc / profiles tidak dieksekusi
Fira
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.