Pesquisa de site

Gerenciando usuários e grupos, permissões e atributos de arquivos e habilitando acesso sudo em contas - Parte 8


Em agosto passado, a Linux Foundation iniciou a certificação LFCS (Linux Foundation Certified Sysadmin), um novo programa cujo objetivo é permitir que indivíduos de qualquer lugar e em qualquer lugar façam um exame para obtenha certificação em suporte operacional básico a intermediário para sistemas Linux, que inclui suporte a sistemas e serviços em execução, juntamente com monitoramento e análise geral, além de tomada de decisão inteligente para poder decidir quando é necessário escalar problemas para equipes de suporte de nível superior.

Dê uma olhada rápida no vídeo a seguir que descreve uma introdução ao Programa de Certificação da Linux Foundation.

Este artigo é a Parte 8 de uma longa série de 10 tutoriais. Aqui nesta seção, iremos orientá-lo sobre como gerenciar permissões de usuários e grupos no sistema Linux, que são necessárias para o exame de certificação LFCS.

Como o Linux é um sistema operacional multiusuário (na medida em que permite que vários usuários em diferentes computadores ou terminais acessem um único sistema), você precisará saber como realizar um gerenciamento eficaz de usuários: como adicionar, editar, suspender ou excluir contas de usuário, além de conceder-lhes as permissões necessárias para realizar as tarefas atribuídas.

Adicionando contas de usuário

Para adicionar uma nova conta de usuário, você pode executar um dos dois comandos a seguir como root.

adduser [new_account]
useradd [new_account]

Quando uma nova conta de usuário é adicionada ao sistema, as seguintes operações são executadas.

1. Seu diretório inicial é criado (/home/username por padrão).

2. Os seguintes arquivos ocultos são copiados para o diretório inicial do usuário e serão usados para fornecer variáveis de ambiente para sua sessão de usuário.

.bash_logout
.bash_profile
.bashrc

3. Um spool de correio é criado para o usuário em /var/spool/mail/nomedeusuário.

4. Um grupo é criado e recebe o mesmo nome da nova conta de usuário.

Compreendendo /etc/passwd

As informações completas da conta são armazenadas no arquivo /etc/passwd. Este arquivo contém um registro por conta de usuário do sistema e possui o seguinte formato (os campos são delimitados por dois pontos).

[username]:[x]:[UID]:[GID]:[Comment]:[Home directory]:[Default shell]
  1. Os campos [nomedeusuário] e [Comentário] são autoexplicativos.
  2. O x no segundo campo indica que a conta está protegida por uma senha oculta (em /etc/shadow), que é necessária para fazer logon como [nome de usuário] .
  3. Os campos [UID] e [GID] são números inteiros que representam a identificação do usuário e a identificação do grupo primário ao qual [nome de usuário] pertence, respectivamente .
  4. O [diretório inicial] indica o caminho absoluto para o diretório inicial de [nome de usuário] e
  5. O [Shell padrão] é o shell que será disponibilizado para este usuário quando ele fizer login no sistema.
Compreendendo /etc/group

As informações do grupo são armazenadas no arquivo /etc/group. Cada registro tem o seguinte formato.

[Group name]:[Group password]:[GID]:[Group members]
  1. [Nome do grupo] é o nome do grupo.
  2. Um x em [Senha do grupo] indica que senhas de grupo não estão sendo usadas.
  3. [GID]: o mesmo que em /etc/passwd.
  4. [Membros do grupo]: uma lista separada por vírgulas de usuários que são membros do [Nome do grupo].

Depois de adicionar uma conta, você pode editar as seguintes informações (para citar alguns campos) usando o comando usermod, cuja sintaxe básica do usermod é a seguinte.

usermod [options] [username]
Definir a data de expiração de uma conta

Use o sinalizador –expiredate seguido por uma data no formato AAAA-MM-DD.

usermod --expiredate 2014-10-30 tecmint
Adicionando o usuário a grupos complementares

Use as opções combinadas -aG ou –append –groups, seguidas por uma lista de grupos separados por vírgulas.

usermod --append --groups root,users tecmint
Alterando o local padrão do diretório inicial do usuário

Use as opções -d ou –home, seguidas do caminho absoluto para o novo diretório inicial.

usermod --home /tmp tecmint
Alterando o shell que o usuário usará por padrão

Use –shell, seguido do caminho para o novo shell.

usermod --shell /bin/sh tecmint
Exibindo os grupos dos quais um usuário é membro
groups tecmint
id tecmint

Agora vamos executar todos os comandos acima de uma só vez.

usermod --expiredate 2014-10-30 --append --groups root,users --home /tmp --shell /bin/sh tecmint

