PTSログインの「最後の」出力にIP情報がない理由


18

5つのCentOS 6 Linuxシステムを使用していますが、所有しているすべてのLinuxシステムで、ユーザーIDでのみ発生するように思われる奇妙な問題が発生しました。これは、lastコマンドから除外したエントリの問題の例です。 。

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)

上記の私のptsログインエントリのうち、ソースIPアドレスが関連付けられていないものが2つ表示されています。私のCentOSマシンには、システムを共有する他の6人のユーザーがいます。ログインの約10%でこの問題が発生しています、他のユーザー名でこの現象が発生することはありません/var/log/secure送信元IPアドレスのないエントリのエントリはありません。

ご質問

これらのシステム(ネットワークインフラストラクチャの大部分を制御している)で保持しているスクリプトの種類を考えると、これに少し驚いているので、ログインでソースアドレスを見逃す原因を理解したいと思います。

  • なぜPTS行エントリに対してlast -i表示さ0.0.0.0れるのですか(この回答も参照してください)
  • 動作を合理的に説明するもの(悪意のあるアクティビティ以外)はありますか?
  • bash履歴のタイムスタンプ以外に、問題を追跡するためにできることは他にありますか?

情報提供

この始めた出来事以来、私は有効なbash履歴タイムスタンプ(すなわちHISTTIMEFORMAT="%y-%m-%d %T ".bash_profile)とも加える他のいくつかのbashの履歴ハックを。しかし、それは以前の出来事の間に何が起こったのかについての手がかりを与えません。

すべてのシステムが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 ~]$

編集

を使用するとlast -i mpenning、次のようなエントリが表示されます...

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)

答えようとしている人への注意:コマンドまたはGUIでログインしていませんscreen。私のログインはすべてSSHからのものです。バウンティ賞を受賞するには、SSHのみをソースとするエントリを説明するための信頼できる参照を引用する必要がありlast -i 0.0.0.0ます。

編集2(ewwhiteの質問用)

/etc/resolv.conf(会社の情報を隠すために上記の出力で.localaddrs を使用したことに注意してlastください)

