Posso definir uma data / hora única para um único usuário no Ubuntu?

0

Existe uma maneira de dar aos usuários diferentes datas e horários únicos no Ubuntu?

Por exemplo, se eu quisesse que a data fosse sempre 22 de junho para o usuário Bob (porque é seu aniversário), mas ainda tenha a exibição de data / hora correta para todos os outros usuários, existe uma maneira direta ou não de fazer então?

    
por tel 31.05.2011 / 21:16

1 resposta

1

Não há necessidade de hackear o kernel. Isso seria relativamente fácil com uma biblioteca de interposição, assumindo que as formas que Bob usa para saber o tempo são limitadas.

Por exemplo, muitos comandos como date (1) estão usando clock_gettime (2) para obter a data e a hora atuais. Uma biblioteca interposta corrigia a data e definia a data de 22 de junho.

Isso não funciona com binários vinculados estaticamente, como o busybox, mas esses binários podem ser facilmente corrigidos da mesma maneira.

Aqui está um código de exemplo que demonstra a viabilidade:

#define _GNU_SOURCE
#include <stdio.h>
#include <stdint.h>
#include <time.h>
#include <dlfcn.h>
#include <unistd.h>
#include <sys/types.h>

int clock_gettime(clockid_t clk_id, struct timespec *tp)
{
    static int (*cgt)(clockid_t, struct timespec*) = NULL;
    if (!cgt)
        cgt = dlsym(RTLD_NEXT, "clock_gettime");

    int rv = cgt(clk_id, tp);
    if(getuid()==1000) // Assuming 1000 is bob's uid.
    {
        struct tm * tm=localtime(&tp->tv_sec);
        tm->tm_mday=22;
        tm->tm_mon=5;
        time_t tt=mktime(tm);
        tp->tv_sec=tt;
    }
    return rv;
}

E o que ele oferece:

$ date
Wed Jun  2 23:44:51 CEST 2011
$ export LD_PRELOAD=$PWD/a.so
$ date
Wed Jun 22 23:44:51 CEST 2011
$ id -u
1000
    
por 31.05.2011 / 22:30