Provided by: manpages-pt_20040726-2_all bug
 

NOME

        utmp, wtmp - Registro de login
 

SINOPSE

        #include <utmp.h>
 

DESCRI O

        O  arquivo  utmp  permite  a  descoberta de informações sobre quem está
        usando o sistema atualmente. Pode ter mais que um usuário usando o sis‐
        tema, por que nem todos programas usam o registro utmp.
 
        Advert   ncia:  utmp não deve ter autorização para escrita, porque muitos
        programas de sistema  (imprudentemente)  dependem  desta  intergridade.
        Você  arrisca  falsificar  os arquivos de log do sistema e modificações
        dos arquivos de sistema se você autorizar a escrita em utmp para  qual‐
        quer usuário.
 
        O  arquivo é um seqüencia de entrada com a seguinte estrutura declarada
        no arquivo include (note que isto é somente uma de várias definições ao
        redor de; detalhes depende da versão da libc):
 
               #define UT_UNKNOWN            0
               #define RUN_LVL               1
               #define BOOT_TIME             2
               #define NEW_TIME              3
               #define OLD_TIME              4
               #define INIT_PROCESS          5
               #define LOGIN_PROCESS         6
               #define USER_PROCESS          7
               #define DEAD_PROCESS          8
               #define ACCOUNTING            9
 
               #define UT_LINESIZE           12
               #define UT_NAMESIZE           32
               #define UT_HOSTSIZE           256
 
               struct exit_status {
                 short int e_termination;    /* status de terminação do processo. */
                 short int e_exit;           /* status de saída do processo. */
               };
 
               struct utmp {
                 short ut_type;              /* tipo de login */
                 pid_t ut_pid;               /* pid do processo de login */
                 char ut_line[UT_LINESIZE];  /* no do dispositivo tty - "/dev/" */
                 char ut_id[4];              /* init id ou abreviação do nome do dispositivo tty */
                 char ut_user[UT_NAMESIZE];  /* nome do usuário */
                 char ut_host[UT_HOSTSIZE];  /* nome da máquina para login remoto */
                 struct exit_status ut_exit; /* O status de saída do processo
                          marcado como DEAD_PROCESS. */
                 long ut_session;            /* session ID, usado para windowing */
                 struct timeval ut_tv;       /* hora de entrada. */
                 int32_t ut_addr_v6[4];      /* endereço IP de máquina remotas. */
                 char pad[20];               /* Reservado para uso futuro. */
               };
 
               /* Hacks para compatibilidade pregresa. */
               #define ut_name ut_user
               #ifndef _NO_UT_TIME
               #define ut_time ut_tv.tv_sec
               #endif
               #define ut_xtime ut_tv.tv_sec
               #define ut_addr ut_addr_v6[0]
 
        Esta  estrutura fornece o nome do arquivo especial associado com o ter‐
        minal do usuário, o nome de login do usuário, e  a  hora  de  login  na
        forma  de  time(2).   Campos  de cadeia de caracteres são terminado por
             \0      se eles forem mais curtos que o tamanho do campo.
 
        A primeira entrada sempre criado resulta do processamento de init(8) em
        inittab(5).  Antes  um entrada é processada, de qualquer forma, init(8)
        coloca em ordem utmp pela colocação de ut_type para DEAD_PROCESS,  liq‐
        uidando  ut_user,  ut_host e ut_time com bytes nulos para cada registro
        no qual ut_type não é DEAD_PROCESS ou RUN_LVL e onde  não  existe  pro‐
        cesso com PID ut_pid. Se registros não vazios com o necessário podem se
        encontrados ut_id, init cria um novo. Ele fixa ut_id a partir de  init‐
        tab,  ut_pid e ut_time para valores atuais e ut_type para INIT_PROCESS.
 
        getty(8) localiza a entrada pelo pid, alterando ut_type para LOGIN_PRO     
        CESS,  alterando  ut_time, ajustando ut_line e aguardando que a conexão
        possa ser estabeleciada. login(8), depois que um usuário é autenticado,
        alteração  de  ut_type  para USER_PROCESS, alteração de ut_time e ajus‐
        tando ut_host e ut_addr. Dependendo de getty(8) e  login(8),  registros
        pode ser localizados por ut_line no lugar do preferido ut_pid.
 
        Quando init(8) encontra um processo que já saiu, ele localiza a entrada
        dele em utmp por ut_pid,  ajusta  ut_type  para  DEAD_PROCESS  e  limpa
        ut_user, ut_host e ut_time com bytes nulos.
 
        xterm(1)  e outros emuladores de terminal criam diretamente um registro
        USER_PROCESS e geram o ut_id  pelo  uso  das  duas  últimas  letras  de
        /dev/ttyp%c  ou  pelo  uso  de  p%d  para /dev/pts/%d. Se eles acham um
        DEAD_PROCESS para esta id, eles reutilizam esta, de  outra  forma  eles
        criam  uma  nova  entrada.  Se eles puderem, eles irão marcar isto como
        DEAD_PROCESS na saída e isto é avisado  que  eles  são  nulos  ut_line,
        ut_time, ut_user and ut_host também.
 
        xdm(8)  não deveria criar um registro utmp, por que não havia um termi‐
        nal assinalado. Deixando ele criar em irá  rsular  em  problemas  como:
        finger:  não  pode  iniciar  /dev/machine.dom.   Ele  deveria  criar as
        entradas wtmp, de qualquer forma, justamnete como ftpd(8) faz.
 
        telnetd(8) ajusta para LOGIN_PROCESS  entrada  e  deixa  o  resto  para
        login(8)  como  usual.  Depois  que terminar a seção telnet, telnetd(8)
        limpa utmp na forma descrita.
 
        O campo wtmp registra todos os logins  e  logouts.  O  formato  dele  é
        exatamente como utmp excto que um nome de usuário nulo indica um logout
        no termina; associado. Além do mais, o nome do termina; "~" com o  nome
        do ususário "shutdown" ou "reboot" indicam um sistema em desigamento ou
        em reinicialização e  o  par  de  nomes  de  terminal  "|"/"}"  logs  o
        velho/novo tempo de sistema quando a date(1) é alterada. wtmp é mantido
        por login(1), e init(1) e algumas versões de getty(1). Nenhum  do  dois
        programas  criam o arquivo, assim se ele é removido o registro é desli‐
        gado.
 

