18 votos

Razones para la falta de IP de información en la "última" de la salida de los pts inicios de sesión?

Tengo cinco CentOS 6 sistemas linux en el trabajo, y encontró un lugar extraño problema que parece ocurrir sólo con mi id de usuario a través de todos los sistemas linux que tengo... Este es un ejemplo del problema de las entradas me exceptuadas de la last comando...

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)

Usted puede ver dos de mis pts de inicio de sesión de las entradas de arriba que no tiene una dirección IP de origen asociados con ellos. Mi CentOS máquinas de tener tantos como seis otros usuarios que comparten los sistemas. Aproximadamente el 10% de mis inicios de ver este tema, pero no los otros usuarios presentan este comportamiento. No hay ninguna entrada en /var/log/secure para las entradas sin una dirección IP de origen.

Preguntas

Dado el tipo de scripts que seguir estos sistemas (que controlan gran parte de nuestra infraestructura de red), estoy un poco asustada por esto y quisiera entender lo que haría que mis inicios de sesión a falta de vez en cuando las direcciones de origen.

  • ¿Por qué last -i mostrar 0.0.0.0 de pts entradas de línea (ver también esta respuesta)
  • Hay nada (aparte de la actividad maliciosa) que pudiera explicar el comportamiento?
  • Otro de bash historia de sellado de tiempo, hay otras cosas que puedo hacer para seguir el tema?

Informativos

Desde que esto comenzó a suceder, me permitió bash historia de sellado de tiempo (es decir, HISTTIMEFORMAT="%y-%m-%d %T " en .bash_profile) y también se ha agregado un par de otros bash historia hacks, sin embargo, que no da pistas sobre lo que ocurrió durante los sucesos previos.

Todos los sistemas funcionan de 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 ~]$

EDITAR

Si utilizo last -i mpenning, puedo ver entradas como esta...

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)

Nota para aquellos que tratan de responder: no he iniciado sesión con la screen de comandos o la interfaz gráfica de usuario. Todos mis inicios de sesión de SSH; para recibir la recompensa del premio, usted debe citar autorizado referencias para explicar la last -i 0.0.0.0 entradas provienen sólo a través de SSH.

EDICIÓN 2 (para ewwhite preguntas)

/etc/resolv.conf (tenga en cuenta que he utilizado .local addrs en last de la salida por encima de ocultar mi empresa info)

[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 (tenga en cuenta que esta personalizado archivo hosts sólo existe en una de las máquinas que tiene estos problemas)

[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 De salida de /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)

RESOLUCIÓN FINAL

Véase mi respuesta a continuación

12voto

Soham Chakraborty Puntos 2587

Esto se ve absolutamente desconcertante para mí. Tampoco se debe utilizar algún nombre DNS o dirección IP. He comprobado el last.c archivo también pero todavía no puedo encontrar ¿por qué no muestra nada. Probablemente se les da un tiempo, puedo figura fuera de la parte de 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 }

Las dos variables globales utilizadas en el contexto de estos.

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

Así que, en teoría, debería usar dns o IP.

Voy a ver si me puede sacar nada más. Pero lo que ewwhite frecuentes son preguntas válidas.

8voto

John Siu Puntos 2342

(1) Base en OP last de salida

Después de entrar por ssh, uno puede ssh localhost y obtener 0.0.0.0 en last -i para el segundo.

Base en las cuatro primeras líneas de la OP del registro de

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 registro fue en pts/17 de registro en el período.

pts/17 registro fue en pts/1 de registro en el período.

Para este acontecimiento específico, es lógico suponer que OP ssh desde 192.0.2.91(pty/1), luego dentro de esa sesión de ssh, sesión localmente (ssh localhost) para el servidor de nuevo(pts/17), y de nuevo(pts/19).

Por favor, compruebe si esta superposición ocurre con otros ocurrencia.

Siguiente puede ayudar a fijar el punto de la causa

  • ¿Usar ssh-clave? Si es así, en el servidor, ¿de configuración de ssh-clave de registro en el nivel local?
  • Cheque o post /var/log/secure de el mismo marco de tiempo. Puede proporcionar algún indicio.
  • Comprobación de secuencias de comandos que uso
  • Verificación de shell alias que uso
  • Revise su historial de comandos

(2) Adicionales Secnario

Escenario 1 - sudo y terminal

  1. El usuario de inicio de sesión X de la Ventana
  2. Abra un terminal de windows, realice xhost + localhost
  3. su - UserB o sudo su - UserB , a continuación, abra una nueva terminal (xterm, gnome-terminal, etc)
  4. UserB se muestran como 0.0.0.0 en last -i

