Gerenciamento de usuários no Bash
Curso de Bash
Seção do curso de Bash sobre como criar (useradd), editar (usermod) e remover (userdel) usuários.
Conteúdo
Qual meu usuário e grupo?
Execute whoami
para verificar o usuário autenticado .
whoami
caio
groups
sem argumentos exibe os grupos do usuário autenticado.
groups
caio adm cdrom sudo dip plugdev lpadmin lxd sambashare
Quando um usuário é enviado como argumento, groups
exibe os grupos daquele usuário.
groups usuario
usuario
Listando usuários com getent
O comando getent
lista entradas em bases de dados. Entre as bases temos passwd
, que é a base de dados dos usuários do sistema e usuários comuns.
A base de dados deve ser informada como primeiro argumento para getent
. Do segundo argumento em diante podemos enviar, opcionalmente, chaves que restrigirão apenas entradas correspondentes às chaves.
getent passwd
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
games:x:5:60:games:/usr/games:/usr/sbin/nologin
## Saída suprimida...
caio:x:1000:1000:Caio Santesso,,,:/home/caio:/bin/bash
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
gnome-initial-setup:x:125:65534::/run/gnome-initial-setup/:/bin/false
gdm:x:126:134:Gnome Display Manager:/var/lib/gdm3:/bin/false
Cada linha representa um usuário. A maioria sendo usuários de sistema, com os quais não podemos nos autenticar.
Verificando usuários comuns
O único usuário comum neste SO é caio
.
caio:x:1000:1000:Caio Santesso,,,:/home/caio:/bin/bash
Na terceira coluna (cada coluna é limitada por :
) temos 1000
que é o UID do usuário. UID é um identificador único para cada usuário, seja usuário de sistema ou usuário comum.
Usuários comuns geralmente tem UID 1000 ou maior.
Vamos então confirmar o UID mínimo no SO que estou utilizando filtrando a linha contendo UID_MIN
no arquivo /etc/login.defs
.
grep UID_MIN /etc/login.defs
UID_MIN 1000
#SYS_UID_MIN 100
Com essa informação podemos informar agora ao getent
os UIDs possíveis para usuários comuns e então obter a lista.
{1000..9999}
é uma expansão de chaves. Bash gerará um lista de números entre 1000 e 9999 e cada um deles será enviado como argumento. Abordaremos expansões em capítulos posteriores.
getent passwd {1000..9999}
caio:x:1000:1000:Caio Santesso,,,:/home/caio:/bin/bash
⚠️ 9999
é um número arbitrário. Ao criarmos um usuário podemos definir um UID maior que 9999, fato que faria com que o usuário não fosse exibido no comando acima. Porém se não definirmos, o UID será incrementado de um em um para cada novo usuário.
Adicionando usuários com useradd
useradd
cria usuários comuns. Operação que precisa de privilégios elevados, portanto sudo
deve ser especificado antes de useradd
.
A opção -m
criará um diretório de usuário em /home
e a opção -s
definirá o shell padrão para o usuário a ser criado.
sudo useradd -m -s /bin/bash usuario
[sudo] password for caio:
A base de dados passwd
, arquivo localizado em /etc/passwd
, passa a exibir o novo usuário. Note na sexta coluna (cada coluna é limitada por :
) o diretório de usuário.
getent passwd {1000..9999}
caio:x:1000:1000:Caio Santesso,,,:/home/caio:/bin/bash
usuario:x:1001:1001::/home/usuario:/bin/bash
Mudando senha com passwd
passwd
é o comando para definirmos ou trocarmos senha de usuário.
Sem argumentos, passwd
troca a senha do usuário atual.
passwd
Current password:
Se o primeiro argumento é um usuário válido, passwd
então define ou troca a senha. sudo
é necessário.
sudo passwd usuario
A primeira senha solicitada é a do usuário atual para que sudo
conceda privilégios de super usuário para a operação.
E então a nova senha para o usuário é requerida duas vezes.
[sudo] password for caio:
New password:
Retype new password:
passwd: password updated successfully
Autenticando com su
Uma vez que o novo usuário tenha uma senha definida, será possível utilizá-lo na autenticação por meio de interface gráfica ou terminal.
Para utilizar o usuário apenas para executar um comando: sudo
com a opção -u
seguida pelo usuário e então o comando a ser executado.
sudo -u usuario whoami
⚠️ Perceba que a senha requisitada é a senha do usuário executando sudo
.
[sudo] password for caio:
usuario
Utilize su
mais a opção -
ou -l
para autenticar-se como outro usuário.
su - usuario
A senha do usuário enviado como argumento será solicitada e então o prompt para o usuário será exibido.
Password:
usuario@FX505DV:~$
Para sair da sessão de usuario
pressione Ctrl
+ D
ou execute o comando exit
.
O que são grupos?
Grupo de usuário é uma coleção de usuários.
Grupos facilitam a administração de privilégios para usuários já que todos os privilégios garantidos à um grupo são estendidos aos seus usuários.
Grupo primário é o grupo criado ao mesmo tempo que o usuário e carrega o mesmo nome. O próprio usuário é o único integrante do grupo. É o grupo associado ao arquivo/diretório criado pelo usuário.
O usuário autenticado usuario
.
whoami
usuario
O único grupo do qual faz parte: usuario
.
groups
usuario
Já grupos secundários são grupos com zero ou mais integrantes
Adicionando usuários em grupos com usermod
Como visto na seção anterior, usuario
não faz parte de nenhum grupo secundário.
A opção -G
do comando usermod
permite redefinir os grupos secundários no qual o usuário faz parte. Grupos especificados serão adicionados, grupos não mencionados do qual o usuário faz parte serão removidos a não ser que a opção -a
esteja presente.
Abaixo usuario
é incluído no grupo sudo
.
sudo usermod -Ga sudo usuario
groups usuario
usuario sudo
Vamos nos autenticar com usuario
.
su - usuario
Agora que usuarìo
faz parte do grupo sudo
, usuario
poderá executar qualquer comando que requeira sudo
.
sudo adduser -m outro_usuario
getent passwd {1000..9999}
caio:x:1000:1000:Caio Santesso,,,:/home/caio:/bin/bash
usuario:x:1001:1001::/home/usuario:/bin/bash
outro_usuario:x:1002:1002::/home/outro_usuario:/bin/sh
exit
ou Ctrl
+ D
para sairmos da sessão de usuario
.
exit
caio@FX505DV:~$
Para remover usuario
do grupo sudo
podemos redefinir a lista de grupos secundários.
sudo usermod -G '' usuario
⚠️ O efeito não é imediato, apenas na próxima autenticação o usuário estará sem os privilégios do grupo.
Removendo usuários com userdel
userdel
remove usuários. Sua opção -r
remove o diretório de usuário.
sudo userdel -r outro_usuario
getent passwd {1000..9999}
caio:x:1000:1000:Caio Santesso,,,:/home/caio:/bin/bash
usuario:x:1001:1001::/home/usuario:/bin/bash
Alterando usuário dono de arquivo/diretório com chown
chown
altera para o usuário especificado no primeiro argumento a propriedade do arquivo/diretório especificado no segundo argumento.
Abaixo arquivo criado pelo usuário caio
.
touch seu_arquivo
ls -l seu_arquivo
-rw-rw-r-- 1 caio caio 0 Nov 9 22:06 seu_arquivo
chmod
transfere a propriedade do arquivo de caio
para usuario
, retendo a informação sobre o grupo caio
.
sudo chown usuario seu_arquivo
ls -l seu_arquivo
-rw-rw-r-- 1 usuario caio 0 Nov 9 22:06 seu_arquivo
Alternativamente o primeiro argumento de chmod
pode ser um grupo, para tanto basta adicionar :
à frente do grupo.
sudo chown :usuario seu_arquivo
ls -l seu_arquivo
-rw-rw-r-- 1 usuario usuario 0 Nov 9 22:06 seu_arquivo
Exercícios
Nah. 😃