[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(このカスタマイズされたhostsファイルは、これらの問題があるマシンの1つにのみ存在することに注意してください)

[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/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)

最終解決

以下の私の答えをご覧ください


それらはすべてsshで接続していますか?多数の大規模なマルチユーザーCentOS 6.xシステムがあります。そこに同じものが見えるかどうかを確認します。
ewwhite

@ewwhite、ありがとう...すべてのログインはsshである必要があります(場合によってはGUIコンソールを使用しますが、ボックスをオンにするとGUIからのみログインします)。他のリモートログインプロトコルは有効になっていません。
マイクペニントン

の出力にlast -i mpenningは空白が表示されますか?
JeffG

ああ、そう..私は... EL6.3サーバー上でこれを複製する必要がある
ewwhite

/ var / log / secureおよび/ var / log / messagesからログイン出力を提供できますか?IP値はPAMを介して渡されるパラメーターであると考えています。PAMはIPを正しく表示しますか?
マシューイフェ

回答:


4

script RedHatとDebianの動作の違い

リンクされたライブラリ

CentOS 6.3-スクリプト(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-スクリプト(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

両方のバージョンのアップストリームソースコードに基づいて、script新しいptyを開きます。以下はテストです。

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は新しいpts(2)を開きました。更新されませんでした/var/log/wtmp

CentOS 6

scriptptyを開いてwtmpに登録することが既にわかっているため、テストをスキップしています。

リブテンパー

  • プロジェクト:http : //freecode.com/projects/libutempter
  • 説明:libutempterは、スクリーンやxtermなどのターミナルエミュレーターに対して、utmpおよびwtmpファイルへのユーザーセッションを記録するためのライブラリインターフェイスを提供します。

主な違いは、libutempter.so.0CentOSにscriptリンクされている追加のlibrary()のようです。

Ubuntu 12.04でテストする

scriptlibutempterを使用したコンパイル

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)

テスト中

走る前に 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

以内に 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

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/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

空のホスト名の根本的な原因

はい、空のホスト名でエントリをscript.c作成しwtmpてください。次のutil-linux-2.20.1/term-utils/script.c行のコードブロックを見てください:245-247

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

ベース libutempter-1.1.5/utempter.h

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

したがってscript.c、実際には空のホスト名をに渡しますutempter_add_record

RedHatバックポート

興味深いのは、アップストリームがutil-linux-ng-2.17.2実際にサポートしていないことlibutempterです。Redhatはそのサポートを追加することにしたようです。

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

上記のコマンドは空の結果を返します。

結論

したがって、2つのディストリビューションの動作の違いはバグではなく、選択です。RedHatはその機能をサポートすることに決めましたが、Debianはそれをスキップしました。


CentOS 5はどうですか?
ewwhite

@ewwhite coreutilsCentOS 5が使用しているrpmバージョンを教えてください。ソースコードを確認する必要があります。
ジョン・シウ

必要なし。libutempterEL4では(を介してldd)リンクされませんが、EL5およびEL6 コマンドでリンクされscriptます。この機能の変更は、2007年のcoreutilsEL4 でのRHEL 5の導入がバージョン5.2.1であるため、Red Hatのようなシステムに適用される可能性があります。EL5では、バージョン5.97です。
ewwhite

そうですか。ところで、scriptutil-linuxにあります。
ジョン・シウ

1
@JohnSiu:はい、それが違いの理由です。報告されたバグを修正し、(意図せずに)新しいバグを作成したようです。
user9517はGoFundMonicaをサポートします13年

12

これは絶対に不可解です。DNS名またはIPアドレスを使用する必要があります。last.cファイルもチェックしましたが、何も表示されない理由がまだわかりません。おそらく時間があれば、0.0.0.0の部分を理解できます。

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 }

コンテキストで使用される2つのグローバル変数は次のとおりです。

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

したがって、理論的には、dnsまたはIPを使用する必要があります。

さらに掘り下げることができるかどうかを確認します。しかし、ewwhiteが尋ねたのは有効な質問です。


1
問題のコマンドの実際のソースコードを掘り下げるために+1。
クリススミス

素晴らしい情報です。これは私が探している信頼できる情報源です。コードを見つけるのに苦労してくれてありがとう。
マイクペニントン

8

それで、私はデバッガで最後に走りました。それはあなたの質問に対する少なくともいくつかの答えをあなたに与えるでしょう 私の気持ちは根本的な原因ですが、より深いです。

last -iがpts行エントリに対して0.0.0.0を表示する理由

これを説明する最良の方法は、あなたが何が起こるかですいけない -i渡します。

この理由は、次のコードセクションにあります。 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);
}

どちらusednsuseip(デフォルトのオプションを使用しては)フラグが設定されていません。これにより、に書き込まれたものによって記録されたリモートログイン名p->ut_hostman utmp含むstructからロジックがコピーされますutmp

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

あなたの場合、ここの値はゼロです。これは、last何も実行しないと表示されない理由です。

その場合、last -idns_lookupが呼び出されます。これにより、DNSを介して解決されるエントリ(p-> ut_addr_v6)が渡されます。あなたの場合、この値はゼロ含まれています。

ほとんどdns_lookupはウィンドウドレッシングとheusericです。基本的に重要なのは関数getnameinfoです。これは、この場合、に格納されているバイナリ値を解決するために最善を尽くすライブラリ呼び出しut_addr_v6です。このエントリにゼロが含まれている場合(あなたの場合など)、実際にこれを解決0.0.0.0して、last -i出力で何が起こるかを確認します。

動作を合理的に説明するもの(悪意のあるアクティビティ以外)はありますか?

まあ、おそらくバグか見落としです。残すように愚かなようですので、悪意があるために、その可能性は低い任意のではなく、送信元アドレスを省略することよりも、攻撃者としてトレースを。

これまでの回答の焦点は、間違った場所を見ていました。lastただ読むutmpwtmp。ただしlast、持っているデータを最大限に活用しています。

あなたの根本原因utmpは、書かれている方法のどこかにあります

いくつかのアプリケーションが直接書き込みを行う一方utmpで、問題の原因sshdはセッション管理の処理方法にあると思います。

bash履歴のタイムスタンプ以外に、問題を追跡するためにできることは他にありますか?

