O mau comportamento da contabilidade do sistema no MacOS X (Yosemite)?

1

Em todos os meus Unixes (CentOS, FreeBSD, MacOS X) eu ativo a contabilidade do sistema como uma regra básica de segurança.

No MacOS X (Yosemite, 10.10.3), vejo um mau comportamento que estou investigando para corrigir.

Toda vez que executo lastcomm para analisar um conjunto recente de processos terminados, acho que os processos realmente terminaram, mas com datas vindas do futuro, como neste exemplo:

••My_Mac••$ lastcomm | more
lastcomm   -X      bob      ttys007    0.00 secs Mon Jul 26 14:13 (0:00:03.05)
more       -       bob      ttys007    0.00 secs Mon Jul 26 14:13 (0:00:03.05)
stty       -       bob      ttys007    0.00 secs Mon Jul 26 14:13 (0:00:00.05)
path_helpe -       bob      ttys007    0.00 secs Mon Jul 26 14:13 (0:00:00.50)
sshd       -SF     _sshd    __         0.00 secs Mon Jan 27 17:31 (0:00:04.91)
procmail   -S      bob      __         0.00 secs Mon Jul 26 14:11 (0:00:00.09)
cron       -F      root     __         0.00 secs Mon Jun  1 13:10 (0:00:00.33)
sendmail   -S      root     __         0.00 secs Mon Jun  1 13:10 (0:00:00.31)
postdrop   -       root     __         0.00 secs Mon Jun  1 13:10 (0:00:00.09)
[...]
••My_Mac••$ date
Mon Jun  1 13:12:07 CEST 2015
••My_Mac••$

Primeiro, o problema não é tão simples quanto um erro de fuso horário:

26 de julho, 14:13 (timestamp errado) e 1 de junho, 13:10 (timestamp correto) são muitos dias depois.

Este não é um grande desvio de tempo causado por um uso incorreto de date . Além disso, este servidor é ntp sincronizado em um servidor de 1 ntp .

Alguém mais viu o mesmo mau comportamento?
Você vê um caminho para investigar melhor esse problema?
Isto é um erro conhecido?     
por daniel Azuelos 01.06.2015 / 13:28

1 resposta

2

Encontrou o mesmo mau comportamento no ElCapitan (MacOSX 10.11 ..). Na investigação, viu que os dados de registro de data e hora no arquivo / var / account / acct estavam corretos. Compilando a fonte do lastcomm.c no link
mostrou a mensagem do compilador "aviso: tipos de ponteiro incompatíveis passando 'u_int32_t *' (também conhecido como 'não assinado int *') para o parâmetro do tipo 'const time_t *' (também conhecido como 'const long *')"

O patch a seguir para corrigir o registro de data e hora da má contabilização funcionou para mim no ElCapitan. Pode funcionar para Yosemite (10.10 ..) e antes.

*** lastcomm.c  2016/08/26 19:44:23 1.1
--- lastcomm.c  2016/08/27 00:30:49 1.2
***************
*** 135,138 ****
--- 135,140 ----
        if (!*argv || requested(argv, &ab)) {

+           time_t timelong;
+           timelong = ab.ac_btime;
            t = expand(ab.ac_utime) + expand(ab.ac_stime);
            (void)printf(
***************
*** 144,148 ****
                 user_from_uid(ab.ac_uid, 0), UT_LINESIZE,
                 UT_LINESIZE, getdev(ab.ac_tty),
!                t / (double)AHZ, ctime(&ab.ac_btime));
            delta = expand(ab.ac_etime) / (double)AHZ;
            printf(" (%1.0f:%02.0f:%05.2f)\n",
--- 146,150 ----
                 user_from_uid(ab.ac_uid, 0), UT_LINESIZE,
                 UT_LINESIZE, getdev(ab.ac_tty),
!                t / (double)AHZ, ctime(&timelong));
            delta = expand(ab.ac_etime) / (double)AHZ;
            printf(" (%1.0f:%02.0f:%05.2f)\n",
    
por 27.08.2016 / 02:52