Translation(s): English - Français - Italiano


/etc/motd nelle versioni attuali (8+) di Debian

L'effettivo motd viene generato e stampato da pam_motd, vedere la sua pagina di manuale. pam_motd viene chiamato due volte da /etc/pam.d/login e /etc/pam.d/sshd: una volta per stampare i contenuti di /run/motd.dynamic e una volta per stampare i contenuti statici (e modificabili dall'utente) di /etc/motd e /etc/motd.d.

/run/motd.dynamic viene aggiornato da pam_motd eseguendo tutti i file eseguibili in /etc/update-motd.d (attraverso run-parts, vedere anche il bug Debian n.931185). Se si desiderano informazioni dinamiche ulteriori nel proprio motd, i propri script vanno messi in /etc/update-motd.d. Questa è una patch specifica di Debian e Ubuntu che può non essere presente in altre versioni di distribuzioni GNU/Linux e non è prevista nella versione di PAM originale. Ubuntu ha una pagina di manuale per un eseguibile update-motd che non esiste più che descrive ciò che pam_motd fa nelle versioni attuali di Debian.

Questo codice ha avuto problemi di sicurezza in passato (CVE-2010-0832, CVS-2011-3628). Nessuna versione di Debian attualmente con supporto ufficiale è affetta da tali problemi.

A titolo informativo, questo codice C è attualmente usato per eseguire /etc/update-motd.d

    if (do_update && (stat("/etc/update-motd.d", &st) == 0)
        && S_ISDIR(st.st_mode))
    {
       mode_t old_mask = umask(0022);
       if (!system("/usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d > /run/motd.dynamic.new"))
           rename("/run/motd.dynamic.new", "/run/motd.dynamic");
       umask(old_mask);
    }

sshd

sshd ha la propria opzione "?PrintMotd" in /etc/ssh/sshd_config. Il suo valore predefinito è "yes", ma è impostata a "no" nella configurazione predefinita in Debian dato che altrimenti si otterrebbe il motd due volte: una volta stampato da pam_motd, la seconda da sshd stesso. Notare che il motd non viene mostrato in connessioni ssh con multiplexing, solo nella "prima" sessione che fa anche l'autenticazione.

Cosa fanno gli altri

Ubuntu

A partire da Ubuntu Intrepid Ibex (2008.10), Ubuntu gestisce motd nello stesso modo utilizzato da Debian a partire da Debian 8 (Jessie, EOL 2018). È perciò fondamentalmente compatibile

In modo predefinito Ubuntu fornisce un insieme di script che aggiungono (per esempio) il numero di pacchetti da aggiornare.

Gentoo

Gentoo non visualizza il file motd in modo predefinito, ma ciò può essere abilitato in login.defs (vedere questa pagina del wiki di Gentoo).

Arch

Secondo questa pagina del wiki di Arch, Arch non sembra fare nulla di speciale per /etc/motd a parte visualizzarlo all'avvio.

CentOS

Al giugno 2019: CentOS installa pam_motd, ma non lo usa. sshd è nella configurazione predefinita e pertanto stampa il motd automaticamente al login.

Fedora

Al giugno 2019: usa pam_motd.

FreeBSD

Anche in FreeBSD il file motd viene generato attraverso uno script di avvio, che preserva le modifiche cambiando solo la riga che corrisponde (all'incirca) all'uname che viene aggiornata ai riavvii. Le righe magiche sono:

T=`mktemp -t motd`
uname -v | sed -e 's,^\([^#]*\) #\(.* [1-2][0-9][0-9][0-9]\).*/\([^\]*\) $,\1 (\3) #\2,' > ${T}
awk '{if (NR == 1) {if ($1 == "FreeBSD") {next} else {print "\n"$0}} else {print}}' < /etc/motd >> ${T}

Informazioni storiche: /etc/motd in Debian 6 (Squeeze, EOL 2014) e antecedenti

Debian aveva un modo particolare di gestire /etc/motd. Il "messaggio del giorno" (motd) veniva aggiornato ad ogni avvio, con uno script di avvio (/etc/init.d/bootmisc.sh in lenny e precedenti, /etc/init.d/bootlogs in squeeze e successive), che fondamentalmente eseguiva quanto segue:

uname -snrvm > /var/run/motd
[ -f /etc/motd.tail ] && cat /etc/motd.tail >> /var/run/motd

Dato che in Debian /etc/motd era un collegamento simbolico a /var/run/motd, questo funzionava.

Poi venne introdotto il metodo basato su pam_motd e, per un breve periodo, la valutazione di /etc/update-motd.d veniva fatta dal pacchetto update-motd ogni 10 minuti, invece che a richiesta attraverso pam_motd.

Come aggiornare il proprio /etc/motd

Dato che /etc/motd in pratica veniva sovrascritto ad ogni riavvio, era necessario aggiornare invece /etc/motd.tail e poi o riavviare (!!) oppure poi eseguire i comandi indicati sopra. Esisteva una segnalazione di bug (437176) per fornire un comando più semplice per permettere di aggiornare solamente /etc/motd.tail.

Come evitare che il proprio /etc/motd venga sovrascritto

rm /etc/motd
cat > /etc/motd <<EOF
Questo è il mio messaggio del giorno!
EOF

In questo modo, /etc/motd non era più un collegamento simbolico a quello aggiornato e veniva quindi per sempre lasciato così come era. Il rovescio della medaglia era che il motd non mostrava la versione del kernel più recente.

Approccio "Non toccare il mio motd" in stile "vecchia scuola"

Questo approccio, simile al precedente, garantiva inoltre di poter visualizzare informazioni dinamiche:

cat > /etc/profile.d/uname <<EOF
#!/bin/sh
uname -snrvm
EOF
rm /etc/motd
cat > /etc/motd <<EOF
Problemi noti
============

 * kerkuffle è noto per non riavviarsi in modo corretto al riavvio del sistema, per riavviarlo usare il comando
   service kerkuffle restart

Chi era responsabile di /etc/motd?

Ecco un elenco di pacchetti che se ne occupavano:

base-files: /usr/share/base-files/motd
base-files: /usr/share/base-files/motd.md5sums
manpages: /usr/share/man/man5/motd.5.gz
manpages: /usr/share/man/man5/motd.tail.5.gz
libpam-modules: /lib/x86_64-linux-gnu/security/pam_motd.so
initscripts: /etc/init.d/bootlogs

Riferimenti


CategoryCommandLineInterface