GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:capisci l'accesso a Linux?

Da quanto ho capito, il kernel Linux si registra su /proc/kmsg file (per lo più messaggi relativi all'hardware) e /dev/log PRESA? Da qualsiasi altra parte? Anche altre applicazioni sono in grado di inviare messaggi a /proc/kmsg o /dev/log ? Ultimo ma non meno importante, ho ragione sul fatto che è il demone syslog(rsyslog , syslog-ng ) che controlla i messaggi da queste due posizioni e poi li distribuisce a vari file come /var/log/messages o /var/log/kern.log o anche server syslog centrale?

Risposta accettata:

Semplificato, funziona più o meno così:

Il kernel registra i messaggi (usando printk() funzione) in un buffer ad anello nello spazio del kernel. Questi messaggi sono resi disponibili alle applicazioni dello spazio utente in due modi:tramite il /proc/kmsg file (a condizione che /proc è montato) e tramite sys_syslog syscall.

Esistono due applicazioni principali che leggono (e, in una certa misura, possono controllare) il buffer circolare del kernel:dmesg(1) e klogd(8) . Il primo è concepito per essere eseguito su richiesta dagli utenti, per stampare il contenuto del buffer dell'anello. Quest'ultimo è un demone che legge i messaggi da /proc/kmsg (o chiama sys_syslog , se /proc non è montato) e li invia a syslogd(8) o alla console. Questo copre il lato del kernel.

Nello spazio utente c'è syslogd(8) . Questo è un demone che ascolta su un certo numero di socket di dominio UNIX (principalmente /dev/log , ma possono essere configurati anche altri) e facoltativamente alla porta UDP 514 per i messaggi. Riceve anche messaggi da klogd(8) (syslogd(8) non si preoccupa di /proc/kmsg ). Quindi scrive questi messaggi in alcuni file in /log , o a named pipe, o li invia ad alcuni host remoti (tramite il syslog protocollo, sulla porta UDP 514), come configurato in /etc/syslog.conf .

Le applicazioni dello spazio utente normalmente usano libc funzione syslog(3) per registrare i messaggi. libc invia questi messaggi al socket di dominio UNIX /dev/log (dove vengono letti da syslogd(8) ), ma se un'applicazione è chroot(2) -ed i messaggi potrebbero finire per essere scritti su altri socket, f.i. a /var/named/dev/log . Ovviamente è essenziale per le applicazioni che inviano questi log e syslogd(8) concordare la posizione di queste prese. Per questi motivi syslogd(8) può essere configurato per ascoltare socket aggiuntivi oltre allo standard /dev/log .

Infine, il syslog protocollo è solo un protocollo datagramma. Niente impedisce a un'applicazione di inviare datagrammi syslog a qualsiasi socket di dominio UNIX (a condizione che le sue credenziali gli consentano di aprire il socket), bypassando il syslog(3) funzione in libc completamente. Se i datagrammi sono formattati correttamente syslogd(8) può usarli come se i messaggi fossero stati inviati tramite syslog(3) .

Naturalmente, quanto sopra copre solo la teoria della registrazione "classica". Altri demoni (come rsyslog e syslog-ng , come dici tu) può sostituire il semplice syslogd(8) e fare ogni sorta di cose eleganti, come inviare messaggi a host remoti tramite connessioni TCP crittografate, fornire timestamp ad alta risoluzione e così via. E c'è anche systemd , che sta lentamente fagocitando la parte UNIX di Linux. systemd ha i suoi meccanismi di registrazione, ma quella storia dovrebbe essere raccontata da qualcun altro. 🙂

Correlati:Linux:come interrompere lo script della shell se curl non è riuscito?

Differenze con il *mondo BSD:

Su *BSD non c'è klogd(8) e /proc o non esiste (su OpenBSD) o è per lo più obsoleto (su FreeBSD e NetBSD). syslogd(8) legge i messaggi del kernel dal dispositivo di caratteri /dev/klog e dmesg(1) utilizza /dev/kmem per decodificare i nomi del kernel. Solo OpenBSD ha un /dev/log . FreeBSD usa due socket di dominio UNIX /var/run/log e var/rub/logpriv invece, e NetBSD ha un /var/run/log .


Linux
  1. comando IP Linux

  2. comando cd di Linux

  3. Controllo dei repository e della registrazione Linux

  4. Controlla e stampa chi sta effettuando l'accesso in Linux / Unix

  5. Come capire il controllo delle versioni di Linux

Al comando in Linux

Come aggiungere manualmente messaggi ai file di registro del sistema Linux

Come avviare automaticamente la sessione dello schermo su Linux durante l'accesso

Guida completa alla registrazione di Linux

Linux vs Unix

Come interpretare i messaggi sorgente marziani di Linux