Translation(s): English - Français - Italiano
Contents
/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, CVE-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
base-files praticamente si occupava di installare motd all'avvio ma non lo sostituiva in occasione degli aggiornamenti (vedere /usr/share/doc/base-files/README)
le pagine di manuale (manpage) spiegavano il funzionamento di motd e motd.tail
