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)