utmp通常は書き込み可能ではなく、そうすることも意図されていません。utmpログインしてセッションをセットアップするように設計されたアプリケーションによって作成されます。あなたの場合、それはsshdです。

なぜsshdがユーザーを適切に処理しないのかは、あなたが入ったホスト名を適切にコピーしているはずなので非常に奇妙です。これは、おそらくデバッグ作業に焦点を当てるべき場所です。sshdのデバッグ出力をログに追加することから始め、異常が発生するかどうかを確認します。

問題を回避したい場合(または、おそらく問題の詳細を発見したい場合)、/ etc / pam.d / sshdのセッションエントリに追加してpam_lastlog管理することができます。utmp

実際のところ、それが既に存在するかどうかをチェックしても害はありません-あなたが経験しているあなたの行動を明確に説明するオプションがpam_lastlog含まれているからnohostです。

最後に、最後にはまったく使用できませんでした。aulast監査サブシステムを介して同じジョブを実行します。

少なくとも正しいアドレスを書き込むことができたかどうかを確認する価値があるかもしれません。そうでない場合は、sshdがutmpやauditなどのさまざまなサブシステムにDNS名を渡しているため、sshdに問題があるはずです。


pam_lastlog上記の使用方法に関する特定の指示を追加できますか?
マイクペニントン

8

(1)OP last出力に基づく

ssh経由でログインした後、localhostにsshしlast -iて、後で0.0.0.0を取得できます。

OPのログの最初の4行に基づいて

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ログインはpts/17ログイン期間内でした。

pts/17ログインはpts/1 ログイン期間内でした。

この特定の発生については、192.0.2.91(pty/1)からのOP sshを推測し、そのsshセッション内でssh localhostサーバーにローカルでログイン()し、もう一度(pts/17)、もう一度()と推測するのが論理的ですpts/19

この重複が他の発生と発生するかどうかを確認してください。

以下は原因を特定するのに役立つかもしれません

  • ssh-keyを使用していますか?その場合、サーバーで、ローカルでログインするようにssh-keyをセットアップしましたか?
  • 同じ時間枠の/ var / log / secureを確認または投稿します。ヒントを提供する場合があります。
  • 使用するスクリプトを確認する
  • 使用するシェルエイリアスを確認する
  • コマンド履歴を確認する

(2)追加のシナリオ

シナリオ1-sudoおよび端末

  1. UserAログインXウィンドウ
  2. ターミナルウィンドウを開いて、 xhost + localhost
  3. su - UserBまたはsudo su - UserB、新しいターミナル(xterm、gnome-terminalなど)を開きます
  4. UserB 0.0.0.0として表示されます last -i

su - UserBUserB最後にログインとして登録されませんが、端末を開くと登録されます。

シナリオ2-ログイン

  1. サーバーへのssh
  2. タイプ sudo login
  3. 自分としてログイン
  4. チェックlastしてlast -i

lastのホスト名またはIPを表示しませんlogin sessionlast -iのIP 0.0.0.0になり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

Mifeの答えはすでにのコードブロックを示していますlast.clast空のホスト名/ IPが表示される理由はut_host、これらのレコードが実際には空であるためです。完全なwtmp構造についてはman wtmp、任意のLinuxシステムで実行してください。

ここでの2つのシナリオは、特定の状況下では標準パッケージでさえ、それらを作成することを示しています。

(3)Bash History Hack

セッションbashが対話型シェルとして使用する場合にのみ機能します。

.bashrc.bash_profileでのみ使用されbashます。

セッションで他のシェル(sh、cshなど)を使用したり、プログラムを直接実行したりしても、bash履歴はありません。

(4)プロセス会計

OPはsecureファイルについて何も言及していないので、私はそれが行き止まりであり、実際にヒントを提供すると仮定します。

次の仮定が正しい場合

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

auth.log(debian)/ secure(CentOS)は役に立ちません。認証関連のアクションのみが記録されるため。

データ構造に制限があるwtmp / utmpも行き止まりです。それらを作成したものに関する情報はありません。

そのため、プロセスアカウンティングという 1つのオプションがあります。これは大きな銃であり、注意して使用する必要があります。

  1. たぶん会社の方針に反する
  2. 共有システム上の他のユーザーは、有効にすると不満/不快になる可能性があります
  3. ログファイルは、多くのディスク領域を使用できます。ファイルサイズの増加率に注意してください。