No exemplo acima, definiremos a data de expiração da conta do usuário tecmint como 30 de outubro de 2014. Também adicionaremos a conta ao grupo root e aos grupos de usuários. Finalmente, definiremos sh como seu shell padrão e alteraremos a localização do diretório inicial para /tmp:

Leia também:

  1. 15 exemplos de comandos useradd no Linux
  2. 15 exemplos de comando usermod no Linux

Para contas existentes, também podemos fazer o seguinte.

Desativando conta bloqueando senha

Use a opção -L (L maiúsculo) ou –lock para bloquear a senha de um usuário.

usermod --lock tecmint
Desbloqueando senha do usuário

Use a opção –u ou –unlock para desbloquear a senha de um usuário que foi bloqueado anteriormente.

usermod --unlock tecmint

Criando um novo grupo para acesso de leitura e gravação a arquivos que precisam ser acessados por vários usuários

Execute a seguinte série de comandos para atingir o objetivo.

groupadd common_group # Add a new group
chown :common_group common.txt # Change the group owner of common.txt to common_group
usermod -aG common_group user1 # Add user1 to common_group
usermod -aG common_group user2 # Add user2 to common_group
usermod -aG common_group user3 # Add user3 to common_group
Excluindo um grupo

Você pode excluir um grupo com o seguinte comando.

groupdel [group_name]

Se houver arquivos pertencentes a group_name, eles não serão excluídos, mas o proprietário do grupo será definido como o GID do grupo que foi excluído.

Permissões de arquivo Linux

Além das permissões básicas de leitura, gravação e execução que discutimos em Ferramentas de arquivamento e configuração de atributos de arquivo – Parte 3 desta série, existem outras configurações de permissão menos usadas (mas não menos importantes), às vezes chamadas de “especial permissões ”.

Assim como as permissões básicas discutidas anteriormente, elas são definidas por meio de um arquivo octal ou por meio de uma letra (notação simbólica) que indica o tipo de permissão.

Excluindo contas de usuário

Você pode excluir uma conta (juntamente com seu diretório inicial, se for de propriedade do usuário, e todos os arquivos que residem nela, e também o spool de e-mail) usando o comando userdel com o comando –remove opção.

userdel --remove [username]

Gerenciamento de grupo

Cada vez que uma nova conta de usuário é adicionada ao sistema, um grupo com o mesmo nome é criado tendo o nome de usuário como único membro. Outros usuários podem ser adicionados ao grupo posteriormente. Um dos propósitos dos grupos é implementar um controle de acesso simples a arquivos e outros recursos do sistema, definindo as permissões corretas para esses recursos.

Por exemplo, suponha que você tenha os seguintes usuários.

  1. usuário1 (grupo principal: usuário1)
  2. usuário2 (grupo principal: usuário2)
  3. usuário3 (grupo principal: usuário3)

Todos eles precisam de acesso de leitura e gravação a um arquivo chamado common.txt localizado em algum lugar do seu sistema local, ou talvez em um compartilhamento de rede que user1 criou. Você pode ficar tentado a fazer algo como,

chmod 660 common.txt
OR
chmod u=rw,g=rw,o= common.txt [notice the space between the last equal sign and the file name]

No entanto, isso só fornecerá acesso de leitura e gravação ao proprietário do arquivo e aos usuários que são membros do grupo proprietário do arquivo (usuário1 neste caso). Novamente, você pode ficar tentado a adicionar user2 e user3 ao grupo user1, mas isso também lhes dará acesso ao restante dos arquivos de sua propriedade. pelo usuário user1 e pelo grupo user1.

É aqui que os grupos são úteis e aqui está o que você deve fazer em um caso como este.

Compreendendo o Setuid

Quando a permissão setuid é aplicada a um arquivo executável, um usuário que executa o programa herda os privilégios efetivos do proprietário do programa. Como esta abordagem pode razoavelmente levantar preocupações de segurança, o número de arquivos com permissão setuid deve ser mantido no mínimo. Você provavelmente encontrará programas com esta permissão definida quando um usuário do sistema precisar acessar um arquivo de propriedade do root.

Resumindo, não é apenas que o usuário pode executar o arquivo binário, mas também pode fazê-lo com privilégios de root. Por exemplo, vamos verificar as permissões de /bin/passwd. Este binário é usado para alterar a senha de uma conta e modifica o arquivo /etc/shadow. O superusuário pode alterar a senha de qualquer pessoa, mas todos os outros usuários só devem poder alterar a sua própria.

Assim, qualquer usuário deve ter permissão para executar /bin/passwd, mas somente root poderá especificar uma conta. Outros usuários só podem alterar as senhas correspondentes.

Compreendendo o Setgid

Quando o bit setgid é definido, o GID efetivo do usuário real se torna o do proprietário do grupo. Assim, qualquer usuário pode acessar um arquivo com os privilégios concedidos ao proprietário do grupo desse arquivo. Além disso, quando o bit setgid é definido em um diretório, os arquivos recém-criados herdam o mesmo grupo do diretório, e os subdiretórios recém-criados também herdarão o bit setgid do diretório pai. Você provavelmente usará essa abordagem sempre que membros de um determinado grupo precisarem de acesso a todos os arquivos de um diretório, independentemente do grupo principal do proprietário do arquivo.

chmod g+s [filename]

Para definir o setgid na forma octal, acrescente o número 2 às permissões básicas atuais (ou desejadas).

chmod 2755 [directory]
Configurando o SETGID em um diretório

Compreendendo o Sticky Bit

Quando o “sticky bit ” é definido em arquivos, o Linux simplesmente o ignora, enquanto que para diretórios tem o efeito de impedir que os usuários excluam ou até mesmo renomeiem os arquivos que ele contém, a menos que o usuário seja o proprietário do diretório, o arquivo ou é root.

chmod o+t [directory]

Para definir o sticky bit na forma octal, acrescente o número 1 às permissões básicas atuais (ou desejadas).

chmod 1755 [directory]

Sem o sticky bit, qualquer pessoa capaz de gravar no diretório pode excluir ou renomear arquivos. Por esse motivo, o sticky bit é comumente encontrado em diretórios, como /tmp, que são graváveis mundialmente.

Atributos especiais de arquivo Linux

Existem outros atributos que permitem limites adicionais nas operações permitidas em arquivos. Por exemplo, evite que o arquivo seja renomeado, movido, excluído ou mesmo modificado. Eles são definidos com o comando chattr e podem ser visualizados usando a ferramenta lsattr, conforme a seguir.

chattr +i file1
chattr +a file2

Depois de executar esses dois comandos, arquivo1 será imutável (o que significa que não pode ser movido, renomeado, modificado ou excluído), enquanto arquivo2 entrará no modo somente acréscimo (só pode ser aberto no modo anexar para escrita).

Acessando a conta root e usando sudo

Uma das maneiras pelas quais os usuários podem obter acesso à conta root é digitando.

su

e, em seguida, digitando a senha do root.

Se a autenticação for bem-sucedida, você estará conectado como root com o diretório de trabalho atual igual ao de antes. Se você quiser ser colocado no diretório inicial do root, execute.

su -

e digite a senha do root.

O procedimento acima requer que um usuário normal conheça a senha do root, o que representa um sério risco de segurança. Por essa razão, o administrador do sistema pode configurar o comando sudo para permitir que um usuário comum execute comandos como um usuário diferente (geralmente o superusuário) de uma forma muito controlada e limitada. Assim, restrições podem ser definidas para um usuário de modo a permitir que ele execute um ou mais comandos privilegiados específicos e nenhum outro.

Leia também: Diferença entre usuário su e sudo

Para autenticar usando sudo, o usuário utiliza sua própria senha. Após inserir o comando, será solicitada nossa senha (não a do superusuário) e se a autenticação for bem-sucedida (e se o usuário tiver privilégios para executar o comando), o comando especificado será executado.

Para conceder acesso ao sudo, o administrador do sistema deve editar o arquivo /etc/sudoers. Recomenda-se que este arquivo seja editado utilizando o comando visudo em vez de abri-lo diretamente com um editor de texto.

visudo

Isso abre o arquivo /etc/sudoers usando o vim (você pode seguir as instruções fornecidas em Instalar e usar o vim como editor – Parte 2 desta série para editar o arquivo).

Estas são as linhas mais relevantes.

Defaults    secure_path="/usr/sbin:/usr/bin:/sbin"
root        ALL=(ALL) ALL
tecmint     ALL=/bin/yum update
gacanepa    ALL=NOPASSWD:/bin/updatedb
%admin      ALL=(ALL) ALL

Vamos dar uma olhada neles.

Defaults    secure_path="/usr/sbin:/usr/bin:/sbin:/usr/local/bin"

Esta linha permite especificar os diretórios que serão usados para o sudo, e é usada para evitar o uso de diretórios específicos do usuário, que podem prejudicar o sistema.

As próximas linhas são usadas para especificar permissões.

root        ALL=(ALL) ALL
  1. A primeira palavra-chave ALL indica que esta regra se aplica a todos os hosts.
  2. O segundo ALL indica que o usuário na primeira coluna pode executar comandos com privilégios de qualquer usuário.
  3. O terceiro ALL significa que qualquer comando pode ser executado.
tecmint     ALL=/bin/yum update

Se nenhum usuário for especificado após o sinal =, sudo assume o usuário root. Neste caso, o usuário tecmint poderá executar yum update como root.

gacanepa    ALL=NOPASSWD:/bin/updatedb

A diretiva NOPASSWD permite ao usuário gacanepa executar /bin/updatedb sem precisar digitar sua senha.

%admin      ALL=(ALL) ALL

O sinal % indica que esta linha se aplica a um grupo chamado “admin ”. O significado do resto da linha é idêntico ao de um usuário normal. Isso significa que os membros do grupo “admin ” podem executar todos os comandos como qualquer usuário em todos os hosts.

Para ver quais privilégios são concedidos a você pelo sudo, use a opção “-l” para listá-los.

PAM (Módulos de Autenticação Conectáveis)

Módulos de autenticação conectáveis (PAM) oferecem a flexibilidade de definir um esquema de autenticação específico por aplicativo e/ou por serviço usando módulos. Esta ferramenta presente em todas as distribuições Linux modernas superou o problema frequentemente enfrentado pelos desenvolvedores nos primórdios do Linux, quando cada programa que exigia autenticação tinha que ser compilado especialmente para saber como obter as informações necessárias.

Por exemplo, com o PAM, não importa se sua senha está armazenada em /etc/shadow ou em um servidor separado dentro de sua rede.

Por exemplo, quando o programa de login precisa autenticar um usuário, o PAM fornece dinamicamente a biblioteca que contém as funções para o esquema de autenticação correto. Assim, alterar o esquema de autenticação do aplicativo de login (ou qualquer outro programa que utilize PAM) é fácil, pois envolve apenas a edição de um arquivo de configuração (provavelmente, um arquivo com o nome do aplicativo, localizado dentro de /etc/pam.d e menos provável em /etc/pam.conf).

Os arquivos dentro de /etc/pam.d indicam quais aplicativos estão usando o PAM nativamente. Além disso, podemos saber se uma determinada aplicação utiliza PAM verificando se a biblioteca PAM (libpam) foi vinculada a ela:


ldd $(which login) | grep libpam # login uses PAM
ldd $(which top) | grep libpam # top does not use PAM

Na imagem acima podemos ver que a libpam foi vinculada à aplicação de login. Isso faz sentido, pois este aplicativo está envolvido na operação de autenticação do usuário do sistema, enquanto o top não.

Vamos examinar o arquivo de configuração do PAM para passwd – sim, o conhecido utilitário para alterar as senhas dos usuários. Ele está localizado em /etc/pam.d/passwd:


cat /etc/passwd

A primeira coluna indica o tipo de autenticação a ser utilizado com o module-path (terceira coluna). Quando um hífen aparece antes do tipo, o PAM não gravará no log do sistema se o módulo não puder ser carregado porque não foi encontrado no sistema.

Os seguintes tipos de autenticação estão disponíveis:

  1. account: este tipo de módulo verifica se o usuário ou serviço forneceu credenciais válidas para autenticação.
  2. auth: este tipo de módulo verifica se o usuário é quem afirma ser e concede todos os privilégios necessários.
  3. senha: este tipo de módulo permite ao usuário ou serviço atualizar sua senha.
  4. sessão: este tipo de módulo indica o que deve ser feito antes e/ou depois do sucesso da autenticação.

A segunda coluna (chamada control) indica o que deve acontecer se a autenticação com este módulo falhar:

  1. requisito: se a autenticação através deste módulo falhar, a autenticação geral será negada imediatamente.
  2. required é semelhante a requisito, embora todos os outros módulos listados para este serviço sejam chamados antes de negar a autenticação.
  3. suficiente: se a autenticação através deste módulo falhar, o PAM ainda concederá autenticação mesmo se um anterior marcado como obrigatório falhar.
  4. opcional: se a autenticação através deste módulo falhar ou for bem sucedida, nada acontece a menos que este seja o único módulo do seu tipo definido para este serviço.
  5. include significa que as linhas de um determinado tipo devem ser lidas de outro arquivo.
  6. substack é semelhante a include, mas falhas ou sucessos de autenticação não causam a saída do módulo completo, mas apenas da subpilha.

A quarta coluna, se existir, mostra os argumentos a serem passados ao módulo.

As três primeiras linhas em /etc/pam.d/passwd (mostradas acima), carregam o módulo system-auth para verificar se o usuário forneceu credenciais válidas (conta) . Nesse caso, permite que ele altere o token de autenticação (senha), dando permissão para usar passwd (auth).

Por exemplo, se você anexar


remember=2

para a seguinte linha


password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok

em /etc/pam.d/system-auth:


password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=2

as duas últimas senhas com hash de cada usuário são salvas em /etc/security/opasswd para que não possam ser reutilizadas:

Resumo

Habilidades eficazes de gerenciamento de usuários e arquivos são ferramentas essenciais para qualquer administrador de sistema. Neste artigo, cobrimos o básico e esperamos que você possa usá-lo como um bom ponto de partida para desenvolver. Sinta-se à vontade para deixar seus comentários ou perguntas abaixo e responderemos rapidamente.