Este site usa cookies e tecnologias afins que nos ajudam a oferecer uma melhor experiência. Ao clicar no botão "Aceitar" ou continuar sua navegação você concorda com o uso de cookies.

Aceitar

Parte 7 - Permissões de Usuários e Grupos no Linux

Junte-se a mais de 1000 pessoas

Entre para nossa lista e receba conteúdos exclusivos e com prioridade

O Gerenciamento de Usuários é o ponto de partida para qualquer administrador de sistemas Linux. Ao criar e gerenciar usuários, você está efetivamente fornecendo identidades para as pessoas que acessam o sistema.

A criação de um usuário envolve a alocação de um nome de usuário (ou login), um número de identificação único (UID) e um diretório inicial onde o usuário terá sua própria área de trabalho.

Ao adicionar um novo usuário com o comando useradd você está iniciando uma jornada. Pode ser um novo membro da sua equipe, um estudante em uma sala de aula virtual ou um colaborador externo que precisa de acesso temporário ao seu sistema.

Eles agora têm um “cartão de acesso” para o seu mundo Linux. Além disso, configurar senhas, diretórios iniciais e configurações de shell faz parte do processo.

Lembre-se de que o arquivo /etc/passwd mantém as informações básicas sobre os usuários, como seus nomes de usuário e UIDs, enquanto as senhas são armazenadas de forma segura no arquivo /etc/shadow. Este é o início da jornada, mas é um dos pontos mais críticos para garantir que o acesso seja concedido de maneira segura.

Veja a sequência de comandos abaixo quanto ao gerenciamento de usuários utilizando o Ubuntu Linux:

mkdir Documentos

Este comando cria um novo diretório chamado “Documentos” no diretório atual. Isso é feito usando o comando mkdir que é abreviação de “make directory“. O diretório “Documentos” agora será criado dentro do diretório em que você está atualmente.

export EDITOR=/usr/bin/vim

Neste comando, você está definindo a variável de ambiente EDITOR para apontar para o executável do editor de texto Vim (/usr/bin/vim). Esta variável é usada por muitos programas no Linux para determinar qual editor de texto deve ser usado ao editar arquivos de configuração ou mensagens.

useradd teste

Este comando cria um novo usuário chamado “teste” no sistema. O comando useradd é usado para adicionar novos usuários ao sistema Linux.

id teste

O comando id é usado para exibir informações sobre um usuário específico. Neste caso, está mostrando informações sobre o usuário “teste”, como seu UID (User ID), GID (Group ID) e grupos aos quais ele pertence.

passwd teste

Este comando é usado para definir a senha do usuário “teste”. Você será solicitado a inserir e confirmar a nova senha. A senha é armazenada de forma segura no arquivo /etc/shadow.

passwd -n 30 -w 3 -x 90 teste

Aqui, você está configurando políticas de senha para o usuário “teste”. Os parâmetros utilizados são:

-n 30: Define o número mínimo de dias que uma senha deve estar em uso antes de poder ser alterada novamente (neste caso, 30 dias).
-w 3: Define o número de dias de aviso antes que uma senha expire, permitindo que o usuário saiba que a senha está prestes a expirar (neste caso, 3 dias).
-x 90: Define o número máximo de dias que uma senha é válida antes que o usuário seja solicitado a alterá-la (neste caso, 90 dias).

chage -l teste

O comando chage é usado para exibir informações detalhadas sobre as configurações de senha do usuário “teste”, incluindo os parâmetros de senha que você definiu anteriormente.

for i in teste beto bob; do useradd $i; done

