Linux - Gerenciando Grupos
No Linux, um usuário pode ser membro de diferentes grupos. Antes de tudo, cada usuário tem pelo menos um grupo principal. (Se um usuário não tiver um grupo principal, ele não poderá entrar no sistema). Normalmente, ao criar um usuário, opara ele é atribuído um grupo principal com o mesmo nome.
Além disso, o usuário pode pertencer a grupos adicionais. A diferença mais importante entre o grupo principal e outros grupos é que o grupo principal automaticamente se torna o grupo proprietário de qualquer novo arquivo criado pelo usuário.
Obtendo o Grupo
O identificador do grupo principal ou GID do usuário é armazenado no quarto campo do arquivo /etc/passwd
. Por exemplo, obtenha informações sobre o usuário superuser1
deste arquivo:
programicio@Programicio:~$ sudo grep superuser1 /etc/passwd superuser1:x:1001:1001::/home/superuser1:/bin/sh
Aqui, vemos que o grupo do usuário é 1001
. Vamos obter apenas o valor do quarto campo:
programicio@Programicio:~$ sudo grep superuser1 /etc/passwd | cut -d : -f 4 1001
O comando groups
permite obter todos os grupos do usuário. Este comando recebe o nome do usuário como argumento. Por exemplo, obtenha a lista de grupos do usuário root
:
programicio@Programicio:~$ groups root root : root
Como podemos ver, root
pertence ao grupo com o mesmo nome. Se o nome não for especificado, é exibida a lista de grupos do usuário atual:
programicio@Programicio:~$ groups programicio adm cdrom sudo dip plugdev users lpadmin
Adicionando um Grupo com groupadd
O comando groupadd
adiciona um novo grupo ao sistema. Ele tem a seguinte sintaxe:
groupadd [options] GROUP
O parâmetro obrigatório GROUP
é o nome do grupo. Também podem ser passados parâmetros opcionais, dos quais destacamos os seguintes:
-g, --gid GID
: define o GID para o novo grupo.-p, --password PASSWORD
: aplica uma senha para o novo grupo.-U, --users USERS
: define a lista de usuários membros deste grupo.
Por exemplo, vamos criar o grupo developers:
sudo groupadd developers
Obtendo Grupos
Todos os grupos criados são armazenados no arquivo /etc/group
. Se o abrirmos, veremos um conteúdo semelhante ao seguinte:
root:x:0: daemon:x:1: bin:x:2: sys:x:3: ................. programicio:x:1000: superuser1:x:1001: developers:x:1002:
Cada linha no arquivo descreve um grupo específico e é composta por quatro campos separados por dois pontos:
- O primeiro campo representa o nome do grupo.
- O segundo campo armazena a senha do grupo (o caractere
!
significa que a senha não é permitida para este grupo). Na maioria dos grupos, o campo de senha contém o símbolox
, o que indica que a informação sobre a senha do grupo está armazenada no arquivo/etc/gshadow
. No entanto, na prática, senhas de grupos são raramente usadas, e em algumas distribuições Linux, o arquivo/etc/gshadow
nem sequer existe. - O terceiro campo contém o identificador único do grupo ou GID.
- O último campo contém os nomes dos membros do grupo (apenas para usuários para os quais este não é o grupo principal).
Quando um usuário cria um arquivo, seu grupo principal é automaticamente atribuído como grupo proprietário do arquivo. Isso significa que todos os membros de um grupo geralmente podem acessar o arquivo.
Por Que Usar uma Senha de Grupo?
Se um usuário quiser criar arquivos cujo grupo proprietário seja diferente do grupo principal, ele pode usar o comando newgrp
. Por exemplo, newgrp developers
define developers
como o grupo principal do usuário. Este comando funcionará sem problemas se o usuário for membro do grupo developers
. No entanto, se o usuário não for membro desse grupo, o console solicitará que ele insira a senha do grupo.
Verificando a Existência de um Grupo
Podemos verificar a existência de um grupo usando o comando cat /etc/group | grep nome_do_grupo
:
programicio@Programicio:~$ cat /etc/group | grep developers developers:x:1002:
Aqui, vemos que o GID do grupo developers
é 1002
.
Adicionando um Usuário a um Grupo
Por exemplo, digamos que anteriormente criamos um usuário superuser1
:
sudo useradd superuser1
Vamos adicionar esse usuário ao grupo developers
:
programicio@Programicio:~$ sudo usermod -aG developers superuser1 programicio@Programicio:~$ id superuser1 uid=1001(superuser1) gid=1001(superuser1) groups=1001(superuser1),1002(developers)
Ao verificar o grupo developers
, veremos que há um novo usuário:
programicio@Programicio:~$ cat /etc/group | grep developers developers:x:1002:superuser1
Ao verificar o grupo developers
, veremos que há um novo usuário:
programicio@Programicio:~$ cat /etc/group | grep developers developers:x:1002:superuser1
Modificando um Grupo com groupmod
O comando groupmod
altera um grupo existente:
groupmod [options] GROUP
O parâmetro obrigatório GROUP
é o nome do grupo. Também podem ser passados parâmetros opcionais, entre os quais destacamos os seguintes:
-a, --append
: adiciona os usuários especificados na opção-U
ao grupo, sem remover os membros já existentes.-g, --gid GID
: altera o identificador do grupo para o GID especificado.-n, --new-name NEW_GROUP
: muda o nome do grupo paraNEW_GROUP
.-p, --password PASSWORD
: altera a senha do grupo.-U, --users USERS
: define a lista de usuários membros do grupo.
Por exemplo, para mudar o nome do grupo developers
para testers
:
sudo groupmod -n testers developers
Verificando a Integridade do Grupo com grpck
O comando grpck
verifica a integridade dos grupos. Ele assegura que todas as grupos listadas no arquivo /etc/group
tenham entradas válidas no arquivo de senhas /etc/passwd
. O comando é executado da seguinte forma:
sudo grpck -r /etc/passwd
Removendo um Grupo com groupdel
O comando groupdel
remove um grupo:
groupdel [options] GROUP
O parâmetro obrigatório GROUP
é o nome do grupo. Por exemplo, para remover o grupo testers
:
sudo groupdel -f testers
A opção -f
permite forçar a remoção do grupo, mesmo que seja o grupo principal de algum usuário.