この投稿によると、psacctパッケージのバージョンは6.3.2-56以降でなければなりません。

これを使用する場合で、/var/logスペースが限られている場合は、acctログファイルを、/home通常はさらに多くのスペースがあるディレクトリ(ルートのみのアクセス)に変更します。

これは本当に大きな銃です。OP 10%の発生率では、1週間以内に結果が得られるはずです。その期間中に、空のエントリが表示されlastてもacctログから何も表示されない場合、謎の 状況になり、抜本的なアクションが必要になります。

以下は、サンプル出力です 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

'dump-acct'を使用して詳細情報を表示することもできます。

PS1:いくつかのターミナルとsshセッションを開こうとしました。何が新しいPTSを開くのかは明らかではありません(または簡単に特定することはできません)。ただし、そのPTS /セッション内で実行されたすべてが表示されます。

PS2:マイクによるacctの使用に関するブログ投稿。


localhostログインが0.0.0.0をもたらすとあなたがどのように結論付けたかはわかりませんが、私にとっては常にlocalhostとして表示されます。私はsshでのみログインします。ローカルでログインすることの意味がわかりません
マイクペニントン

ssh localhost確認してくださいlast -i
ジョンシウ

に関してはlogin locallyssh localhostそのsshセッション内で行うことを意味します。私はその文を修正しましたが、今では混乱が少ないことを願っています。
ジョンシウ

追加のシナリオが追加されました。
ジョンシウ

5

マシンにログインするとき、これらは最後のコマンドのいくつかのエントリである可能性があります。

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)    

tty *の最初のエントリは、CTRL + ALT + F1-6を押して端末またはコンソールからログインすると表示されます。使用している端末からはかなり明確です。

通常、2番目のエントリは、マシンにログインしてGUIでターミナルウィンドウを開くと表示されます。同じ端末ウィンドウで新しいタブを開いた場合でも、エントリがあります。

3番目のタイプのエントリは、SSH経由でログインした後にスクリーンセッションを開くときに発生します。また、そこにIPアドレスなしでエントリが作成されます。

4番目のエントリは、誰もが理解しているごく普通のエントリです。

last -i次のエントリを使用すると、次のようなものが表示されます。

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)    

GUIのターミナルウィンドウとスクリーンセッションの2つのケースのいずれかであなたのケースが発生することはほぼ確実です。

これが役に立てば幸いです。


2
GUIを使用したscreenことも、どの0.0.0.0エントリにも使用しなかった。マシンをインストールしたとき(8月/ 9月頃)にのみGUIを使用します。0.0.0.0その後、多くのPTSエントリが表示されます。
マイクペニントン

1
これは本当に便利だったと私は持っていた本当に古い疑問のいくつかのクリア
ラーフル

3

last.cをデバッグせずにこれを実現するつもりはありませんが、すぐにコンパイルできるのでそれほど難しくないはずです...

1つの可能性は、utmpdumpコマンドを使用して/ var / log / wtmpファイルをダンプし、未加工のレコードを確認することです。そうでない場合は、関連する出力を投稿してください

utmpdump /var/log/wtmp 

wtmpのローカルコピーを再作成してデバッグできるように

utmpdump -r <dumpfile >wtmp

これは答えではないように思えるかもしれませんが、実際には、これを知っているだけでデバッグを取得する必要があるという点を超えています。
user9517はGoFundMonicaを

環境固有です。これらのサーバーを十分に実行しますが、通常のアクティビティを組み合わせて動作を再現することはできません。
ewwhite

@ewwhite:私もいくつかありますが、見つけられません。
user9517はGoFundMonicaをサポートしています

@ewwhiteは、いくつかのCentOSマシンを自分で試してみて、約300台のこれらのボックスを保守している同僚にも尋ねました。彼らは以前にこれを見たことも思い出せません。
トニー

3

12台のマルチユーザーCentOSおよびRHEL 6.3ベースのアプリケーションサーバーで確認しました。この動作は見られませんでした。last4〜5週間前の出力にエントリがありませんでした。

この形式/etc/hosts準拠していることを確認するには、ファイルエントリを確認することが重要だと思います

また、DNS解決のために何をしていますか?投稿できます/etc/resolv.confか?

0.0.0.0ローカル接続を表すことを示す他の応答は正しいです。典型的な例は、再起動およびコンソールログインイベントです。

 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)    

これは名前付きユーザーでのみ発生するようですので、ログインスクリプトでファンキーなソースまたは実行されている何か変更がありますか?変更した~/.bashrc~/.bash_profile、デフォルトから変更しましたか?環境内に他の特別なログインスクリプトはありますか?

-編集-

私はまだこれを再現することができません。ただし、2つの重要なコンポーネントを見ます。lastコマンドは安定しており、長い時間に変更されていません。sysvinit-toolsの変更ログを見ると、関連するバグはありません。initscripts(wtmp)でも同じです。

これを強制的に実行できる場合は、同じソースマシンの別のユーザーアカウントで試してください。しかし、これがOSの問題であるという兆候は見られません。


ローカル環境に関するご質問については...私の質問...他のユーザーが私のほかに、この問題を持っていないことを心に留めておくべき最新の編集を参照してください...(のようなので、グローバルコンフィグ/etc/hosts)は、誰に影響を与えるべきではありません...私だけ
マイク・ペニントン

これがどの時間枠で発生したかを知ることは役立ちます。ログスニペットは1か月前です。これは再現可能ですか?これはすべてのサーバーで発生していますか?おそらく、wtmpファイルがローテーションされている場合は、wtmpとwtmp1がある可能性があります。last -ifこれらのファイルの両方に対して実行して、同じ結果が時間とともに表示されるかどうかを確認できますか?
ewwhite

また、コマンドを実行していますか?(p)sftp(p)scp?長いセッションの時間枠内で非IPセッションが発生するため、お願いします。あなたの例では、192.0.2.91から複数の接続を開いていましたか?
ewwhite

良い質問...今日到着するゲストの準備をする必要がありますが、今週の週末にこれらの詳細を返信するよう努めます
マイクペニントン

私は時々無料のWinSCPクライアント経由でscpとsftpを使用します。ただし、これらのエントリは有効なエントリを生成し/var/log/secureます...表示されるエントリに0.0.0.0は何も表示されません/var/log/secure
Mike Pennington

3

最終解決

私はすでにボーナスを授与されたので、これは純粋に同じ質問を持つ将来のグーグル向けです。

これがログインの〜10%にのみ表示される理由は、ルーターまたはスイッチに大きな変更を加えるときに使用するscript foo.logため、変更の完全なターミナルログがあるためです。私がまだ理解していない理由のために、CentOSはコマンドptsを使用するとエントリを作成しますscript... last -i実行前と実行後の出力を示し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]$

この動作はCentOS 6に固有のようです...ラボにはCentOS 4.7マシンがいくつかあり、空のエントリを入れませんwtmp... Debian / Gentooマシンもこの動作を示しません。Linuxの管理者は、CentOSがpts実行時に意図的に別のエントリを追加する理由に頭を悩ませていますscript...これはRHELのバグだと思います。

編集:私はこの問題をRHEL Bug id 892134として提出しました

注意

一部の人々はscript、私が私の~/.bashrcまたは~/.bash_profile。これは欠陥のある引数です...もしそれが本当なら、私のsshログインのたびにエントリwtmpを持たなければなりません0.0.0.0...

[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)  # <-----

もちろん、そうではありませんでした...


3
script最初の質問でコマンドを使用していることは言及しませんでした。
ewwhite

2
私は尋ねたデフォルトから〜/ .bashrcや〜/ .bash_profileのを変更しているの?環境内に他の特別なログインスクリプトはありますか?scriptプログラムはのtypescriptです作るすべての端末に印刷を。それは適切な詳細です。
ewwhite

2
@ewwhite攻撃をやめ、批判的に考え始める時が来ました... 1)あなたは、スクリプトが私の.bashrcまたは.bash_profileにあったと仮定しています。script foo.log大幅な変更を加えたときに実行して、変更ログを取得できるようにします。つまり、ログインの10%にのみ影響する理由です。別の持っていなかったこと0.0.0.0だけでも3の後にエントリを)scriptのみのCentOSでこれを行う...私は10年以上にわたり、それを使用し、他のディストリビューションでは、この動作を見たことがない...この時点で、私はそれはおそらくCentOSのであると主張していますバグ
マイクペニントン

