Frage Gründe für das Fehlen von IP-Informationen in der `letzten' Ausgabe von Pts-Logins?


Ich habe fünf CentOS 6 Linux-Systeme im Einsatz und bin auf ein ziemlich merkwürdiges Problem gestoßen, mit dem es nur scheinbar zu tun hat meine Benutzer-ID über alle Linux-Systeme, die ich habe ... Dies ist ein Beispiel für das Problem von Einträgen, die ich von der last Befehl...

mpenning pts/19                        Fri Nov 16 10:32 - 10:35  (00:03)
mpenning pts/17                        Fri Nov 16 10:21 - 10:42  (00:21)
bill     pts/15       sol-bill.local   Fri Nov 16 10:19 - 10:36  (00:16)
mpenning pts/1        192.0.2.91       Fri Nov 16 10:17 - 10:49 (12+00:31)
kkim14   pts/14       192.0.2.225      Thu Nov 15 18:02 - 15:17 (4+21:15)
gduarte  pts/10       192.0.2.135      Thu Nov 15 12:33 - 08:10 (11+19:36)
gduarte  pts/9        192.0.2.135      Thu Nov 15 12:31 - 08:10 (11+19:38)
kkim14   pts/0        :0.0             Thu Nov 15 12:27 - 15:17 (5+02:49)
gduarte  pts/6        192.0.2.135      Thu Nov 15 11:44 - 08:10 (11+20:25)
kkim14   pts/13       192.0.2.225      Thu Nov 15 09:56 - 15:17 (5+05:20)
kkim14   pts/12       192.0.2.225      Thu Nov 15 08:28 - 15:17 (5+06:49)
kkim14   pts/11       192.0.2.225      Thu Nov 15 08:26 - 15:17 (5+06:50)
dspencer pts/8        192.0.2.130      Wed Nov 14 18:24   still logged in
mpenning pts/18       alpha-console-1. Mon Nov 12 14:41 - 14:46  (00:04)

Sie können zwei meiner Login-Einträge oben sehen, denen keine Quell-IP-Adresse zugeordnet ist. Meine CentOS-Computer haben bis zu sechs weitere Benutzer, die sich die Systeme teilen. Ungefähr 10% meiner Logins sehen dieses Problem, aber Keine anderen Benutzernamen zeigen dieses Verhalten. Es gibt keinen Eintrag in /var/log/secure für die Einträge ohne eine Quell-IP-Adresse.

Fragen

Angesichts der Art von Skripten, die ich auf diesen Systemen behalte (die einen Großteil unserer Netzwerkinfrastruktur kontrollieren), bin ich ein wenig erschrocken und würde gerne verstehen, was dazu führen würde, dass meine Logins gelegentlich Quelladressen übersehen würden.

  • Warum tut last -i Show 0.0.0.0 zum pts Zeileneinträge (siehe auch diese Antwort)
  • Gibt es etwas (außer böswillige Aktivität), das das Verhalten vernünftigerweise erklären könnte?
  • Gibt es außer dem Bash History Timestamping noch andere Dinge, die ich tun kann, um das Problem zu verfolgen?

Informativ

Seitdem das passiert ist, habe ich aktiviert bash Geschichte Zeitstempelung HISTTIMEFORMAT="%y-%m-%d %T " im .bash_profile) und fügte auch ein einige andere bash history hacks; Das gibt jedoch keine Hinweise darauf, was während der vorherigen Ereignisse passiert ist.

Alle Systeme laufen CentOS 6.3 ...

[mpenning@typo ~]$ uname -a
Linux typo.local 2.6.32-279.9.1.el6.x86_64 #1 SMP Tue Sep 25 21:43:11 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
[mpenning@typo ~]$

BEARBEITEN

Wenn ich benutze last -i mpenningIch sehe Einträge wie diese ...

mpenning pts/19       0.0.0.0          Fri Nov 16 10:32 - 10:35  (00:03)
mpenning pts/17       0.0.0.0          Fri Nov 16 10:21 - 10:42  (00:21)

Hinweis für diejenigen, die versuchen zu antworten: Ich habe mich nicht eingeloggt screen Befehl oder die GUI. Alle meine Logins stammen von SSH; Um den Kopfgeldpreis zu erhalten, müssen Sie angeben autoritativ Referenzen zur Erklärung der last -i  0.0.0.0 Einträge nur über SSH bezogen.

EDIT 2 (für Ewwhite Fragen)

/etc/resolv.conf (beachte, dass ich gebraucht habe .local Adressen in last Ausgabe oben, um die Informationen meiner Firma zu verbergen)

[mpenning@sasmars network]$ cat /etc/resolv.conf
nameserver 192.0.2.40
nameserver 192.0.2.60
domain mycompany.com
search mycompany.com
[mpenning@sasmars network]$

/etc/hosts info (Beachten Sie, dass diese angepasste Host-Datei nur auf einem der Computer mit diesen Problemen existiert)

[mpenning@sasmars network]$ cat /etc/hosts
127.0.0.1       localhost.localdomain localhost
192.0.2.44      sasmars.mycompany.com sasmars
::1             localhost6.localdomain6 localhost6

## Temporary kludge until I add reverse hostname mappings...
## Firewalls
192.0.2.254     a2-inet-fw1
192.0.2.253     a2-inet-fw2
192.0.2.254     a2-wan-fw1
192.0.2.253     a2-wan-fw2
192.0.2.201     a2-fab-fw1
192.0.2.202     a2-fab-fw2
192.0.2.203     t1-eds-fw1
192.0.2.42      sasvpn
192.0.2.246     sasasa1
192.0.2.10      sasoutfw1
## Wireless
192.0.2.6       saswcs1
192.0.2.2       l2wlc3
192.0.2.4       l2wlc4
192.0.2.12      f2wlc5
192.0.2.16      f2wlc6
192.0.2.14      f2wlc1
192.0.2.8       f2wlc2
[mpenning@sasmars network]$

sftp Ausgabe von /var/log/secure*

Dec 26 10:36:37 sasmars sshd[26016]: pam_sm_authenticate: called (pam_tacplus v1.3.7)
Dec 26 10:36:37 sasmars sshd[26016]: pam_sm_authenticate: user [mpenning] obtained
Dec 26 10:36:37 sasmars sshd[26016]: tacacs_get_password: called
Dec 26 10:36:37 sasmars sshd[26016]: tacacs_get_password: obtained password
Dec 26 10:36:37 sasmars sshd[26016]: pam_sm_authenticate: password obtained
Dec 26 10:36:37 sasmars sshd[26016]: pam_sm_authenticate: tty [ssh] obtained
Dec 26 10:36:37 sasmars sshd[26016]: pam_sm_authenticate: rhost [192.0.2.91] obtained
Dec 26 10:36:37 sasmars sshd[26016]: pam_sm_authenticate: trying srv 0
Dec 26 10:36:38 sasmars sshd[26016]: Accepted password for mpenning from 192.0.2.91 port 55118 ssh2
Dec 26 10:36:38 sasmars sshd[26016]: pam_sm_setcred: called (pam_tacplus v1.3.7)
Dec 26 10:36:38 sasmars sshd[26016]: pam_unix(sshd:session): session opened for user mpenning by (uid=0)
Dec 26 10:36:38 sasmars sshd[26018]: pam_sm_setcred: called (pam_tacplus v1.3.7)
Dec 26 10:36:38 sasmars sshd[26018]: subsystem request for sftp
Dec 26 10:37:20 sasmars sshd[26016]: pam_unix(sshd:session): session closed for user mpenning
Dec 26 10:37:20 sasmars sshd[26016]: pam_sm_setcred: called (pam_tacplus v1.3.7)

ENDLÖSUNG

Sehen meine Antwort unten


18
2017-12-04 20:46


Ursprung


Sind sie alle über ssh verbunden? Ich habe eine Reihe von großen Multiuser CentOS 6.x-Systemen. Ich werde sehen, ob ich dort dasselbe sehen kann. - ewwhite
@ewhite, danke ... alle Logins sollten ssh sein (und gelegentlich über die GUI-Konsole, aber ich logge mich nur von der GUI aus, wenn ich die Box aufmache). Kein anderes Remote-Anmeldeprotokoll ist aktiviert. - Mike Pennington
Hat die Ausgabe von last -i mpenning zeige die Lücken? - JeffG
Oh, richtig .. Ich muss das auf einem EL6.3 Server replizieren ... - ewwhite
Können Sie die Login-Ausgabe von / var / log / secure und / var / log / messages bereitstellen? Ich glaube, dass der IP-Wert ein über PAM übergebener Parameter ist. Zeigt PAM die IP korrekt an? - Matthew Ife


Antworten:


script Verhaltensunterschiede zwischen RedHat und Debian

Verknüpfte Bibliotheken

CentOS 6.3 - Skript (util-linux-ng 2.17.2)

#ldd /usr/bin/script

linux-vdso.so.1 =>  (0x00007fff077ff000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f309f5d1000)
libutempter.so.0 => /usr/lib64/libutempter.so.0 (0x00007f309f3cf000)
libc.so.6 => /lib64/libc.so.6 (0x00007f309f03b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f309f7e1000)

Ubuntu 12.04 - Skript (util-linux 2.20.1)

#ldd /usr/bin/script

linux-vdso.so.1 =>  (0x00007fff375ff000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fc0d7ab0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc0d76f1000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc0d7cdc000)

PTY

Basis auf Upstream-Quellcode, script Aus beiden Versionen öffnen Sie neue Pty. Folgendes ist der Test.

Ubuntu 12.04

john@U64D211:~/tmp$ ls /dev/pts
0  1  5  8  ptmx
john@U64D211:~/tmp$ script
Script started, file is typescript
john@U64D211:~/tmp$ ls /dev/pts
0  1  2  5  8  ptmx
john@U64D211:~/tmp$ last -i
john     pts/0        0.0.0.0          Sat Jan  5 09:09   still logged in   
reboot   system boot  0.0.0.0          Sat Jan  5 09:08 - 09:52  (00:44)    
john     pts/0        0.0.0.0          Thu Jan  3 00:50 - 01:42  (00:52)    
reboot   system boot  0.0.0.0          Thu Jan  3 00:48 - 01:43  (00:54)    

wtmp begins Tue Jan  1 20:48:28 2013
john@U64D211:~/tmp$ exit
exit
Script done, file is typescript
john@U64D211:~/tmp$ ls /dev/pts
0  1  5  8  ptmx
john@U64D211:~/tmp$ 

Ubuntu 12.04 script habe einen neuen Punkt (2) geöffnet. Es hat einfach nicht aktualisiert /var/log/wtmp.

CentOS 6

Ich überspringe den Test, wie wir bereits wissen script öffne pty und registriere dich bei wtmp.

Libu temper

  • Projekt: http://freecode.com/projects/libutempter
  • Beschreibung: libuftempter stellt eine Bibliotheksschnittstelle für Terminal-Emulatoren wie screen und xterm bereit, um Benutzersitzungen in utmp- und wtmp-Dateien aufzuzeichnen.

Der Hauptunterschied scheint also die zusätzliche Bibliothek zu sein (libutempter.so.0) CentOS script verbunden mit.

Test mit Ubuntu 12.04

Kompilieren script mit libutempter

john@U64D211:~/tmp/util-linux-2.20.1$ sudo apt-get install libutempter-dev
john@U64D211:~/tmp/util-linux-2.20.1$ ./configure --with-utempter
john@U64D211:~/tmp/util-linux-2.20.1$ make
john@U64D211:~/tmp/util-linux-2.20.1$ cd term-utils/
john@U64D211:~/tmp/util-linux-2.20.1/term-utils$ ldd ./script
linux-vdso.so.1 =>  (0x00007fff54dff000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f289e635000)
libutempter.so.0 => /usr/lib/libutempter.so.0 (0x00007f289e432000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f289e072000)
/lib64/ld-linux-x86-64.so.2 (0x00007f289e861000)

Testen

Vor dem Ausführen script

john@U64D211:~/tmp/util-linux-2.20.1/term-utils$ ls /dev/pts
0  1  5  8  ptmx
john@U64D211:~/tmp/util-linux-2.20.1/term-utils$ last -i
john     pts/0        0.0.0.0          Sat Jan  5 09:09   still logged in   
reboot   system boot  0.0.0.0          Sat Jan  5 09:08 - 10:37  (01:28)    
john     pts/0        0.0.0.0          Thu Jan  3 00:50 - 01:42  (00:52)    
reboot   system boot  0.0.0.0          Thu Jan  3 00:48 - 01:43  (00:54)    

wtmp begins Tue Jan  1 20:48:28 2013

Innerhalb script

john@U64D211:~/tmp/util-linux-2.20.1/term-utils$ ./script
Script started, file is typescript
john@U64D211:~/tmp/util-linux-2.20.1/term-utils$ ls /dev/pts
0  1  2  5  8  ptmx
john@U64D211:~/tmp/util-linux-2.20.1/term-utils$ last -i
john     pts/2        0.0.0.0          Sat Jan  5 10:37   still logged in   
john     pts/0        0.0.0.0          Sat Jan  5 09:09   still logged in   
reboot   system boot  0.0.0.0          Sat Jan  5 09:08 - 10:37  (01:29)    
john     pts/0        0.0.0.0          Thu Jan  3 00:50 - 01:42  (00:52)    
reboot   system boot  0.0.0.0          Thu Jan  3 00:48 - 01:43  (00:54)    

wtmp begins Tue Jan  1 20:48:28 2013
john@U64D211:~/tmp/util-linux-2.20.1/term-utils$ exit
exit
Script done, file is typescript

Nach dem script Ende

john@U64D211:~/tmp/util-linux-2.20.1/term-utils$ ls /dev/pts
0  1  5  8  ptmx
john@U64D211:~/tmp/util-linux-2.20.1/term-utils$ last -i
john     pts/2        0.0.0.0          Sat Jan  5 10:37 - 10:37  (00:00)    
john     pts/0        0.0.0.0          Sat Jan  5 09:09   still logged in   
reboot   system boot  0.0.0.0          Sat Jan  5 09:08 - 10:37  (01:29)    
john     pts/0        0.0.0.0          Thu Jan  3 00:50 - 01:42  (00:52)    
reboot   system boot  0.0.0.0          Thu Jan  3 00:48 - 01:43  (00:54)    

wtmp begins Tue Jan  1 20:48:28 2013
john@U64D211:~/tmp/util-linux-2.20.1/term-utils$ last
john     pts/2                         Sat Jan  5 10:37 - 10:37  (00:00)    
john     pts/0        :0               Sat Jan  5 09:09   still logged in   
reboot   system boot  3.2.0-35-generic Sat Jan  5 09:08 - 10:38  (01:30)    
john     pts/0        :0               Thu Jan  3 00:50 - 01:42  (00:52)    
reboot   system boot  3.2.0-35-generic Thu Jan  3 00:48 - 01:43  (00:54)    

wtmp begins Tue Jan  1 20:48:28 2013

Die Ursache von empty hostname

Und ja, script.c Erstelle das wtmp Eintrag mit leerem Hostnamen. Sehen Sie sich den folgenden Codeblock an util-linux-2.20.1/term-utils/script.c Linie: 245-247

#ifdef HAVE_LIBUTEMPTER
    utempter_add_record(master, NULL);
#endif

Basis auf libutempter-1.1.5/utempter.h

extern int utempter_add_record (int master_fd, const char *hostname);

So script.c übergibt tatsächlich einen leeren Hostnamen an utempter_add_record.

RedHat Backport

Das Interessante ist, stromaufwärts util-linux-ng-2.17.2 unterstützt eigentlich nicht libutempter. Scheint, dass Redhat entschieden hat, diese Unterstützung wieder hinzuzufügen.

john@U64D211:~/tmp/util-linux-ng-2.17.2$ ./configure --help|grep utemp

Der obige Befehl gibt ein leeres Ergebnis zurück.

Fazit

Der Unterschied im Verhalten zwischen den beiden Distributionen ist also kein Fehler, sondern eine Entscheidung. RedHat entschied sich dafür, diese Funktion zu unterstützen, während Debian sie übersprang.


4
2018-01-05 15:50



Was ist mit CentOS 5? - ewwhite
@ewwhite Kannst du mir das geben? coreutils rpm-Version, die CentOS 5 verwendet? Ich muss den Quellcode überprüfen. - John Siu
Das ist nicht nötig. libutempter ist in EL4 nicht verlinkt (über ldd), aber es ist verbunden in der EL5 und EL6 script Befehl. Diese Feature-Änderung wurde wahrscheinlich seit der Einführung von RHEL 5 für Red Hat-ähnliche Systeme eingeführt. coreutils auf EL4 ist Version 5.2.1. Auf EL5 ist es Version 5.97. - ewwhite
Aha. BTW, script ist in util-linux. - John Siu
@JohnSiu: Ja, das ist der Grund für den Unterschied, es scheint mir, dass sie den gemeldeten Fehler behoben und (unbeabsichtigt) einen neuen erstellt haben. - Iain


Das sieht mir absolut rätselhaft. Entweder sollte ein DNS-Name oder eine IP-Adresse verwendet werden. Ich habe das überprüft last.c Datei auch, aber ich kann immer noch nicht finden, warum es nichts zeigt. Wahrscheinlich etwas Zeit gegeben, kann ich den Teil über 0.0.0.0 herausfinden.

int dns_lookup(char *result, int size, int useip, int32_t *a)
307 {
308     struct sockaddr_in  sin;
309     struct sockaddr_in6 sin6;
310     struct sockaddr     *sa;
311     int         salen, flags;
312     int         mapped = 0;
313 
314     flags = useip ? NI_NUMERICHOST : 0;
315 
316     /*
317      *  IPv4 or IPv6 ?
318      *  1. If last 3 4bytes are 0, must be IPv4
319      *  2. If IPv6 in IPv4, handle as IPv4
320      *  3. Anything else is IPv6
321      *
322      *  Ugly.
323      */
324     if (a[0] == 0 && a[1] == 0 && a[2] == htonl (0xffff))
325         mapped = 1;
326 
327     if (mapped || (a[1] == 0 && a[2] == 0 && a[3] == 0)) {
328         /* IPv4 */
329         sin.sin_family = AF_INET;
330         sin.sin_port = 0;
331         sin.sin_addr.s_addr = mapped ? a[3] : a[0];
332         sa = (struct sockaddr *)&sin;
333         salen = sizeof(sin);
334     } else {
335         /* IPv6 */
336         memset(&sin6, 0, sizeof(sin6));
337         sin6.sin6_family = AF_INET6;
338         sin6.sin6_port = 0;
339         memcpy(sin6.sin6_addr.s6_addr, a, 16);
340         sa = (struct sockaddr *)&sin6;
341         salen = sizeof(sin6);
342     }
343 
344     return getnameinfo(sa, salen, result, size, NULL, 0, flags);
345 }

Die zwei globalen Variablen, die in dem Kontext verwendet werden, sind diese.

int usedns = 0;     /* Use DNS to lookup the hostname. */
72 int useip = 0;       /* Print IP address in number format */

In der Theorie sollte es entweder DNS oder IP verwenden.

Ich werde sehen, ob ich noch weiter graben kann. Aber was ewhite gefragt hat, sind gültige Fragen.


12
2017-12-21 14:25



+1 für das Eingrenzen des tatsächlichen Quellcodes für den fraglichen Befehl. - Chris Smith
Großartige Informationen, das ist die Art von maßgeblicher Quelle, nach der ich suche. Vielen Dank für die harte Arbeit, um den Code zu finden. - Mike Pennington


Ich bin also zuletzt in einem Debugger gelandet, der dir hoffentlich zumindest geben wird etwas Antworten auf Ihre Frage. Mein Gefühl ist die Ursache ist jedoch tiefer.

Warum zeigt last -i 0.0.0.0 für pts Zeileneinträge an

Der beste Weg, dies zu erklären, ist, was passiert, wenn Sie nicht passiere -i.

Der Grund dafür ist in diesem Codeabschnitt von last.c

if (usedns || useip)
  r = dns_lookup(domain, sizeof(domain), useip, p->ut_addr_v6);
if (r < 0) {
   len = UT_HOSTSIZE;
   if (len >= sizeof(domain)) len = sizeof(domain) - 1;
   domain[0] = 0;
   strncat(domain, p->ut_host, len);
}

Beide usedns und useip (unter Verwendung der Standardoptionen) sind nicht markiert. Dies bewirkt, dass die Logik aus der Struktur kopiert wird p->ut_host was nach man utmp enthält den Namen des Remote - Logins, wie er von dem aufgezeichnet wurde, was in das Verzeichnis geschrieben wurde utmp.

char ut_host[UT_HOSTSIZE]; /* Hostname for remote login, or
                              kernel version for run-level
                              messages */

In Ihrem Fall ist der Wert hier Nullen. Deshalb, wenn du rennst last nichts erscheint für dich.

Im Falle von last -i Dann wird dns_lookup aufgerufen. Dies wird den Eintrag (p-> ut_addr_v6) übergeben, der über DNS aufgelöst werden soll. In deinem Fall dieser Wert ebenfalls enthält Nullen.

Die meisten von dns_lookup ist Schaufensterdekoration und Heustic. Grundsätzlich zählt die Funktion getnameinfo. Dies ist ein Bibliotheksaufruf, der in diesem Fall versuchen wird, den in der Datenbank gespeicherten Binärwert aufzulösen ut_addr_v6. Wenn dieser Eintrag Nullen enthält (wie in Ihrem Fall), lösen Sie dies tatsächlich auf 0.0.0.0 wie es mit deinem passiert last -i Ausgabe.

Gibt es etwas (außer böswillige Aktivität), das das Verhalten vernünftigerweise erklären könnte?

Nun, es ist wahrscheinlich ein Bug oder ein Versehen. Es ist unwahrscheinlich, dass es bösartig ist, da es dumm scheint, zu gehen irgendein verfolgen Sie als Angreifer, anstatt eine Quelladresse wegzulassen.

Der Fokus der Antworten lag bisher auf dem falschen Platz. last liest gerade utmp oder wtmp. jedoch last tut sein Bestes mit den Daten, die es hat.

Ihre Ursache liegt irgendwo in der Art und Weise zu welcher utmp wird geschrieben!

Während einige Anwendungen direkt in schreiben utmp Ich schätze, die Ursache Ihrer Probleme liegt im Weg sshd behandelt die Sitzungsverwaltung.

Gibt es außer dem Bash History Timestamping noch andere Dinge, die ich tun kann, um das Problem zu verfolgen?

utmp ist normalerweise nicht beschreibbar und nicht dazu gedacht. utmp wird von Anwendungen geschrieben, die Sie anmelden und Ihre Sitzung einrichten. In deinem Fall ist das so sshd.

Warum sshd Ihren Benutzer nicht richtig behandelt, ist sehr seltsam, da es den Hostnamen, von dem Sie gekommen sind, korrekt kopieren sollte. Hier sollten sich die Debugging-Bemühungen wahrscheinlich konzentrieren. Beginnen Sie mit dem Hinzufügen der Debug-Ausgabe von sshd zu Ihren Protokollen und sehen Sie, ob etwas Anomales auftritt.

Wenn Sie das Problem umgehen möchten (oder vielleicht sogar mehr über das Problem erfahren), können Sie es verwenden pam_lastlog managen utmp indem Sie es zu der hinzufügen Session Eintrag in /etc/pam.d/sshd.

In der Tat tut es nicht weh zu überprüfen, ob es schon da ist - denn pam_lastlog enthält ein nohost Option, die Ihr Verhalten auf jeden Fall erklären würde.

Schließlich konnte man den letzten überhaupt nicht benutzen. aulast macht die gleiche Arbeit über das Audit-Subsystem.

Könnte einen Versuch wert sein, um zu sehen, ob es geschafft hat, zumindest die richtige Adresse zu schreiben. Wenn es nicht dein Problem hat Muss Sei mit sshd, da sshd die DNS-Namen um verschiedene Subsysteme wie utmp oder audit herumgibt.


8
2017-12-23 21:53



Könnten Sie einige spezifische Anweisungen zur Verwendung hinzufügen? pam_lastlog wie oben erwähnt ? - Mike Pennington


(1) Basierend auf OP last Ausgabe

Nachdem Sie sich über ssh angemeldet haben, können Sie ssh auf localhost setzen und 0.0.0.0 in last -i für den späteren.

Basieren Sie auf den ersten vier Zeilen des OP-Protokolls

mpenning pts/19                        Fri Nov 16 10:32 - 10:35  (00:03)
mpenning pts/17                        Fri Nov 16 10:21 - 10:42  (00:21)
bill     pts/15       sol-bill.local   Fri Nov 16 10:19 - 10:36  (00:16)
mpenning pts/1        192.0.2.91       Fri Nov 16 10:17 - 10:49 (12+00:31)

pts/19 Login war innerhalb pts/17 Anmeldezeitraum.

pts/17 Login war innerhalb pts/1  Anmeldezeitraum.

Für dieses spezielle Vorkommen ist es logisch, dass OP ssh von 192.0.2.91 (pty/1), loggen Sie sich dann innerhalb dieser ssh-Sitzung lokal ein (ssh localhost) zum Server (pts/17), und wieder(pts/19).

Bitte überprüfen Sie, ob diese Überlappung mit anderen Vorkommnissen geschieht.

Folgendes kann helfen, die Ursache aufzuzeigen

  • Verwenden Sie ssh-key? Wenn ja, haben Sie auf dem Server ssh-key eingerichtet, um sich lokal anzumelden?
  • Überprüfen oder post / var / log / secure des gleichen Zeitrahmens. Es kann einen Hinweis geben.
  • Überprüfen Sie die verwendeten Skripte
  • Überprüfen Sie die von Ihnen verwendeten Shell-Aliase
  • Überprüfen Sie Ihren Befehlsverlauf

(2) Zusätzliches Secnario

Szenario 1 - Sudo und Terminal

  1. Benutzeranmeldung X Window
  2. Öffnen Sie ein Terminalfenster, tun Sie xhost + localhost
  3. su - UserB oder sudo su - UserB dann öffne ein neues Terminal (xterm, gnome-terminal, etc)
  4. UserB wird als 0.0.0.0 angezeigt last -i

su - UserB wird nicht als a registriert UserB Zuletzt einloggen, aber ein Terminal öffnen.

Szenario 2 - Login

  1. SSH in den Server
  2. Art sudo login
  3. Melden Sie sich als Sie an
  4. prüfen last und last -i

last zeige keinen Hostnamen oder IP für die login session. last -i wird IP 0.0.0.0 für die login session.

john@U64D211:~$ last -5
john     pts/0                         Sun Dec 23 20:50   still logged in   
john     pts/0                         Sun Dec 23 20:50 - 20:50  (00:00)    
john     pts/0        :0               Sun Dec 23 20:50 - 20:50  (00:00)    
reboot   system boot  3.2.0-35-generic Sun Dec 23 20:49 - 20:50  (00:01)    
john     pts/2        js.example.com   Sun Dec 23 17:14 - crash  (03:34)    

wtmp begins Sat Dec  1 06:30:46 2012
john@U64D211:~$ last -5i
john     pts/0        0.0.0.0          Sun Dec 23 20:50   still logged in   
john     pts/0        0.0.0.0          Sun Dec 23 20:50 - 20:50  (00:00)    
john     pts/0        0.0.0.0          Sun Dec 23 20:50 - 20:50  (00:00)    
reboot   system boot  0.0.0.0          Sun Dec 23 20:49 - 20:50  (00:01)    
john     pts/2        192.168.1.90     Sun Dec 23 17:14 - crash  (03:34)    

wtmp begins Sat Dec  1 06:30:46 2012

Mifes's Antwort zeigt bereits Codeblock von last.c. Der Grund last Anzeige leerer Hostname / IP ist da ut_host für diese Aufzeichnungen sind tatsächlich leeren. Für die vollständige wtmp-Struktur tun man wtmp auf jedem Linux-System.

Die 2 Szenarien zeigen, dass selbst Standard-Pakete sie in bestimmten Situationen als solche erstellen.

(3) Bash History Hack

Es funktioniert nur, wenn die Sitzung verwendet wird bash als interaktive Hülle.

.bashrc und .bash_profile werden nur von verwendet bash.

Sie werden nicht automatisch bezogen, wenn die Sitzung eine andere Shell (sh, csh, etc) verwendet oder das Programm direkt ausführt, und es wird auch keine Bash-Historie geben.

(4) Prozessbuchhaltung

Da OP nichts dazu sagen secure Datei werde ich davon ausgehen, dass es sich um eine Sackgasse handelt und es jetzt tatsächlich einen Hinweis gibt.

Wenn die folgende Annahme richtig ist

`last` 0.0.0.0 entries are actually created with in OP own session

auth.log (debian) / secure (CentOS) wird nicht helfen. Da nur authentifizierungsbezogene Aktionen darin aufgezeichnet sind.

wtmp / utmp, mit der Beschränkung in ihrer Datenstruktur, ist auch eine Sackgasse. Es gibt keine Informationen darüber, was sie erstellt hat.

Das lässt uns eine Option, Prozessbuchhaltung. Dies ist eine große Waffe und muss mit Vorsicht verwendet werden.

  1. Vielleicht gegen die Firmenpolitik
  2. Andere Benutzer in einem gemeinsam genutzten System sind möglicherweise unglücklich / unkomfortabel
  3. Die Protokolldatei kann viel Speicherplatz belegen. Behalten Sie die Wachstumsrate der Dateigröße im Auge.

Die Psacct-Paketversion sollte sein 6.3.2-56 oder darüber, entsprechend Post.

Wenn dies verwendet werden soll, und /var/log hat begrenzten Speicherplatz, ändern Sie die acct-Protokolldatei in ein Verzeichnis (root only access) unter /home, die normalerweise viel mehr Platz hat.

Das ist wirklich die große Waffe. Bei einer OP-Häufigkeit von 10% sollte das Ergebnis innerhalb einer Woche liegen. Wenn in diesem Zeitraum ein leerer Eintrag angezeigt wird, last aber nichts von acct log, es wird a Geheimnis  Situationund würde einige erfordern drastische Maßnahmen.

Folgendes ist eine Beispielausgabe von lastcomm

lesspipe               john     pts/8      0.02 secs Mon Dec 24 17:10
lesspipe          F    john     pts/8      0.00 secs Mon Dec 24 17:10
dirname                john     pts/8      0.00 secs Mon Dec 24 17:10
basename               john     pts/8      0.00 secs Mon Dec 24 17:10
kworker/1:2       F    root     __         0.00 secs Mon Dec 24 16:54
tty                    john     pts/6      0.01 secs Mon Dec 24 17:09
tty                    john     pts/4      0.01 secs Mon Dec 24 17:09
cron              F    root     __         0.05 secs Mon Dec 24 17:09
sh               S     root     __         0.01 secs Mon Dec 24 17:09
find                   root     __         0.01 secs Mon Dec 24 17:09
maxlifetime            root     __         0.00 secs Mon Dec 24 17:09
php5                   root     __         0.23 secs Mon Dec 24 17:09
which                  root     __         0.00 secs Mon Dec 24 17:09
lastcomm               root     pts/0      0.01 secs Mon Dec 24 17:08
tty                    john     pts/1      0.01 secs Mon Dec 24 17:08
dconf worker         X john     __         5.46 secs Mon Dec 24 16:58
lastcomm               root     pts/7      0.04 secs Mon Dec 24 17:05
mesg             S     root     pts/7      0.00 secs Mon Dec 24 17:05
bash              F    root     pts/7      0.00 secs Mon Dec 24 17:05
dircolors              root     pts/7      0.00 secs Mon Dec 24 17:05

Sie können auch 'dump-acct' verwenden, um weitere Informationen anzuzeigen.

PS1: Ich habe versucht, ein paar Terminal-und SSH-Sitzung zu öffnen. Es ist nicht klar (oder nicht einfach zu lokalisieren), was eine neue Pkt. Öffnen. Es zeigt jedoch alles, was innerhalb dieser Punkte / Sitzung lief.

PS2: A Blog Post über die Verwendung von acct von einem Mike.


8
2017-12-21 10:35



Ich weiß nicht, wie Sie zu dem Schluss gekommen sind, dass ein Localhost Login 0.0.0.0 ergibt, es erscheint immer als localhost für mich. Ich logge mich nur mit ssh ein, ich weiß nicht, was Sie mit dem Login vor Ort meinen - Mike Pennington
Bitte ssh localhost und prüfe last -i. - John Siu
Bezüglich login locallyIch meine es zu tun ssh localhost innerhalb dieser SSH-Sitzung. Sch 100 100 100 sch sch 100 sch 100 sch sch sch 100 sch sch sch 100 sch sch sch 100 sch sch 100 sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch sch dieser - John Siu
Zusätzliches Szenario hinzugefügt. - John Siu


Wenn Sie sich bei einer Maschine anmelden, könnten dies wenige Einträge im letzten Befehl sein.

geekride   tty2                        Fri Dec 21 15:45 - 15:45  (00:00)    
geekride   pts/1                       Fri Dec 21 13:45   still logged in   
geekride   pts/1        :pts/0:S.0     Thu Dec  6 12:49 - 00:40  (11:50)    
geekride   pts/1        10.31.33.47    Thu Dec  6 12:49 - 00:40  (11:50)    

Der erste Eintrag mit tty * wird angezeigt, wenn Sie sich über das Terminal oder die Konsole anmelden, indem Sie STRG + ALT + F1-6 drücken. Es ist ziemlich klar von dem Terminal, das es benutzt.

Der zweite Eintrag wird normalerweise angezeigt, wenn Sie sich bei einer Maschine anmelden und ein Terminalfenster in der GUI öffnen. Es wird auch einen Eintrag geben, auch wenn Sie ein neues Tab im selben Terminalfenster öffnen.

Der dritte Eingabetyp kommt, wenn Sie eine Bildschirmsitzung nach dem Einloggen über SSH öffnen. Dadurch wird auch dort ein Eintrag ohne IP-Adresse erstellt.

Der vierte Eintrag ist ziemlich normal, was jeder versteht.

Wenn Sie tun last -i Mit den folgenden Einträgen sehen Sie etwa Folgendes:

geekride   tty2         0.0.0.0        Fri Dec 21 15:45 - 15:45  (00:00)    
geekride   pts/9        0.0.0.0        Fri Dec 21 13:45   still logged in   
geekride   pts/1        0.0.0.0        Thu Dec  6 12:49 - 00:40  (11:50)    

Ich bin ziemlich sicher, dass Ihr Fall in jedem der 2 Fälle, einer mit dem Terminalfenster in der GUI und der andere mit der Bildschirmsitzung, untergeht.

Hoffe, das half.


5
2017-12-22 10:50



Ich habe die GUI nicht benutzt oder screen für irgendeinen der 0.0.0.0 Einträge. Ich benutze die GUI nur bei der Installation der Maschinen (ca. August / September). Ich sehe viele 0.0.0.0 pts Einträge nach dieser Zeit. - Mike Pennington
das war sehr nützlich und löschte nur wenige der wirklich alten Zweifel, die ich hatte - Rahul


Ich denke nicht, dass wir damit weit kommen werden, ohne last.c zu debuggen, aber das sollte nicht so schwer sein, da es sich leicht kompiliert ...

Eine Möglichkeit besteht jedoch darin, die Datei / var / log / wtmp mit dem Befehl utmpdump befehle und schaue dir die rohen Aufzeichnungen an, die dir vielleicht etwas Licht geben könnten. Wenn nicht, bitte posten Sie einige relevante Ausgaben von

utmpdump /var/log/wtmp 

damit wir lokale Kopien Ihres wtmp zum debuggen erstellen können

utmpdump -r <dumpfile >wtmp

3
2017-12-21 13:41



Das mag so aussehen als ob es keine Antwort ist, aber es ist wirklich so, wir sind über den Punkt der Leute gegangen, die das gerade wissen und wirklich Debugging brauchen. - Iain
Es ist umweltspezifisch. Ich lasse genug von diesen Servern laufen und kann das Verhalten mit keiner Kombination von normaler Aktivität reproduzieren. - ewwhite
@ewwhite: Ich habe auch ein paar und ich kann es auch nicht finden. - Iain
@ewwhite Ich habe ein paar CentOS-Maschinen selbst ausprobiert und auch einige Kollegen gefragt, die etwa 300 dieser Boxen instand halten. Sie können sich nicht daran erinnern, das jemals zuvor gesehen zu haben. - Tonny


Ich überprüfte 12 Multi-User CentOS und RHEL 6.3-basierte Anwendungsserver. Keines zeigte dieses Verhalten. Es gab keine fehlenden Einträge in last Leistung geht 4-5 Wochen zurück.

Ich denke, es wäre wichtig, deine zu sehen /etc/hosts Dateieintrag, um es sicherzustellen entspricht diesem Format.

Was machst du auch für die DNS-Auflösung? Kannst du deine Post posten? /etc/resolv.conf?

Die anderen Antworten zeigen das an 0.0.0.0 stellt lokale Verbindungen dar sind korrekt. Die typischen Beispiele sind Neustart- und Konsolenanmeldungsereignisse:

 reboot   system boot  0.0.0.0          Sat Dec  8 06:12 - 05:57 (12+23:45)  
 reboot   system boot  0.0.0.0          Sat Dec  8 05:25 - 06:09  (00:44)    
 reboot   system boot  0.0.0.0          Fri Nov 30 14:28 - 05:22 (7+14:54)   
 root     tty1         0.0.0.0          Fri Nov 30 13:52 - 13:55  (00:03)    
 reboot   system boot  0.0.0.0          Fri Nov 30 13:51 - 14:25  (00:34)    

Da dies nur bei namentlich benannten Benutzern zu geschehen scheint, gibt es Änderungen daran, dass in ihren Anmeldeskripten etwas Ungewöhnliches gefunden oder ausgeführt wird? Hast du dich verändert ~/.bashrc oder ~/.bash_profile von Standard? Gibt es noch andere spezielle Anmeldeskripts in der Umgebung?

--Bearbeiten--

Ich kann das immer noch nicht reproduzieren. Ich betrachte jedoch zwei kritische Komponenten. Das last Befehl ist stabil und wurde seit langer Zeit nicht geändert. Blick auf das Changelog für Sysvinit-WerkzeugeEs gibt keine relevanten Fehler. Gleiches für Initschriften (wtmp).

Wenn Sie dies erzwingen können, versuchen Sie es mit einem anderen Benutzerkonto von demselben Quellcomputer. Aber ich sehe keinen Hinweis darauf, dass dies ein Betriebssystemproblem ist.


3
2018-01-03 22:20



In Bezug auf Ihre Fragen über die lokale Umgebung ... Bitte beachten Sie die neuesten Änderungen zu meiner Frage ... Denken Sie daran, dass keine anderen Benutzer dieses Problem neben mir haben ... so globale Konfigurationen (wie /etc/hosts) sollte jeden betreffen ... nicht nur mich - Mike Pennington
Es wäre hilfreich zu wissen, um welchen Zeitrahmen es dabei ging. Ihr Protokollschnipsel ist einen Monat alt. Ist das reproduzierbar? Tritt dies auf allen Servern auf? Vielleicht, wenn die wtmp-Datei gedreht wurde, können Sie eine wtmp und wtmp1 haben. Kannst du Rennen last -if gegen beide dieser Dateien und sehen, ob Sie die gleichen Ergebnisse im Laufe der Zeit sehen? - ewwhite
Führen Sie auch Befehle aus; (p) sftp (p) scp? Ich frage, da Ihre No-IP-Sitzungen innerhalb des Zeitrahmens einer längeren Sitzung stattfinden. In Ihrem Beispiel, öffneten Sie mehrere Verbindungen von 192.0.2.91? - ewwhite
gute Fragen ... Ich muss mich auf die Gäste vorbereiten, die heute ankommen, aber ich werde mich bemühen, dieses Wochenende mit diesen Details zu antworten - Mike Pennington
Ich benutze manchmal scp und sftp über den kostenlosen WinSCP-Client; Diese Einträge erzeugen jedoch einen gültigen Wert /var/log/secure Einträge ... die Einträge, die angezeigt werden 0.0.0.0 zeige nichts in /var/log/secure - Mike Pennington


ENDLÖSUNG

Ich habe den Bonus bereits vergeben, also ist das nur für zukünftige Googler mit der gleichen Frage.

Der Grund, warum dies nur in ~ 10% meiner Logins erscheint, liegt darin, dass ich, wenn ich größere Änderungen an unseren Routern oder Switches vornehme, verwende script foo.log also habe ich ein komplettes Terminalprotokoll der Änderung. Aus Gründen, die ich immer noch nicht verstehe, erstellt CentOS ein pts Eintrag, wenn Sie das verwenden script Befehl ... Ich werde die Ausgabe von demonstrieren last -i vor und nach dem Laufen script...

[mpenning@sasmars net]$ last -i | head
kkim14   pts/13       192.0.2.225   Wed Jan  2 09:43   still logged in
kkim14   pts/12       192.0.2.225   Wed Jan  2 09:43   still logged in
kkim14   pts/10       192.0.2.225   Wed Jan  2 09:43   still logged in
kkim14   pts/9        192.0.2.225   Wed Jan  2 09:43   still logged in
kkim14   pts/5        192.0.2.225   Wed Jan  2 09:43   still logged in
mpenning pts/17       192.0.2.29    Mon Dec 31 16:45 - 16:49  (00:03)
gduarte  pts/16       192.0.2.135   Thu Dec 27 10:54   still logged in
gduarte  pts/14       192.0.2.135   Thu Dec 27 10:44   still logged in
dspencer pts/14       192.0.2.4     Thu Dec 27 09:56 - 09:57  (00:01)
mpenning pts/14       192.0.2.91    Thu Dec 27 08:31 - 08:32  (00:00)
[mpenning@sasmars net]$ script ~/something_random.log
Script started, file is /home/mpenning/something_random.log
[mpenning@sasmars net]$ date
Thu Jan  3 16:14:19 CST 2013 # <--------------------------------------------------
[mpenning@sasmars net]$ exit
exit
Script done, file is /home/mpenning/something_random.log
[mpenning@sasmars net]$ last -i | head
mpenning pts/15       0.0.0.0          Thu Jan  3 16:14 - 16:14  (00:00) # <------
kkim14   pts/13       192.0.2.225   Wed Jan  2 09:43   still logged in
kkim14   pts/12       192.0.2.225   Wed Jan  2 09:43   still logged in
kkim14   pts/10       192.0.2.225   Wed Jan  2 09:43   still logged in
kkim14   pts/9        192.0.2.225   Wed Jan  2 09:43   still logged in
kkim14   pts/5        192.0.2.225   Wed Jan  2 09:43   still logged in
mpenning pts/17       192.0.2.29    Mon Dec 31 16:45 - 16:49  (00:03)
gduarte  pts/16       192.0.2.135   Thu Dec 27 10:54   still logged in
gduarte  pts/14       192.0.2.135   Thu Dec 27 10:44   still logged in
dspencer pts/14       192.0.2.4     Thu Dec 27 09:56 - 09:57  (00:01)
[mpenning@sasmars net]$ cat /etc/redhat-release
CentOS release 6.3 (Final)
[mpenning@sasmars net]$

Dieses Verhalten scheint für CentOS 6 einzigartig zu sein ... Wir haben einige CentOS 4.7-Rechner im Labor, die keinen leeren Eintrag enthalten wtmp... Debian / Gentoo Maschinen zeigen dieses Verhalten auch nicht. Unsere Linux-Admins kratzen sich am Kopf, warum CentOS absichtlich ein neues hinzufügen würde pts Eintrag, wenn Sie ausführen script... Ich vermute, das ist ein RHEL-Bug.

BEARBEITEN: Ich habe dieses Problem als eingereicht RHEL Fehler ID 892134

HINWEIS

Manche Leute haben irrtümlich angenommen, ich hätte es getan script in meinem ~/.bashrc oder ~/.bash_profile. Das ist ein fehlerhaftes Argument ... wenn das stimmt, mein wtmp sollte eine haben 0.0.0.0 Eintrag nach jedem meiner ssh Logins ...

[mpenning@sasmars net]$ last -i | head
kkim14   pts/13       192.0.2.225   Wed Jan  2 09:43   still logged in
kkim14   pts/12       192.0.2.225   Wed Jan  2 09:43   still logged in
kkim14   pts/10       192.0.2.225   Wed Jan  2 09:43   still logged in
kkim14   pts/9        192.0.2.225   Wed Jan  2 09:43   still logged in
kkim14   pts/5        192.0.2.225   Wed Jan  2 09:43   still logged in
mpenning pts/18       0.0.0.0       Mon Dec 31 16:45 - 16:49  (00:03)  # <-----
mpenning pts/17       192.0.2.29    Mon Dec 31 16:45 - 16:49  (00:03)  # <-----
gduarte  pts/16       192.0.2.135   Thu Dec 27 10:54   still logged in
gduarte  pts/14       192.0.2.135   Thu Dec 27 10:44   still logged in
dspencer pts/14       192.0.2.4     Thu Dec 27 09:56 - 09:57  (00:01)
mpenning pts/15       0.0.0.0       Thu Dec 27 08:31 - 08:32  (00:00)  # <-----
mpenning pts/14       192.0.2.91    Thu Dec 27 08:31 - 08:32  (00:00)  # <-----

Das war natürlich nicht der Fall ...


3
2017-12-21 11:05



Du hast nicht erwähnt, dass du das benutzt hast script Befehl in Ihrer ersten Frage. - ewwhite
Ich habe gefragt Hast du ~ / .bashrc oder ~ / .bash_profile vom Standard geändert? Gibt es noch andere spezielle Anmeldeskripts in der Umgebung?. Das script Programm erstellt ein Typoskript von alles gedruckt auf Ihrem Terminal. Es ist ein wichtiges Detail. - ewwhite
@ewwhite es ist Zeit für Sie aufhören zu attackieren und beginnen kritisch zu denken ... 1) Sie sind davon ausgegangen, dass Skript in meinem war .bashrc oder .bash_profile, es war nicht; Ich führe aus script foo.log wenn ich größere Änderungen mache, kann ich ein Änderungsprotokoll haben ... das ist der Grund, warum es nur ~ 10% meiner Logins betrifft 2) Wenn deine Anklage richtig ist (und es nicht ist), hätte ich niemals einen ssh-Login keine andere haben 0.0.0.0 Eintrag direkt danach 3) script tut dies nur in CentOS ... Ich habe es seit über einem Jahrzehnt benutzt und habe dieses Verhalten nie in einer anderen Distribution gesehen ... an dieser Stelle argumentiere ich, dass es wahrscheinlich ein CentOS Bug ist - Mike Pennington
Vielen Dank für das Update. Ich habe auf Ubuntu 12.04 getestet, script wird nur eine Shell forkieren. Basieren Sie auf dem, was Sie hier zeigen, CentOS / Redhat-Version von script tatsächlich zuerst eine Pty. Obwohl ein bisschen enttäuscht (: P), dass es nicht etwas generischer / über Distro ist, ist zumindest das Geheimnis aus meinem Kopf verschwunden. PS: Ich bin überrascht, dass du Gentoo in der Produktion @ hast. @ - John Siu
@ Mike Pennington: Es ist auch in Fedora BTW, Michael Hampton prüft für mich. - Iain


Pseudo-Terminal-Slave-Verbindungen (pts) sind SSH- oder Telnet-Verbindungen, dh indirekte Verbindungen zum System. Alle diese Verbindungen können mit einer Shell verbunden werden, mit der Sie Befehle an den Computer senden können. Wenn Sie also ein Terminal von gui aus auf Ihrem System öffnen, öffnet es einen Punkt mit der Quell-IP 0.0.0.0. Von den von Ihnen gelieferten Informationen scheint es, dass es passiert, weil das Skript auf diesem Server läuft oder geplant ist und ssh oder telnet service oder lokale pts benutzt, um die Ausgabe im Terminal zu werfen.


2
2017-12-21 13:39



Ich benutze nie die GUI - Mike Pennington