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 .
whoamicaiogroups sem argumentos exibe os grupos do usuário autenticado.
groupscaio adm cdrom sudo dip plugdev lpadmin lxd sambashareQuando um usuário é enviado como argumento, groups exibe os grupos daquele usuário.
groups usuariousuarioListando 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 passwdroot: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/bashNa 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.defsUID_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.
passwdCurrent password:Se o primeiro argumento é um usuário válido, passwd então define ou troca a senha. sudo é necessário.
sudo passwd usuarioA 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 - usuarioA 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.
whoamiusuarioO único grupo do qual faz parte: usuario.
groupsusuarioJá 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 sudoVamos nos autenticar com usuario.
su - usuarioAgora que usuarìo faz parte do grupo sudo, usuario poderá executar qualquer comando que requeira sudo.
sudo adduser -m outro_usuariogetent 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.
exitcaio@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_usuariogetent 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_arquivochmod 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_arquivoAlternativamente 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_arquivoExercícios
Nah. 😃