Linux - Obtendo Informações sobre Usuários
Comando id
O comando id
permite obter informações sobre um usuário. Este comando recebe o login do usuário como parâmetro. Se o login não for fornecido, são exibidas informações sobre o usuário atual. Por exemplo, para obter informações sobre o usuário atual:
programicio@Programicio:~$ id uid=1000(programicio) gid=1000(programicio) groups=1000(programicio),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),100(users),118(lpadmin)
Para obter dados do usuário "root":
programicio@Programicio:~$ id root uid=0(root) gid=0(root) groups=0(root)
Usuários Logados
O comando users
exibe a lista de todos os usuários logados no momento. Em um computador pessoal, geralmente há apenas um usuário trabalhando no momento:
programicio@Programicio:~$ users programicio programicio
No exemplo acima, o único usuário logado é "programicio". Em máquinas servidoras, pode haver vários usuários logados simultaneamente.
Para obter informações mais detalhadas, utiliza-se o comando who
:
programicio@Programicio:~$ who programicio seat0 2024-03-08 18:34 (login screen) programicio tty2 2024-03-08 18:34 (tty2)
Se o comando for executado em um servidor ao qual os usuários se conectam remotamente, ele também exibirá os endereços IP desses usuários.
Para ver o que um usuário está fazendo, pode-se usar o comando w
:
19:14:33 up 41 min, 2 users, load average: 0.35, 0.27, 0.26 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT programicio seat0 login- 18:34 0.00s 0.00s ? /usr/libexec/gd programicio tty2 tty2 18:34 41:05 0.00s ? /usr/libexec/gd
Esse comando mostra os nomes de todos os usuários conectados, a origem e o horário de login, a estatística atual de uso e qual programa estão utilizando no momento (ou o último utilizado).
Ao observar a saída, pode surgir a pergunta: por que o usuário atual aparece duplicado na lista de usuários logados? Nos primórdios do Unix, cada entrada no sistema era um terminal (tty1, tty2, ...). Ao logar no sistema, era adicionada uma entrada no arquivo utmp. Os comandos w
e who
consultam o arquivo utmp para exibir os usuários logados.
O login gráfico na área de trabalho não possui um terminal, mas ainda é necessário fazer uma entrada no utmp. Cada terminal ou shell aberto a partir da área de trabalho também deve ter uma entrada no utmp (tty1, tty2, ...). O utmp não distingue a primeira entrada no sistema dos terminais subsequentes. Contudo, com o comando loginctl
, é possível ver os usuários logados sem duplicação:
programicio@Programicio:~$ loginctl SESSION UID USER SEAT TTY 2 1000 programicio seat0 tty2 1 sessions listed.
Obtendo Informações Detalhadas sobre um Usuário Específico
Para verificar informações sobre um usuário específico, podemos usar o arquivo /etc/passwd. Este arquivo tem a seguinte estrutura:
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync man:x:6:12:man:/var/cache/man:/usr/sbin/nologin ...
O arquivo /etc/passwd
utiliza diferentes campos para armazenar as propriedades do usuário. Esses campos são separados por dois pontos. Especificamente, cada linha representa os seguintes campos (da esquerda para a direita):
- Nome de usuário
- Senha
- UID (identificador do usuário)
- GID (identificador do grupo principal do usuário)
- GECOS (comentário)
- Diretório home do usuário
- Shell de login
No Linux, também podemos obter a informação necessária via terminal usando o comando grep
. Por exemplo, se tivermos criado anteriormente um usuário chamado superuser1
usando o comando useradd -m superuser1
, podemos obter seus dados com:
programicio@Programicio:~$ grep superuser1 /etc/passwd superuser1:x:1001:1001::/home/superuser1:/bin/sh
A saída obtida contém vários componentes, que são separados por dois pontos. Em particular:
- superuser1: login do usuário
x
: indica que a senha é armazenada no arquivo/etc/shadow
1001
: UID1001
: GID::
: indica ausência de comentário/home/superuser1
: diretório home do usuário/bin/bash
: shell de login
Um administrador pode editar manualmente o arquivo /etc/passwd
. No entanto, recomenda-se usar o comando vipw
em vez de um editor de texto comum. Esse comando representa uma versão adaptada do editor Vi, especialmente projetada para editar arquivos importantes como esse. Qualquer erro pode ter consequências graves, como ninguém conseguir fazer login no sistema. Portanto, ao alterar o arquivo manualmente, deve-se verificar sua integridade. O comando vipw
faz isso automaticamente, mas também pode ser feito manualmente com o comando pwck
.