ARQUIVOS

        /var/run/utmp
        /var/log/wtmp
        As entradas utmp conforme nenhum dos dois v7/BSD nem para o SYSV:  Eles
        são  uma  mistura  do dois. v7/BSD tem poucos campos; o mais importante
        ele caresce de ut_type, no qual processos nativos v7/BSD como programas
        para  exibir  (por exemplo) entrada dead ou login. Além disto não havia
        um arquivo de configuração na qual determina slots para a  sessão.  BSD
        faz  assim,  porque  ele  caresce  dos  campos ut_id. No Linux (como no
        SYSV), o campo ut_id de um registro nunca deverá ser alterado logo ele,
        o  qual  preserva registros slot sem a necessiada de um arquivo de con‐
        figuração. Limpado ut_id pode resultar na saída de condições dominantes
        para  as  entradas  utmp  corrompidas  e  posíveis  furos de segurança.
        Limpando os campos mencionados acima saciando eles com butes nuloas ele
        não segue a semantica SYSV, mas ele permite executar muitos programas o
        qual assume a semântica do BSD e cada qual não  modifica  utmp.   Linux
        usa as convenções BSD para linha de conteúdo, como documentado.
 
        SYSV  somente  usa o tipo de campo para marcar eles e mensagem informa‐
        tiva de logs como por exemplo  "new time" na linha do campo. UT_UNKNOWN
        aparenta  ser uma invenção do Linux.  SYSV não tem os campos ut_host ou
        ut_addr_v6.
 
        Diferente de vários outros sistemas, onde o logging de utmp  podem  ser
        desativados pela remoção do arquivo, utmp sempre deve exister no Linux.
        Se você procurar desabilitar who(1)  então  não  faça  a  palavra  utmp
        legivel.
 
        Note  qye  a  estrutura  utmp vinda da libc5 foi alterada na libc6. Por
        causa disto, binários usando a estrutura  da  libc5  serão  corrompidos
        /var/run/utmp  e/ou  /var/log/wtmp.  Sistema Debian incluem um patch da
        libc5 que usa o novo formato do utmp.  O problema ainda existe com wtmp
        desde que ele seja diretamente acessado pela libc5.
 

RESTRIC ES

        O  formato  do arquivo é dependente da máquina, que assim seja recomen‐
        dado que ele será processado somente na arquitetura da máquina onde foi
        criado.
 

PROBLEMAS

        Esta  página  é  baseada  no  libc5,  possivelmente  a ação trabalhe de
        maneira distinta agora.
        ac(1), date(1), getutent(3), init(8),  last(1),  login(1),  updwtmp(3),
        who(1)
        André  L.  Fassone  Canova  <lonelywolf@blv.com.br>  (tradução)  Carlos
        Augusto Horylka <horylka@conectiva.com.br> (revisão)
 
                                    2/07/1997                           UTMP(5)