Provided by: manpages-pt_20040726-4_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 sistema, 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 qualquer 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 terminal 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, liquidando 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 processo 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 inittab, 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_PROCESS,  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  ajustando 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 terminal 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 é desligado.

ARQUIVOS

       /var/run/utmp
       /var/log/wtmp

DE ACORDO COM

       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  configuraçã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 informativa 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 recomendado 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.

VEJA TAMBÉM

       ac(1), date(1), getutent(3), init(8), last(1), login(1), updwtmp(3), who(1)

TRADUZIDO POR LDP-BR em 21/08/2000.

       André  L.  Fassone  Canova  <lonelywolf@blv.com.br>  (tradução)  Carlos  Augusto   Horylka
       <horylka@conectiva.com.br> (revisão)

                                            2/07/1997                                     UTMP(5)