Ich verstehe, dass pam_motd
das 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 uptime
und Ausgeben hinzufügen und who
sie ordnungsgemäß aus /etc/update-motd.d/
Skripten aufrufen , aber es scheint ziemlich sinnlos, wenn Benutzern veraltete Informationen angezeigt werden.
Von der update-motd
Manpage:
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-parts
Zeile 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 noupdate
würde das Problem lösen, aber das tut es nicht.
session optional pam_motd.so noupdate
Wie im alten Motd vorgeschlagen, wird beim Login angezeigtnoupdate
nur für die statische Version in/etc/pam.d/login
und in/etc/pam.d/sshd
und 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.run-parts --lsbsysinit /etc/update-motd.d
. Dies könnte manuell ausgeführt werden und sollte motd aktualisieren. Ich habe den Quellcode von erhaltenpam libraries
und festgestellt, dasspam_motd
dies nichts bewirkt, wenn der Wert des Flag-Parameters PAM_SILENT ist. Leider habe ich nicht gefunden, woher dieser Parameter stammt. Beachten Sie, dassupdate-motd
es sich um ein einfaches Shell-Skript handelt, das jedoch über-e
Optionen verfügt. Daher kann es sein, dass während der Anmeldesitzung während des Startvorgangs ein Fehler auftritt. Ich habe auchrun-part
Quelle, und ich sehe, dass das Umschalten des Ausführungsbits das Aktivieren / Deaktivieren von Run-Parts für diese Skripte ausführt.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.--lsbsysinit
ich 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--lsbsysinit
Option erläutert wird, werde ich Ihnen das Kopfgeld gewähren.Antworten:
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.quelle
update-motd
ist ein einfaches Skript, das ausgeführt wird:laut Run-Parts- Handbuch:
update-motd
Versuchen Sie Folgendes, um zu überprüfen, ob das Problem mit dem Dateinamen zusammenhängt:Dieser Befehl gibt die Namen der Skripte aus, die ausgeführt werden sollen, führt sie jedoch nicht aus.
quelle