MOTD wird sehr selten aktualisiert

7

Ich verstehe, dass pam_motddas MOTD beim Anmelden aktualisiert wird, aber manchmal wird das MOTD tagelang nicht aktualisiert und ich bin verwirrt, was der Grund sein könnte. Ich möchte dem MOTD Hinzufügen uptimeund Ausgeben hinzufügen und whosie ordnungsgemäß aus /etc/update-motd.d/Skripten aufrufen , aber es scheint ziemlich sinnlos, wenn Benutzern veraltete Informationen angezeigt werden.

Von der update-motdManpage:

Executable  scripts  in  /etc/update-motd.d/* are executed by pam_motd(8) as
the root user at each login, and this information is concatenated in /var/run/motd.
The order of script execution is determined by the run-parts(8) --lsbsysinit option
(basically alphabetical order, with a few caveats).

Nach meinem Verständnis sollte das MOTD bei jedem Login aktualisiert werden. Aber es ist nicht so. Und ich finde kein Skript, das die MOTD manuell aktualisiert. Ich könnte dem eine run-partsZeile hinzufügen cron, aber ich denke nicht, dass dies der richtige Weg ist, um dieses Problem zu lösen, da es sich wie ein Hack oder eine Problemumgehung anfühlt.

Meine letzte Hoffnung war es, so zu setzen /etc/pam.d/login:

# Prints the message of the day upon succesful login.
# (Replaces the `MOTD_FILE' option in login.defs)
# This includes a dynamically generated part from /run/motd.dynamic
# and a static (admin-editable) part from /etc/motd.
#session    optional   pam_motd.so  motd=/run/motd.dynamic noupdate
session    optional   pam_motd.so  motd=/run/motd.dynamic
session    optional   pam_motd.so

Ich dachte, das Entfernen noupdatewürde das Problem lösen, aber das tut es nicht.

MegaBrutal
quelle
Versuchen Sie, die letzte Zeile in /etc/pam.d/login wie folgt zu ändern: session optional pam_motd.so noupdateWie im alten Motd vorgeschlagen, wird beim Login angezeigt
Lety
@Letizia Ich habe bereits sichergestellt, dass dies noupdatenur für die statische Version in /etc/pam.d/loginund in /etc/pam.d/sshdund nicht für die dynamische Version angegeben wurde. Nach einigen weiteren Tests stellte ich fest, dass das Erstellen eines neuen Skripts in /etc/update-motd.d/die MOTD erst nach einem Neustart beeinflusst. Das Umschalten des Ausführungsbits für ein vorhandenes Skript oder das Verschieben aus dem Verzeichnis in das Verzeichnis wirkt sich jedoch ohne Neustart auf die MOTD aus.
TheSchwa
1
Ich habe den Quellcode von update-motd und er läuft run-parts --lsbsysinit /etc/update-motd.d. Dies könnte manuell ausgeführt werden und sollte motd aktualisieren. Ich habe den Quellcode von erhalten pam librariesund festgestellt, dass pam_motddies nichts bewirkt, wenn der Wert des Flag-Parameters PAM_SILENT ist. Leider habe ich nicht gefunden, woher dieser Parameter stammt. Beachten Sie, dass update-motdes sich um ein einfaches Shell-Skript handelt, das jedoch über -eOptionen verfügt. Daher kann es sein, dass während der Anmeldesitzung während des Startvorgangs ein Fehler auftritt. Ich habe auch run-partQuelle, und ich sehe, dass das Umschalten des Ausführungsbits das Aktivieren / Deaktivieren von Run-Parts für diese Skripte ausführt.
Lety
1
Aufgrund des Vorhandenseins von --lsbsysinit sollten Sie den Namen der Datei /etc/update-motd.d überprüfen. Entspricht dieser Name diesen Optionen? Sie könnten das ausführen run-parts --test --lsbsysinit /etc/update-motd.d, um die Namen der Skripte zu drucken, die ausgeführt werden würden, aber sie nicht tatsächlich ausführen.
Lety
1
@ Letizia Ich konnte das Problem seit meinem letzten Kommentar nicht reproduzieren. Obwohl --lsbsysinitich mich für die Erwähnung der Option bedanke, da ich nicht wusste, dass Großbuchstaben nicht zulässig sind, und mich jetzt selbst überlege, ob dies mein Problem war. Wenn es mir gelingt, das Problem zu reproduzieren, werde ich auf jeden Fall prüfen, ob das Skript in der Ausgabe des von Ihnen erwähnten Befehls enthalten ist. Wenn ich das Problem nicht reproduzieren kann, bevor das Kopfgeld endet, wenn Sie eine Antwort veröffentlichen, in der die --lsbsysinitOption erläutert wird, werde ich Ihnen das Kopfgeld gewähren.
TheSchwa

Antworten:

4

Ich bin kürzlich auf das gleiche Problem gestoßen. Sie müssen es bearbeiten /etc/pam.d/sshd, um das Noupdate dort ebenfalls zu entfernen oder zu kommentieren.

chrishas35
quelle
1
Können Sie bitte weitere Einzelheiten zu der zu suchenden Zeile hinzufügen?
Kaz Wolfe
3

update-motd ist ein einfaches Skript, das ausgeführt wird:

   run-parts --lsbsysinit /etc/update-motd.d 2>/dev/null

laut Run-Parts- Handbuch:

   If  the  --lsbsysinit  option  is given, then the names must not end in
   .dpkg-old  or .dpkg-dist or .dpkg-new or .dpkg-tmp, and must belong  to
   one  or more of the following namespaces: the LANANA-assigned namespace
   (^[a-z0-9]+$);   the   LSB   hierarchical   and   reserved   namespaces
   (^_?([a-z0-9_.]+-)+[a-z0-9]+$);  and  the  Debian cron script namespace
   (^[a-zA-Z0-9_-]+$).

update-motdVersuchen Sie Folgendes, um zu überprüfen, ob das Problem mit dem Dateinamen zusammenhängt:

   run-parts --test --lsbsysinit /etc/update-motd.d

Dieser Befehl gibt die Namen der Skripte aus, die ausgeführt werden sollen, führt sie jedoch nicht aus.

Lety
quelle