Este comando é um loop `for que cria vários usuários de uma só vez. Ele cria três novos usuários: “teste”, “beto” e “bob”. O comando useradd é executado em cada iteração do loop, adicionando cada um desses nomes de usuário ao sistema.

grep beto /etc/passwd /etc/shadow /etc/group

O comando grep é usado para pesquisar arquivos em busca de padrões. Neste caso, você está procurando o nome de usuário “beto” nos arquivos /etc/passwd, /etc/shadow e /etc/group. Esses arquivos contêm informações sobre usuários, senhas e grupos no sistema, respectivamente.

O comando mostrará qualquer linha que contenha o nome de usuário “beto” nesses arquivos, permitindo que você veja informações relevantes sobre o usuário.

Gerenciamento de Grupos

Os grupos são uma maneira eficaz de organizar usuários com interesses e permissões comuns. Se pensar nos usuários como membros de um clube, os grupos são os próprios clubes. Cada usuário deve pertencer a pelo menos um grupo, chamado de “grupo principal”, e pode ser membro de vários grupos secundários.

O gerenciamento de grupos permite que você organize os recursos e os direitos de acesso. Pode ser um grupo de desenvolvedores que precisam de acesso a determinados diretórios, ou um grupo de administradores do sistema que têm permissão para executar comandos privilegiados.

Você usará o arquivo /etc/group para gerenciar grupos e adicionar usuários a grupos específicos. É a maneira de garantir que pessoas com interesses comuns possam colaborar efetivamente no sistema.

Observe a sequência de comandos abaixo a respeito desta seção:

less /etc/group

O comando less é usado para visualizar o conteúdo de arquivos de texto. Neste caso, você está visualizando o conteúdo do arquivo /etc/group. Esse arquivo contém informações sobre grupos no sistema, incluindo os nomes dos grupos e os usuários que fazem parte de cada grupo.

groupadd vendas

Este comando cria um novo grupo chamado “vendas” no sistema. Grupos são usados para organizar usuários com interesses ou permissões comuns.

groupadd contas

Da mesma forma que o comando anterior, você está criando um novo grupo chamado “contas”.

usermod -aG vendas teste

O comando usermod é usado para modificar as configurações de um usuário existente. Neste caso, você está adicionando o usuário “teste” ao grupo “vendas” com a opção -aG. Isso significa que o usuário “teste” agora faz parte do grupo “vendas”, além de qualquer outro grupo ao qual já pertencesse.

usermod -aG vendas beto

Da mesma forma, você está adicionando o usuário “beto” ao grupo “vendas” usando o comando usermod. Isso permite que o usuário “beto” compartilhe permissões e recursos com outros membros do grupo “vendas”.

usermod -aG contas joao

Com este comando, você está adicionando o usuário “joao” ao grupo “contas”. Isso permite que o usuário “joao” acesse recursos compartilhados pelo grupo “contas” e colabore com outros membros.

usermod -aG contas bob

Semelhante aos comandos anteriores, você está adicionando o usuário “bob” ao grupo “contas”. Isso garante que o usuário “bob” tenha as permissões necessárias para trabalhar com outros membros do grupo “contas”.

id beto

Este comando exibe informações detalhadas sobre o usuário “beto”. Isso inclui o UID (User ID), GID (Group ID), grupos aos quais o usuário pertence e outras informações relevantes sobre o usuário. A saída mostrará informações específicas sobre o usuário “beto” no sistema.

Gerenciando Grupos com chgrp e getent

À medida que você avança em suas habilidades de administração do sistema, perceberá que precisa de ferramentas ágeis para gerenciar grupos e permissões.

O comando chgrp permite que você altere rapidamente o grupo de um arquivo ou diretório. Pode ser extremamente útil quando você deseja garantir que um novo arquivo seja acessível a um determinado grupo.

Por outro lado, o comando getent é como a sua biblioteca pessoal de informações de grupos e usuários.

É como mergulhar em um diretório de membros de clubes e descobrir quem pertence a cada um deles. Você pode usá-lo para consultar informações armazenadas em várias fontes, como LDAP e NIS.

Os exemplos abaixo ajudam a entender um pouco mais sobre os dois comandos citados:

– Alterar o grupo de um arquivo:

chgrp novo_grupo arquivo.txt

– Alterar o grupo de um diretório e seus arquivos recursivamente:

chgrp -R novo_grupo /caminho/do/diretorio

– Alterar o grupo de vários arquivos de uma vez:

chgrp novo_grupo arquivo1.txt arquivo2.txt arquivo3.txt

O comando getent é usado para recuperar informações dos bancos de dados do sistema, como /etc/passwd, /etc/group e outros. Aqui estão alguns exemplos:

– Obter informações de um usuário a partir do banco de dados /etc/passwd:

getent passwd nome_do_usuario

– Obter informações de um grupo a partir do banco de dados /etc/group:

getent group nome_do_grupo

– Listar todos os usuários do sistema:

getent passwd

– Listar todos os grupos do sistema:

getent group

– Obter informações de um serviço específico a partir do banco de dados /etc/services:

getent services nome_do_servico

O comando getent é útil para consultar informações de sistemas de autenticação e autorização, bem como outros bancos de dados do sistema diretamente a partir da linha de comando.

Configurações de Permissões

As configurações de permissões são a espinha dorsal da segurança do sistema. Você pode pensar nas permissões como as “fechaduras” em torno de seus arquivos e diretórios. Com as permissões corretas, você pode garantir que apenas as pessoas certas tenham acesso a determinados recursos.

O comando chmod é a chave para ajustar essas “fechaduras”. Com ele, você pode especificar quem pode ler, escrever e executar arquivos. Além disso, o comando ls ajuda você a entender rapidamente as permissões de um arquivo ou diretório.

Dominar o controle de permissões é essencial para proteger seu sistema e seus dados. Pense nisso como a arte de equilibrar a acessibilidade e a segurança.

Os comandos abaixo podem ser úteis neste contexto, confira:

ls -l

Esse comando lista os arquivos e diretórios no diretório atual com detalhes, exibindo permissões, proprietário, grupo e outras informações.

find / -user roberto

Esse comando procura todos os arquivos no sistema de arquivos (/) que pertencem ao usuário com o nome “roberto”.

find / -group users

Esse comando procura todos os arquivos no sistema de arquivos (/) que pertencem ao grupo com o nome “users”.

chown -R roberto /home/roberto

Esse comando altera a propriedade de todos os arquivos e diretórios em “/home/roberto” para o usuário “roberto”. O uso de -R torna a operação recursiva.

chmod 750 /arquivo

Este comando define as permissões do arquivo “arquivo” para que o proprietário tenha permissão de leitura, gravação e execução (7), o grupo tenha permissão de leitura e execução (5) e outros não tenham permissão (0).

chmod +x arquivo.sh

Esse comando adiciona permissão de execução ao arquivo “arquivo.sh”, permitindo que ele seja executado como um script.

chmod -R o+rx /data

Esse comando adiciona permissões de leitura e execução para outros (usuários que não são o proprietário ou membros do grupo) em todos os arquivos e diretórios dentro de “/data“. O uso de -R torna a operação recursiva.

mkdir -p /data/vendas /data/contas

Este comando cria os diretórios “/data/vendas” e “/data/contas” no sistema. O uso de -p garante que os diretórios pais também sejam criados, se ainda não existirem.

chown beto.vendas /data/vendas

Esse comando altera a propriedade do diretório “/data/vendas” para o usuário “beto” e o grupo “vendas”.

chown bob.contas /data/contas

Este comando altera a propriedade do diretório “/data/contas” para o usuário “bob” e o grupo “contas”.

chmod 770 /data/vendas

Este comando define as permissões do diretório “/data/vendas” para que o proprietário e o grupo tenham permissão de leitura, gravação e execução, enquanto outros não têm permissões.

chmod 770 /data/contas

Este comando define as permissões do diretório “/data/contas” de maneira semelhante ao comando anterior, com permissão total para proprietário e grupo.

su - roberto

Esse comando faz login como o usuário “roberto”, mudando para o seu ambiente e shell.

touch vazio

Esse comando, executado após o login como “roberto,” cria um arquivo chamado “vazio” no diretório pessoal de “roberto.”

cd /data/vendas

Esse comando muda o diretório de trabalho atual para “/data/vendas,” que foi definido anteriormente com permissões específicas.

touch vazio

Da mesma forma que o comando anterior, este cria um arquivo chamado “vazio” no diretório “/data/vendas.”

Esses comandos estão relacionados à manipulação de permissões, propriedades de arquivos e diretórios e criação de diretórios e arquivos, demonstrando como essas operações podem ser executadas no sistema Linux.

Configurações de Tempo

A hora certa é crucial para que as coisas funcionem sem problemas em um sistema. O sistema Linux depende de marcações de tempo precisas para organizar arquivos, registros de eventos e sincronização de tarefas.

Configurar a data e a hora do sistema e sincronizá-las com servidores NTP (Network Time Protocol) garante que seu sistema esteja sempre atualizado e em sintonia com o tempo do mundo real. Isso é especialmente importante quando você precisa rastrear logs, controlar mudanças de arquivos e garantir a precisão das transações de rede.

Os comandos abaixo podem ser úteis neste sentido, confira:

timedatectl

Utilizado para visualizar e controlar as configurações de data e hora.

tzselect

Utilizado para selecionar o fuso horário apropriado de maneira interativa.

dpkg-reconfigure tzdata

Utilizado similar ao exemplo anterior, como forma de configurar o fuso horário apropriado de maneira interativa.

timedatectl set-ntp 1

Utilizado para ativar a sincronização de tempo via NTP no sistema.

Configurando com Access Control List (ACL)

As Listas de Controle de Acesso (ACLs) são como um “toque mágico” para um controle de acesso mais granular. Se as permissões padrão não são suficientes, as ACLs permitem especificar com grande precisão quem pode acessar o quê.

Com as ACLs, você pode conceder permissões a usuários específicos, independentemente de seu grupo principal. Isso é útil quando você precisa de regras de acesso excepcionais para arquivos ou diretórios.

Dominar as ACLs é uma maneira de se tornar um mestre em conceder acesso fino e garantir que apenas as pessoas certas tenham permissão para ver e modificar informações confidenciais.

Analise a sequência de comandos abaixo a respeito do uso das ACLs em um ambiente Linux Ubuntu.

sudo apt install acl

Esse comando é usado para instalar o pacote acl, que é necessário para a manipulação de ACLs no Debian e no Ubuntu. Ele permite que você use os comandos relacionados a ACLs.

setfacl -m u:username:rwx filename

Este comando define uma ACL (Access Control List) para o arquivo filename, concedendo permissões de leitura, escrita e execução (rwx) ao usuário com o nome username.

touch /tmp/memo.txt

Cria um arquivo vazio chamado “memo.txt” no diretório /tmp.

ls -l /tmp/memo.txt

Lista as permissões do arquivo “memo.txt” no diretório /tmp antes de aplicar as ACLs.

setfacl -m u:roberto:rw /tmp/memo.txt

Este comando define uma ACL para o arquivo “memo.txt”, concedendo ao usuário “roberto” permissões de leitura e escrita.

setfacl -m g:users:rw /tmp/memo.txt

Define uma ACL para o arquivo “memo.txt”, concedendo ao grupo “users” permissões de leitura e escrita.

ls -l /tmp/memo.txt

Lista as permissões do arquivo “memo.txt” no diretório /tmp após a aplicação das ACLs, exibindo as permissões tradicionais e as ACLs.

getfacl -p /tmp/memo.txt

Este comando exibe as ACLs definidas para o arquivo “memo.txt” no diretório /tmp.

chmod 644 /tmp/memo.txt

Define explicitamente as permissões tradicionais do arquivo “memo.txt” como 644, ou seja, leitura e escrita para o proprietário e somente leitura para outros.

getfacl -p /tmp/memo.txt

Exibe novamente as ACLs do arquivo “memo.txt” após a modificação das permissões tradicionais.

mkdir /tmp/beto

Cria um diretório chamado “beto” no diretório /tmp.

setfacl -m d:g:beto:rwx /tmp/beto/

Define uma ACL padrão para o diretório “beto”, concedendo ao grupo “beto” permissões de leitura, escrita e execução. Isso significa que novos arquivos criados dentro desse diretório herdarão essas permissões.

getfacl -p /tmp/beto/

Exibe as ACLs definidas para o diretório “beto” no diretório /tmp.

mkdir /tmp/beto/test

Cria um subdiretório chamado “test” dentro do diretório “beto”.

getfacl -p /tmp/beto/test

Exibe as ACLs do diretório “test” dentro do diretório “beto”.

touch /tmp/beto/file.txt

Cria um arquivo chamado “file.txt” dentro do diretório “beto”.

getfacl -p /tmp/beto/file.txt

Exibe as ACLs definidas para o arquivo “file.txt” dentro do diretório “beto”.

Dicas e Truques para Usar o sudo

O comando sudo é a chave para realizar tarefas administrativas com segurança. É como dar a alguém uma chave-mestra para seu sistema, mas com controle estrito sobre o que podem fazer.

Configurar arquivos sudoers permite que você conceda privilégios elevados a usuários ou grupos específicos. A administração segura é uma parte fundamental do gerenciamento de sistemas, e o sudo é sua ferramenta de confiança.

Analise a sequência de comandos abaixo, neste contexto:

sudo -k

Este comando é usado para invalidar a senha de sudo por um curto período de tempo. Isso significa que, após executar sudo -k, você deve fornecer sua senha novamente ao usar sudo. Isso é útil para garantir que, se você estiver ausente do terminal por algum tempo, ninguém mais possa usar seu acesso sudo sem a senha.

vim /etc/sudoers

Este comando abre o arquivo de configuração do sudoers no editor de texto Vim. O arquivo /etc/sudoers contém regras que controlam as permissões de sudo para os usuários e grupos.

Defaults timestamp_timeout = 0

Essa linha no arquivo sudoers define que o tempo de expiração do cache de autenticação do sudo seja zero, o que significa que a autenticação será necessária sempre que o comando sudo for executado. Isso desativa o recurso de cache de autenticação.

sudo systemctl restart sshd

Esse comando reinicia o serviço SSH (sshd) usando o sistema de gerenciamento de serviços do systemd.

sudo -l

Este comando permite que o usuário veja suas permissões sudo atuais. Ele mostra quais comandos o usuário pode executar com privilégios de superusuário.

As linhas que começam com “beto ALL=” no arquivo sudoers definem as permissões de sudo para o usuário “beto”. Por exemplo:

beto ALL=(ALL) /usr/bin/systemctl permite que o usuário “beto” execute o comando “systemctl” com todos os argumentos.

beto ALL=(ALL) /usr/bin/systemctl * sshd permite que o usuário “beto” execute o comando “systemctl” com todos os argumentos, mas somente para o serviço SSH (“sshd”).

beto ALL=(ALL) /usr/bin/systemctl status sshd, /usr/bin/systemctl restart sshd permite que o usuário “beto” execute os comandos “systemctl status sshd” e “systemctl restart sshd” com privilégios de superusuário.

sudo vim /etc/sudoers

Este comando tenta abrir o arquivo sudoers no editor Vim com privilégios de superusuário. Ele permite que você edite o arquivo sudoers, o que normalmente requer permissões especiais.

sudo systemctl restart sshd

Como mencionado anteriormente, este comando reinicia o serviço SSH (sshd) usando o sistema de gerenciamento de serviços do systemd.

sudo systemctl status sshd

Este comando exibe o status do serviço SSH (sshd) usando o systemd. Ele fornece informações sobre o status atual do serviço, se ele está em execução, etc.

Esses comandos estão relacionados ao controle de privilégios, configurações do sudoers e gerenciamento de serviços no Linux. É importante ter cuidado ao editar o arquivo sudoers, pois mudanças incorretas podem afetar seriamente a segurança e o funcionamento do sistema.

Criando uma Política de Senhas

Senhas são a primeira linha de defesa em qualquer sistema. Criar uma política de senhas sólida é essencial para garantir que os usuários escolham senhas fortes e as mudem regularmente.

Estabelecer requisitos de comprimento, complexidade e expiração de senhas pode evitar que senhas fracas se tornem um ponto fraco na segurança do sistema. Ferramentas como o comando `passwd` facilitam a configuração de políticas de senha rigorosas.

Nesta aula, você aprenderá a equilibrar a segurança das senhas com a usabilidade, garantindo que os usuários possam acessar o sistema de maneira segura e conveniente.

E para isso utilizaremos o utilitário pwquality (https://linux.die.net/man/5/pwquality.conf)

Confira a sequência de comandos abaixo a respeito do tema desta seção:

A sequência de comandos que você forneceu está relacionada ao gerenciamento das políticas de qualidade de senha (password quality) em sistemas Linux, especificamente usando o PAM (Pluggable Authentication Module).

apt install libpam-pwquality

Este comando é usado para instalar o pacote “libpam-pwquality” no sistema. O pacote fornece uma biblioteca que pode ser usada para configurar regras de qualidade de senha para autenticação de usuários.

vim /etc/security/pwquality.conf

Este comando abre o arquivo de configuração “pwquality” localizado no diretório “/etc/security” em um editor de texto Vim. Esse arquivo é usado para definir as políticas de qualidade de senha.

No contexto de qualidade de senha, “minlen” se refere ao comprimento mínimo da senha e “minclass” se refere ao número mínimo de classes de caracteres (letras maiúsculas, minúsculas, dígitos, caracteres especiais) necessárias na senha. Desabilitar essas funções provavelmente significa que essas regras não serão aplicadas.

IMPORTANTE: para deixar um usuário específico de fora desta lista de segurança de senhas fortes, basta adicionar ao final do arquivo “/etc/security/pwquality.conf“:

exception = usuario

Onde “usuario” substitui-se pelo nome de usuário em questão.

su roberto

Esse comando é usado para mudar o usuário para “roberto”. A partir deste ponto, os comandos serão executados no contexto do usuário “roberto”.

passwd roberto

Este comando é usado para alterar a senha do usuário “roberto”. Como você desativou as regras de qualidade de senha anteriormente, isso permite que “roberto” defina uma senha com menos restrições em termos de comprimento e classes de caracteres.

O objetivo da sequência de comandos é instalar o pacote “libpam-pwquality”, editar as configurações de qualidade de senha para desabilitar regras específicas e, em seguida, permitir que o usuário “roberto” defina uma senha com as novas regras de qualidade de senha desabilitadas.

Isso pode ser útil se houver a necessidade de flexibilidade nas políticas de senha para um usuário específico. No entanto, é importante ter cuidado ao desabilitar regras de qualidade de senha, pois isso pode afetar a segurança das senhas no sistema.