su - UserB no se registrará como un UserB inicio de sesión en el pasado, pero la apertura de un terminal.

Escenario 2 - inicio de sesión

  1. ssh en el servidor
  2. tipo sudo login
  3. inicio de sesión como a ti mismo
  4. compruebe last y last -i

last no muestran ningún nombre de host o IP de la login session. last -i será IP 0.0.0.0 para la 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's respuesta ya muestran bloque de código de last.c. La razón last pantalla vacía nombre de host/IP es porque ut_host de los registros son realmente vacía. Para completar wtmp estructura, do man wtmp en cualquier sistema linux.

Los 2 escenarios que aquí se muestra que incluso los paquetes estándar, en cierta situación, ¿no cree como tal.

(3) Bash Historia Hack

Esto sólo funcionará si la sesión de uso bash como shell interactivo.

.bashrc y .bash_profile sólo son utilizadas por bash.

No se obtienen automáticamente si la sesión de utilizar cualquier otro shell(sh, csh, etc) o ejecutar el programa directamente, y no habrá bash historia.

(4) El Proceso De Contabilidad

Desde OP mencionar nada acerca de la secure archivo, voy a suponer que es un callejón sin salida y, de hecho, proporcionan ahora sugerencia.

Si la hipótesis es correcta

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

auth.log(debian)/seguro(CentOS) no será de ayuda. Como sólo relacionadas con la autenticación de acción se registra en ella.

wtmp/utmp, con la limitación en su estructura de datos, es también un callejón sin salida. No hay ninguna información acerca de lo que los creó.

Eso nos deja con una sola opción, el proceso de contabilidad. Esta es un arma grande y tiene que ser usado con precaución.

  1. Tal vez en contra de la política de la empresa
  2. Otros usuarios en un sistema compartido, tal vez infeliz/incómodo habilitado
  3. El archivo de registro puede utilizar una gran cantidad de espacio en disco. Mantenga un ojo en el tamaño del archivo de la tasa de crecimiento.

El psacct versión del paquete debe ser 6.3.2-56 o por encima de, de acuerdo con este post.

Si esto es para ser utilizado, y /var/log ha limitado el espacio, cambiar la cuenta de registro de archivo a un directorio root(sólo acceso) bajo /home, que por lo general tiene mucho más espacio.

Este es realmente el gran cañón. Con OP 10% tasa de incidencia, debe ser el resultado dentro de una semana. Si durante ese período, vacía de entrada se muestran en last pero nada de la cuenta de registro, se ha convertido en un misterio *situación*, y requerirá de una acción drástica.

Siguiente es un ejemplo de salida de 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

También se puede utilizar 'dump-acct' para mostrar más información.

PS1: traté de abrir un par de terminal y sesión de ssh. No está claro (o no es fácil fijar el punto) lo que abre una nueva pts. Sin embargo, no muestran todo lo que corrió dentro de ese pts/sesión.

PS2: UN blog post sobre el uso de acct por un Mike.

8voto

Matthew Ife Puntos 12680

Lo he ejecutado el pasado en un depurador que esperemos que se le de por lo menos algunas respuestas a su pregunta. Mi sensación es la causa root es más profunda, aunque.

¿Por qué duran-te muestro 0.0.0.0 para los pts entradas de línea

La mejor manera de explicar esto es lo que sucede cuando usted dont pass me.

La razón de esto es que en esta sección del código de 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);
}

Ambos usedns y useip (usando las opciones por defecto) no se marcan. Esto hace que la lógica de la copia de la struct p->ut_host , que de acuerdo a man utmp contiene el nombre de inicio de sesión remoto, como fue registrado por lo que escribió en la utmp.

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

En su caso, el valor que aquí se ceros. Es por eso que cuando se ejecute last no aparece nada para usted.

En el caso de last -i , a continuación, dns_lookup se invoca. De este modo se pasa de la entrada (p->ut_addr_v6) para ser resueltos a través de DNS. En su caso este valor también contiene ceros.

La mayoría de dns_lookup es escaparatismo y heusteric. Básicamente, lo que importa es la función getnameinfo. Esta es una llamada de la biblioteca, que en este caso hará su mejor esfuerzo para resolver el valor binario almacenado en la ut_addr_v6. Cuando esta entrada contiene ceros (como en tu caso) que son en realidad la resolución de este a 0.0.0.0 como es lo que sucede con su last -i de salida.

Hay nada (aparte de la actividad maliciosa) que pudiera explicar el comportamiento?

Bueno, probablemente un error o descuido. Su raro ser maliciosos, pues parece estúpido dejar ningún rastro, ya que un atacante en lugar de omitir una dirección de origen.