1
更新していただきありがとうございます。Ubuntu 12.04でテストしましscriptたが、シェルのみをフォークします。ここで表示しているものに基づいて、script実際にCentOS / Redhatバージョンのptyを最初にフォークします。少しがっかり(:P)であり、これはより一般的/全体的なディストリビューションではないということですが、少なくとも謎は私の心から消えています。PS:私はあなたが生産にGentooを持っている驚きだ@ @
ジョン・シウ

1
@MikePennington:Fedora BTWにもあります。MichaelHamptonがチェックしてくれます。
user9517はGoFundMonicaを

2

疑似端末スレーブ(pts)接続は、システムへの間接接続を意味するSSHまたはtelnet接続です。これらの接続はすべてシェルに接続できるため、コンピューターにコマンドを発行できます。したがって、GUIからシステムのターミナルを開くと、source ip 0.0.0.0でPTSが開きます。提供された情報から、このサーバー上で実行されているか、sshまたはtelnetサービスまたはローカルPTSを使用して端末に出力をスローするスケジュールされたスクリプトが原因で発生しているようです。


GUIを使用することはありません
マイクペニントン

2

どのsshクライアントを使用しますか?一部のsshクライアントは、1つの接続で複数の端末を多重化できます。IPのないすべてのセッションは、ログに記録されたIPを持つより長いセッションに含まれます。

ここでsshでこの動作を複製することはできません。


私は通常使用superputtyを現在のバージョンは1.4.0.1で、...しかし、私は同様に、プレーンオーレパテでこの問題を見てきました
マイク・ペニントン

1

おそらく、IPアドレスはDNSサーバーの1つで空白文字列に解決される可能性があります。たった10%の時間で発生する場合はセカンダリ(おそらく中央リポジトリから配布される場合は単にホストファイル)。これは、欠落している(または空白の)エントリを説明し、ソースのSohamの読み取りと一致します。


0

「0.0.0.0」は、おそらくリモートジョブではなくローカルユーザーであることを意味し、おそらくcronjobなどのアプリケーションによって呼び出されます。


この答えは間違っているように見えます ...ログ内の0.0.0.0エントリはすべてpts行にあります
Mike Pennington

それは正しい答えです、私のシステムからの例:# last -i |grep 0.0.0.0 \ reboot system boot 0.0.0.0 Wed Dec 5 20:09 - 17:18 (15+21:08) # last |grep reboot \ reboot system boot 2.6.32-10-pve Wed Dec 5 20:09 - 17:18 (15+21:08)
alterpub

@alterpub、再び、私はsshでのみログインします。誰かが公式文書を見せてくれない限り、0.0.0.0は有効なssh ptyエントリではありません
マイクペニントン

0

ローカルシステムを使用し、0.0.0.0はすべてのインターフェイスのIPアドレスを意味するために発生します。もし誰かがハッキングしたと思うなら、ssh経由のコマンドを含むシェルの完全なロギングをセットアップしてみてください-http://blog.pointsoftware.ch/index.php/howto-bash-audit-command-logger/


「ローカルシステムを使用します」とはどういう意味ですか...質問をよく読んでください...私はsshでのみログインします。0.0.0.0がptyへのsshログインの有効なエントリであることを提案していますか?
マイクペニントン

-1

〜/ .bashrcにスクリプトを追加することで解決しました。スクリプトは最後のtelnet接続ソースIPアドレスを検出します。その後、IPをログファイルに追加するか、必要なことを行います。

client_ip=$(echo $(netstat -nae | grep $(netstat -nae | grep 23 | awk  '{print $8}' | sort -n | tail -n1) | awk '{print $5}') | awk -F':' '{print $1}' )

echo "client_ip=$client_ip"

シャロン


1
この答えは私にはあまり意味がありません。議論はtelnetについてではありません。netstat -nae | grep 23telnet接続を見つける便利な方法ではありません。このコマンドは、私のシステムで92件の結果を出しますが、どれもtelnetではありません。
ハウケレイジング
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.