El foco de las respuestas hasta ahora han estado buscando en el lugar equivocado. last sólo lee utmp o wtmp. Sin embargo, last está haciendo su mejor momento con los datos que tiene.

Su causa root se encuentra en algún lugar de la forma a la que utmp está siendo escrita!

Mientras que algunas aplicaciones de escribir directamente en utmp supongo que la fuente de tus problemas se encuentran en la forma sshd , es el manejo de la gestión de la sesión.

Otro de bash historia de sellado de tiempo, hay otras cosas que puedo hacer para seguir el tema?

utmp por lo general no es modificable y no está destinado a ser. utmp está escrito por las aplicaciones diseñadas para la sesión y la configuración de su sesión. En el caso de que se sshd.

Por qué sshd no es la manipulación de su usuario correctamente es muy extraño como debe ser correctamente la copia en el nombre de la máquina que vino de. Aquí es donde la depuración de los esfuerzos deberían probablemente ser enfocado. Comience con la adición de la salida de depuración de sshd para sus registros y ver si hay algo anómalo.

Si quieres evitar el problema (o, tal vez, incluso, posiblemente, descubrir más sobre el tema), puede utilizar pam_lastlog a gestionar utmp mediante la adición a la sesión de la entrada a /etc/pam.d/sshd.

Como cuestión de hecho, no duele para comprobar si ya está allí-porque pam_lastlog contiene un nohost opción que definitivamente explicar su comportamiento está experimentando.

Por último, no se podía utilizar la última en todo. aulast hace el mismo trabajo a través del subsistema de auditoría.

Podría ser vale la pena intentarlo para ver si se ha conseguido, al menos, escribir la dirección correcta. Si no lo tiene entonces el problema debe ser con sshd como sshd es pasar los nombres de DNS en torno a los diferentes subsistemas como utmp o de auditoría.

5voto

GeekRide Puntos 2615

Cuando usted se conecta a una Máquina, estas podrían ser algunas de las entradas en el último comando.

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)    

La Primera entrada con tty* viene cuando de inicio de sesión a través de la terminal o consola pulsando CTRL+ALT+F1-6. Su bastante claro desde el terminal que está utilizando.

La segunda Entrada que normalmente entra en el cuadro al iniciar la sesión en una Máquina y abra una ventana de terminal en la GUI. También habrá una entrada, incluso si usted abra una nueva Pestaña en la misma ventana de terminal.

El Tercer tipo de Entrada viene al abrir una sesión de pantalla después de estar registrado a través de SSH. Que también creará una entrada y sin ninguna dirección IP.

La cuarta entrada es bastante normal que todo el mundo entiende.

Si no last -i con las siguientes entradas, verás algo como esto:

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)    

Estoy bastante seguro de que su caso está bajo en cualquiera de los 2 casos, uno con la Ventana de terminal en la GUI y el otro con la pantalla de la sesión.

Espero que esta Ayuda.

4voto

John Siu Puntos 2342

script diferencias de comportamiento entre RedHat y Debian

Las Librerías Vinculadas

CentOS 6.3 - script (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 - script (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

Base en la fuente de aguas arriba de código, script de ambas versiones a abrir nuevos pty. La siguiente es la prueba.

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 ha abierto una nueva pts(2). Simplemente no actualización de /var/log/wtmp.

CentOS 6

Estoy saltando de la prueba como ya sabemos que script a abrir pty y registrar con wtmp.

libutemper

  • Proyecto: http://freecode.com/projects/libutempter
  • Descripción: libutempter proporciona una interfaz de la biblioteca para los emuladores de terminal, tales como la pantalla y la xterm para grabar sesiones de usuario a utmp y wtmp archivos.

Así que la principal diferencia parece ser el extra de la biblioteca(libutempter.so.0) CentOS script vinculado con.

Prueba con Ubuntu 12.04

Compilación script con 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)

Pruebas

Antes de ejecutar 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

Dentro de 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

Después de la script final

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

La causa root de emtpy nombre de host

Y sí, script.c hacer crear el wtmp de entrada de vacío con nombre de host. Mira la siguiente bloque de código en util-linux-2.20.1/term-utils/script.c Línea:245-247

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

Base en libutempter-1.1.5/utempter.h

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

Por lo script.c está pasando realmente vacía nombre de host en utempter_add_record.

RedHat Backport

Lo interesante es que, aguas arriba util-linux-ng-2.17.2 en realidad no admite libutempter. Parece Redhat decidió añadió que el apoyo de la espalda.

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

El comando de arriba de devolución de resultados vacío.

Conclusión

Así que la diferencia en el comportamiento entre los dos distros no es un bug, sino una elección. RedHat decidió apoyar esa característica, mientras que Debian omitido.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: