Linux Professional Institute Learning Logo.
Ir para o conteúdo principal
  • Home
    • Todos os recursos
    • LPI Materiais Didáticos
    • Colabore Conosco
    • Publishing Partners
    • Seja um Publishing Partner
    • Quem Somos
    • FAQ
    • Colaboradores
    • Contato
  • LPI.org
5.1 Lição 1
Tópico 1: A comunidade Linux e a carreira Open Source
1.1 A evolução do Linux e sistemas operacionais populares
  • 1.1 Lição 1
1.2 Principais Aplicações Open Source
  • 1.2 Lição 1
1.3 Entendendo o Software Open Source e suas Licenças
  • 1.3 Lição 1
1.4 Habilidades ICT e trabalhando no Linux
  • 1.4 Lição 1
Tópico 2: Encontrando seu caminho em um Sistema Linux
2.1 O básico sobre a linha de comando
  • 2.1 Lição 1
  • 2.1 Lição 2
2.2 Usando a linha de comando para conseguir ajuda
  • 2.2 Lição 1
2.3 Usando diretórios e listando arquivos
  • 2.3 Lição 1
  • 2.3 Lição 2
2.4 Criando, Movendo e Deletando Arquivos
  • 2.4 Lição 1
Tópico 3: O Poder da Linha de Comando
3.1 Empacotando arquivos na linha de comando
  • 3.1 Lição 1
3.2 Pesquisando e extraindo dados de arquivos
  • 3.2 Lição 1
  • 3.2 Lição 2
3.3 Transformando comandos em Scripts
  • 3.3 Lição 1
  • 3.3 Lição 2
Tópico 4: O Sistema Operacional Linux
4.1 Escolhendo um Sistema Operacional
  • 4.1 Lição 1
4.2 Entendendo o Hardware do Computador
  • 4.2 Lição 1
4.3 Onde os dados são armazenados
  • 4.3 Lição 1
  • 4.3 Lição 2
4.4 Seu Computador na Rede
  • 4.4 Lição 1
Tópico 5: Segurança e Permissões de Arquivos
5.1 Segurança Básica e Identificação de Tipos de Usuários
  • 5.1 Lição 1
5.2 Criando Usuários e Grupos
  • 5.2 Lição 1
5.3 Gerenciando permissões e donos de arquivos
  • 5.3 Lição 1
5.4 Diretórios e arquivos especiais
  • 5.4 Lição 1
How to get certified
  1. Tópico 5: Segurança e Permissões de Arquivos
  2. 5.1 Segurança Básica e Identificação de Tipos de Usuários
  3. 5.1 Lição 1

5.1 Lição 1

Certificação:

Linux Essentials

Versão:

1.6

Tópico:

5 Segurança e permissões de arquivos

Objetivo:

5.1 Segurança básica e identificação de tipos de usuários

Lição:

1 de 1

Introdução

Esta lição abordará a terminologia básica relacionada a contas, controles de acesso e segurança dos sistemas Linux locais, as ferramentas da interface da linha de comando (CLI) em um sistema Linux para controles de acesso básicos e os arquivos essenciais para oferecer suporte a contas de usuários e grupos, incluindo os usados para aumentar os privilégios elementares.

A segurança básica nos sistemas Linux deriva-se dos controles de acesso do Unix que, apesar de terem quase cinquenta anos, são bastante eficazes em comparação com outros sistemas operacionais populares de linhagem muito mais recente. Mesmo certos sistemas operacionais populares baseados em Unix tendem a “tomar liberdades” com o argumento da “facilidade de acesso”, coisa que o Linux não faz.

Os ambientes e interfaces modernos do Linux simplificam a criação e o gerenciamento de usuários e frequentemente automatizam a atribuição de controles de acesso quando um usuário faz login — por exemplo, permitindo acesso ao monitor, áudio e outros serviços — sem a necessidade de praticamente nenhuma intervenção manual do administrador do sistema. No entanto, é importante entender os conceitos básicos por trás de um sistema operacional Linux.

Contas

A segurança engloba muitos conceitos, sendo um dos mais comuns o conceito geral de controles de acesso. Antes de tratar dos controles de acesso a arquivos, como propriedade e permissões, é necessário compreender os conceitos básicos relacionados às contas de usuário do Linux, que são divididas em vários tipos.

Todo usuário de um sistema Linux possui uma conta associada que, além das informações de login (como nome de usuário e senha), também define como e onde o usuário pode interagir com o sistema. Os privilégios e controles de acesso definem os “limites” dentro dos quais cada usuário pode operar.

Identificadores (UIDs/GIDs)

Os Identificadores de Usuário e Grupos (UIDs/GIDs) são as referências básicas, numeradas, às contas. As implementações iniciais eram números inteiros limitados de 16 bits (valores de 0 a 65535), mas os sistemas do século XXI suportam UIDs e GIDs de 64 bits. Os usuários e grupos são enumerados de forma independente, de modo que o mesmo ID pode representar tanto um usuário quanto um grupo.

Todo usuário possui não apenas um UID, mas também um GID primário. O GID primário de um usuário pode ser exclusivo apenas para esse usuário, não sendo usado por outros usuários. No entanto, o grupo pode ser compartilhado por diversos usuários. Além desses grupos primários, cada usuário também pode ser membro de outros grupos.

Por padrão, nos sistemas Linux, todo usuário é incluído em um grupo com o mesmo nome que seu nome de usuário e um GID idêntico a seu UID. Por exemplo, se criarmos um novo usuário chamado newuser, seu grupo por padrão também será newuser.

A conta de superusuário

No Linux, a conta do superusuário é root, que sempre terá o UID 0. O superusuário também pode ser chamado de administrador do sistema e dispõe de acesso e controle ilimitados sobre o sistema, incluindo outros usuários.

O grupo padrão do superusuário tem o GID 0 e também é chamado de root. O diretório inicial do superusuário é um diretório dedicado, de nível superior, /root, acessível apenas pelo próprio usuário root.

Contas de usuário padrão

Todas as contas que não sejam root são, tecnicamente, contas de usuário regulares, mas em um sistema Linux o termo coloquial conta de usuário geralmente indica uma conta de usuário “regular” (sem privilégios). Elas têm geralmente as seguintes propriedades, com algumas exceções:

  • UIDs iniciando em 1000 (4 dígitos), embora alguns sistemas legados possam iniciar em 500.

  • Um diretório inicial definido, geralmente um subdiretório de /home, dependendo da configuração local.

  • Um shell de login definido. No Linux, o shell padrão é geralmente o Bourne Again Shell (/bin/bash), embora outros possam estar disponíveis.

Se uma conta de usuário não tiver um shell válido em seus atributos, o usuário não poderá abrir um shell interativo. Normalmente, /sbin/nologin é usado como um shell inválido. Isso pode ser proposital, no caso de o usuário ser autenticado apenas para serviços que excluam o console ou o acesso SSH; por exemplo, somente acesso FTP seguro (sftp).

Note

Para evitar confusões, o termo conta de usuário será aplicado apenas a contas de usuário padrão ou regulares daqui para a frente. Usaremos conta de sistema para nos referir uma conta de usuário Linux pertencente ao tipo de conta de usuário do sistema.

Contas do sistema

As contas de sistema são tipicamente pré-criadas no momento da instalação do sistema. São destinadas a recursos, programas e serviços que não serão executados como superusuário. Em um mundo ideal, todos eles seriam funcionalidades do sistema operacional.

As contas de sistema variam, mas dentre seus atributos temos:

  • Os UIDs normalmente são menores de 100 (2 dígitos) ou entre 500-1000 (3 dígitos).

  • Não têm nenhum diretório inicial dedicado ou têm um diretório que normalmente não está em /home.

  • Nenhum shell de login válido (tipicamente /sbin/nologin), com raras exceções.

A maioria das contas de sistema no Linux nunca faz login e não precisa de um shell definido em seus atributos. Muitos processos que pertencem e são executados por contas de sistema são transferidos para o seu próprio ambiente pelo gerenciamento do sistema, sendo executados com a conta de sistema especificada. Essas contas geralmente têm privilégios limitados ou, na maioria das vezes, nenhum privilégio.

Note

Do ponto de vista do LPI Linux Essentials, as contas de sistema têm UIDs <1000, com UIDs (e GIDs) de 2 ou 3 dígitos.

Em geral, as contas de sistema não devem ter um shell de login válido. O contrário representaria um problema de segurança na maioria dos casos.

Contas de serviço

As contas de serviço são criadas tipicamente quando instalamos e configuramos serviços. Como no caso das contas de sistema, elas são destinadas aos recursos, programas e serviços que não serão executados como superusuário.

Em muitas documentações, as contas de sistema e de serviço são semelhantes e intercambiáveis. Isso inclui a localização dos diretórios pessoais, que normalmente ficam fora de /home, quando definidos (as contas de serviço têm mais probabilidade de ter um diretório pessoal do que as contas de sistema) e a ausência de um shell de login válido. Embora não exista uma definição estrita, a principal diferença entre contas de sistema e de serviço está no UID/GID.

Conta de sistema

UID/GID <100 (2 dígitos) ou <500-1000 (3 digitos)

Conta de serviço

UID/GID >1000 (4+ dígitos), mas não uma conta de usuário “padrão” ou “regular” , uma conta para os serviços, com um UID/GID >1000 (4+ dígitos)

Algumas distribuições Linux ainda têm contas de serviço pré-reservadas com UID <100, e estas também podem ser consideradas contas de sistema, mesmo que não sejam criadas na instalação. Por exemplo, nas distribuições Linux baseadas no Fedora (incluindo o Red Hat), o usuário do servidor web Apache tem um UID (e GID) 48, claramente uma conta de sistema, apesar de contar com um diretório inicial (geralmente em /usr/share/httpd ou /var/www/html/).

Note

Do ponto de vista do LPI Linux Essentials, as contas de sistema têm UIDs <1000 e as contas de usuário regulares têm UIDs >1000. Como as contas de usuário regulares são >1000, esses UIDs também podem incluir contas de serviço.

Shells de login e diretórios iniciais

Algumas contas têm um shell de login, enquanto outras não os têm por motivos de segurança, já que não requerem acesso interativo. O shell de login padrão na maioria das distribuições Linux é o Bourne Again Shell, ou bash, mas outros shells podem estar disponíveis, como o C Shell (csh), Korn shell (ksh) ou Z shell (zsh), dentre outros.

O usuário pode alterar seu shell de login usando o comando chsh. Por padrão, o comando é executado no modo interativo e exibe um prompt perguntando qual shell deve ser usado. A resposta deve ser o caminho completo para o binário do shell, como mostrado abaixo:

$ chsh

Changing the login shell for emma
Enter the new value, or press ENTER for the default
	Login Shell [/bin/bash]: /usr/bin/zsh

Também é possível executar o comando no modo não interativo, com o parâmetro -s seguido pelo caminho para o binário, da seguinte forma:

$ chsh -s /usr/bin/zsh

A maioria das contas tem um diretório inicial definido. No Linux, esse é geralmente o único local em que a conta do usuário tem acesso garantido de gravação, com algumas exceções (por exemplo, áreas temporárias do sistema de arquivos). No entanto, algumas contas são configuradas propositalmente para não ter acesso de gravação, mesmo no próprio diretório pessoal, por motivos de segurança.

Obtendo informações sobre os usuários

Listar informações básicas de usuário é uma prática cotidiana comum em um sistema Linux. Em alguns casos, os usuários precisarão trocar de usuário e ganhar privilégios para concluir tarefas privilegiadas.

Os usuários comuns podem listar atributos e acessos na linha de comando usando os comandos abaixo. As informações básicas em contexto limitado não são uma operação privilegiada.

Para listar as informações atuais de um usuário na linha de comando, basta um comando de duas letras: id. A saída vai depender de seu ISD de login:

$ id
uid=1024(emma) gid=1024(emma) 1024(emma),20(games),groups=10240(netusers),20480(netadmin) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Na listagem anterior, o usuário (emma) tem identificadores detalhados da seguinte maneira:

  • 1024 = ISD de usuário (UID), seguido pelo nome de usuário (nome comum ou nome de login) entre parênteses.

  • 1024 = o ID primário de grupo (GID), seguido pelo nome do grupo (nome comum) entre parênteses.

  • Uma lista de GIDs adicionais (nomes de grupo) a que o usuário também pertence.

Para listar a última vez em que os usuários se logaram no sistema, usamos o comando last:

$ last
emma     pts/3        ::1              Fri Jun 14 04:28   still logged in
reboot   system boot  5.0.17-300.fc30. Fri Jun 14 04:03   still running
reboot   system boot  5.0.17-300.fc30. Wed Jun  5 14:32 - 15:19  (00:46)
reboot   system boot  5.0.17-300.fc30. Sat May 25 18:27 - 19:11  (00:43)
reboot   system boot  5.0.16-100.fc28. Sat May 25 16:44 - 17:06  (00:21)
reboot   system boot  5.0.9-100.fc28.x Sun May 12 14:32 - 14:46  (00:14)
root     tty2                          Fri May 10 21:55 - 21:55  (00:00)
	...

As informações listadas nas colunas podem variar, mas dentre os itens relevantes na listagem anterior podemos destacar:

  • Um usuário (emma) fez login através da rede (pseudo TTY pts/3) e ainda está logado.

  • A hora da inicialização atual está listada, junto com o kernel. No exemplo acima, cerca de 25 minutos antes do usuário fazer login.

  • O superusuário (root) se logou através de um console virtual (TTY tty2), brevemente, em meados de maio.

Uma variante do comando last é o comando lastb, que lista as últimas tentativas malsucedidas de login.

Os comandos who e w listam somente os logins ativos no sistema:

$ who
emma  pts/3        2019-06-14 04:28 (::1)

$ w
 05:43:41 up  1:40,  1 user,  load average: 0.25, 0.53, 0.51
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
emma  pts/3     04:28    1:14m  0.04s  0.04s -bash

Algumas informações são comuns aos dois comandos. Por exemplo, um usuário (emma) está logado com um pseudo-dispositivo TTY (pts/3) e a hora de login é 04:28.

O comando w lista mais informações, incluindo o seguinte:

  • A hora atual e há quanto tempo o sistema está ativo

  • Quantos usuários estão conectados

  • As cargas médias dos últimos 1, 5 e 15 minutos

E as informações adicionais para cada sessão de usuário ativo.

  • Tempos selecionados e totais de uso da CPU (IDLE, JCPU e PCPU)

  • O processo atual (-bash). O tempo total de uso da CPU desse processo é o último item (PCPU).

Ambos os comandos têm mais opções para listar várias informações adicionais.

Troca de usuário e aumento de privilégios

Em um mundo ideal, os usuários nunca precisariam de privilégios adicionais para concluir suas tarefas. O sistema sempre “funcionaria” e tudo estaria configurado para diversos tipos de acesso.

Felizmente para nós, o Linux — desde a instalação — já funciona dessa maneira para a maioria dos usuários que não são administradores de sistema, apesar de sempre seguir o modelo de segurança do menor privilégio.

No entanto, existem comandos que permitem aumentar os privilégios quando necessário. Dois dos mais importantes são su e sudo.

Atualmente, na maioria dos sistemas Linux, o comando su é usado apenas para conceder privilégios de root ao usuário padrão (se um nome de usuário não for especificado após o nome do comando). Embora possa ser usado para alternar para outro usuário, não é uma boa prática: os usuários devem fazer login a partir de outro sistema, pela rede, console físico ou terminal no sistema.

emma ~$ su -
Password:
root ~#

Após digitar a senha do superusuário (root), o usuário adquire um shell de superusuário (observe o # no final do prompt de comando) e se torna, para todos os efeitos, o superusuário (root).

Compartilhar senhas é uma péssima ideia para a segurança, e por isso deve haver pouquíssima necessidade do comando su em um sistema Linux moderno.

O cifrão ($) deve encerrar o prompt da linha de comando no shell de usuário não privilegiado, enquanto o símbolo da cerquilha (#) deve encerrar o prompt da linha de comando no shell do superusuário (root). É altamente recomendável que o caractere final de qualquer prompt nunca se afaste desse padrão “universalmente aceito”, uma vez que essa nomenclatura é empregada em materiais de aprendizado, incluindo estes.

Warning

Nunca mude para o superusuário (root) sem passar o parâmetro do shell de login (-). A menos que haja instruções explícitas do fornecedor do SO ou do software, quando o su for necessário sempre se deve executar su -, com pouquíssimas exceções. Os ambientes de usuário podem causar problemas e alterações indesejáveis de configuração quando usados no modo de privilégio total como superusuário.

Qual o grande problema de se usar su para passar ao modo superusuário (root)? Se a sessão de um usuário regular tiver sido comprometida, a senha do superusuário (root) poderia ser capturada. É aí que entra o “Switch User Do” (ou “Superuser Do”):

$ cat /sys/devices/virtual/dmi/id/board_serial
cat: /sys/devices/virtual/dmi/id/board_serial: Permission denied

$ sudo cat /sys/devices/virtual/dmi/id/board_serial
[sudo] password for emma:
/6789ABC/

Na listagem anterior, o usuário está tentando procurar o número de série da placa do sistema. No entanto, a permissão é negada, pois essas informações estão marcadas como privilegiadas.

Porém, usando o sudo, o usuário digita sua própria senha para se autenticar. Se ele tiver sido autorizado na configuração sudoers para executar esse comando com privilégio, com as opções permitidas, ele funcionará.

Tip

Por padrão, o primeiro comando autorizado sudo autenticará os comandos sudo subsequentes por um período (muito curto) de tempo. Isso pode ser configurado pelo administrador do sistema.

Arquivos de controle de acesso

Quase todos os sistemas operacionais têm um conjunto de locais usados para armazenar os controles de acesso. No Linux, esses são tipicamente arquivos de texto localizados no diretório /etc, que é onde costumam ser armazenados os arquivos de configuração do sistema. Por padrão, esse diretório é legível por todos os usuários no sistema, mas modificável apenas por root.

Os principais arquivos relacionados a contas de usuário, atributos e controle de acesso são:

/etc/passwd

Este arquivo armazena informações básicas sobre os usuários no sistema, incluindo UID e GID, diretório inicial, shell etc. Apesar do nome, nenhuma senha é armazenada aqui.

/etc/group

Este arquivo armazena informações básicas sobre todos os grupos de usuários no sistema, como nome do grupo, GID e membros.

/etc/shadow

É aqui que as senhas dos usuários são armazenadas. Elas são criptografadas por segurança.

/etc/gshadow

Este arquivo armazena informações mais detalhadas sobre grupos, incluindo uma senha criptografada com hash que permite que os usuários se tornem membros do grupo temporariamente, uma lista de usuários que podem se tornar membros do grupo a qualquer momento e uma lista de administradores do grupo.

Warning

Esses arquivos não foram projetados para ser editados diretamente e isso jamais deve ser feito. Esta lição aborda apenas as informações armazenadas nesses arquivos e não a edição deles.

Por padrão, qualquer usuário pode acessar o /etc e ler os arquivos /etc/passwd e /etc/group. E também por padrão nenhum usuário, exceto root, pode ler os arquivos /etc/shadow ou /etc/gshadow.

Também existem arquivos relacionados ao aumento básico de privilégios em sistemas Linux, como nos comandos su e sudo. Por padrão, eles só estão acessíveis ao usuário root.

/etc/sudoers

Este arquivo controla quem pode usar o comando sudo e como.

/etc/sudoers.d

Este diretório pode conter arquivos que suplementam as configurações do arquivo sudoers.

No que diz respeito ao exame LPI Linux Essentials, basta conhecer o caminho e o nome do arquivo padrão de configuração do sudo, /etc/sudoers. A configuração dele está além do escopo destes materiais.

Warning

Embora /etc/sudoers seja um arquivo de texto, ele jamais deve ser editado diretamente. Se for necessário fazer alterações em seu conteúdo, elas devem ser efetuadas através do utilitário visudo.

/etc/passwd

O arquivo /etc/passwd é popularmente chamado “arquivo password” (senha). Cada linha contém diversos campos, sempre delimitados por dois pontos (:). Apesar do nome, o hash one-way das senhas não é armazenado neste arquivo atualmente.

A sintaxe típica de uma linha nesse arquivo é:

USERNAME:PASSWORD:UID:GID:GECOS:HOMEDIR:SHELL

Onde:

USERNAME

O nome de usuário ou nome de login (nome), como root, nobody, emma.

PASSWORD

Antigo local do hash de senhas. Quase sempre é x, indicando que a senha está armazenada no arquivo /etc/shadow.

UID

ID de usuário (UID), como 0, 99, 1024.

GID

ID de grupo padrão (GID), como 0, 99, 1024.

GECOS

Uma lista em formato CSV de informações de usuários, incluindo nome, localização, número de telefone. Por exemplo: Emma Smith,42 Douglas St,555.555.5555

HOMEDIR

Caminho para o diretório inicial do usuário, como /root, /home/emma, etc.

SHELL

O shell padrão para este usuário, como /bin/bash, /sbin/nologin, /bin/ksh etc.

Por exemplo, a linha a seguir descreve o usuário emma:

emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555:/home/emma:/bin/bash
Compreendendo o campo GECOS

O campo GECOS contém três (3) ou mais campos delimitados por vírgula (,), sendo também conhecido como lista de Valores Separados por Vírgula (Comma Separated Values, ou CSV). Embora não exista um padrão imposto, os campos geralmente estão na seguinte ordem:

NAME,LOCATION,CONTACT

Onde:

NAME

é o “Full Name” (nome completo) do usuário, ou o “Software Name” (nome do software) no caso de uma conta de serviço.

LOCATION

normalmente é a localização física do usuário dentro de um prédio, o número da sala ou o departamento ou pessoa a contatar no caso de uma conta de serviço.

CONTACT

lista as informações de contato, como o telefone pessoal ou profissional.

Os campos adicionais podem incluir outras informações de contato, como um número residencial ou endereço de email. Para alterar as informações no campo GECOS, use o comando chfn e responda às perguntas, como abaixo. Se nenhum nome de usuário for fornecido após o nome do comando, serão alteradas as informações do usuário atual:

$ chfn

Changing the user information for emma
Enter the new value, or press ENTER for the default
	Full Name: Emma Smith
	Room Number []: 42
	Work Phone []: 555.555.5555
	Home Phone []: 555.555.6666

/etc/group

O arquivo /etc/group contém arquivos delimitados por dois pontos (:), armazenando informações básicas sobre os grupos no sistema. Ele às vezes é chamado “arquivo de grupo”. A sintaxe de cada linha é:

NAME:PASSWORD:GID:MEMBERS

Onde:

NAME

é o nome do grupo, como root, users, emma etc.

PASSWORD

Antigo local do hash opcional de senhas de grupos. Quase sempre é x, indicando que a senha (caso definida) está armazenada no arquivo /etc/gshadow.

GID

ID de grupo (GID), como 0, 99, 1024.

MEMBERS

uma lista de nomes de usuário que são membros do grupo, separados por vírgula, como jsmith,emma.

O exemplo abaixo mostra uma linha contendo informações sobre o grupo students:

students:x:1023:jsmith,emma

O usuário não precisa ser listado no campo members quando o grupo é o grupo principal de um usuário. Se um usuário estiver listado, o item é redundante — ou seja, não há alterações na funcionalidade, estando listado ou não.

Note

O uso de senhas para grupos está além do escopo desta seção; no entanto, se houver uma, o hash da senha é armazenado no arquivo /etc/gshadow. Isso também está além do escopo desta seção.

/etc/shadow

A tabela a seguir lista os atributos armazenados no arquivo /etc/shadow, comumente chamado de “arquivo de sombra”. O arquivo contém campos sempre delimitados por dois pontos (:). Embora o arquivo tenha muitos campos, a maioria está além do escopo desta lição, exceto os dois primeiros.

A sintaxe básica para uma linha nesse arquivo é:

USERNAME:PASSWORD:LASTCHANGE:MINAGE:MAXAGE:WARN:INACTIVE:EXPDATE

Onde:

USERNAME

O nome de usuário (igual a /etc/passwd), como root, nobody, emma.

PASSWORD

Um hash unidirecional da senha, incluindo o sal anterior. Por exemplo: !!, !$1$01234567$ABC…​, $6$012345789ABCDEF$012…​.

LASTCHANGE

Data da última alteração da senha em dias desde a “época”, como 17909.

MINAGE

Idade mínima da senha em dias.

MAXAGE

Idade máxima da senha em dias.

WARN

Período de aviso antes da expiração da senha, em dias.

INACTIVE

Idade máxima da senha após a expiração, em dias.

EXPDATE

Data da expiração da senha, em dias desde a “época”.

No exemplo abaixo vemos um exemplo de entrada do arquivo /etc/shadow. Note que certos valores, como INACTIVE e EXPDATE, estão indefinidos.

emma:$6$nP532JDDogQYZF8I$bjFNh9eT1xpb9/n6pmjlIwgu7hGjH/eytSdttbmVv0MlyTMFgBIXESFNUmTo9EGxxH1OT1HGQzR0so4n1npbE0:18064:0:99999:7:::

A “época” de um sistema POSIX é meia-noite (0000) do Tempo Universal Coordenado (UTC), na quinta-feira, 1º de janeiro de 1970. A maioria das datas e horas POSIX estão em segundos desde a “época” ou, no caso do arquivo /etc/shadow, dias desde a “época”.

Note

O arquivo de sombra foi desenvolvido para ser legível apenas pelo superusuário e serviços selecionados de autenticação do sistema principal que verificam o hash de senha unidirecional no login ou em outro momento da autenticação.

Embora existam soluções de autenticação diferentes, o método básico de armazenamento de senha é a função de hash unidirecional (one-way). Isso é feito para que a senha nunca seja armazenada em texto não criptografado em um sistema, já que a função de hash não é reversível. Você pode transformar uma senha em um hash, mas (idealmente) não é possível transformar um hash novamente em uma senha.

No máximo, é necessário um método de força bruta para experimentar todas as combinações de uma senha até que uma delas corresponda. Para atenuar o risco de um hash de senha ser quebrado em um sistema, os sistemas Linux aplicam um “sal” aleatório em cada hash de senha de um usuário. Assim, o hash para uma senha de usuário em um sistema Linux geralmente não será o mesmo que em outro sistema Linux, mesmo que a senha seja idêntica.

No arquivo /etc/shadow, a senha pode assumir diversas formas. Elas tipicamente incluem o seguinte:

!!

Indica uma conta “desativada” (a autenticação não é possível), sem hash de senha armazenado.

!$1$01234567$ABC…​

Uma conta “desativada” (indicado pelo ponto de exclamação inicial), com uma função de hash anterior, sal de hash e string de hash armazenados.

$1$0123456789ABC$012…​

Uma conta “ativada”, com uma função de hash, sal de hash e string de hash armazenados.

A função de hash, o sal de hash e a string de hash são precedidos e delimitados por um cifrão ($). O comprimento do sal de hash deve ser entre oito e dezesseis (8-16) caracteres. Eis exemplos dos três mais comuns:

$1$01234567$ABC…​

Uma função de hash de MD5 (1), com um hash de exemplo com oito caracteres.

$5$01234567ABCD$012…​

Uma função de hash de SHA256 (5), com um hash de exemplo com doze caracteres.

$6$01234567ABCD$012…​

Uma função de hash de SHA512 (6), com um hash de exemplo com doze caracteres.

Note

A função de hash MD5 é considerada criptograficamente insegura em relação ao nível atual (2010 e posterior) dos ASICs e até mesmo para os SIMD usados para computação em geral. Na verdade, o FIPS (Federal Information Processing Standards) dos EUA não permite que o MD5 seja usado para quaisquer funções criptográficas, exceto em aspectos muito limitados de validação, mas não para garantir a integridade das assinaturas digitais ou finalidades similares.

Do ponto de vista dos objetivos e do exame LPI Linux Essentials, basta entender que o hash da senha de um usuário local é armazenado no arquivo /etc/shadow, que apenas serviços selecionados de autenticação podem ler e o superusuário pode modificar através de outros comandos.

Exercícios Guiados

  1. Considere a seguinte saída do comando id:

    $ id emma
    uid=1000(emma) gid=1000(emma) groups=1000(emma),4(adm),5(tty),10(uucp),20(dialout),27(sudo),46(plugdev)

    Em quais arquivos estão armazenados os atributos a seguir?

    UID e GID

    Grupos

    • Adicionalmente, em qual arquivo a senha do usuário é armazenada?

  2. Quais dos tipos de criptografia a seguir é usado por padrão para armazenar senhas localmente em um sistema Linux?

    • Asymmetric

    • One-way Hash

    • Symmetric

    • ROT13

  3. Se uma conta tem um ID de usuário (UID) com número menor que 1000, de que tipo de conta se trata?

  4. Como é possivel obter uma lista dos logins ativos de seu sistema e uma contagem deles?

  5. Usando o comando grep, temos o resultado abaixo com informações sobre o usuário emma.

    $ grep emma /etc/passwd
    emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555,:/home/emma:/bin/ksh

    Preencha as lacunas da tabela com as informações apropriadas usando a saída do comando anterior.

    Nome de usuário

    Senha

    UID

    GID principal

    GECOS

    Diretório inicial

    Shell

Exercícios Exploratórios

  1. Compare os resultados de last com w e who. Quais detalhes estão faltando em cada um dos comandos em comparação com os outros?

  2. Tente lançar os comandos who e w -his.

    • Quais informações foram removidas da saída do comando w com as opções “no header” (-h) e “short” (-s)?

    • Quais informações foram adicionadas à saída do comando w com a opção “ip address” (-i)?

  3. Qual é o arquivo que armazena o hash de senha unidirecional de uma conta de usuário?

  4. Qual arquivo contém a lista dos grupos de que uma conta de usuário faz parte? Qual lógica poderia ser usada para compilar uma lista dos grupos de que uma conta de usuário faz parte?

  5. Um ou mais (1+) dos seguintes arquivos não é legível por usuários regulares, sem privilégios especiais, por padrão. Quais?

    • /etc/group

    • /etc/passwd

    • /etc/shadow

    • /etc/sudoers

  6. Como seria possível trocar o shell de login do usuário atual pelo Korn Shell (/usr/bin/ksh) em modo não-interativo?

  7. Por que o diretório inicial do usuário root não fica dentro do diretório /home?

Resumo

Nesta lição, descobrimos os bancos de dados de usuários e grupos do Linux. Aprendemos as propriedades mais importantes de usuários e grupos, incluindo seus nomes e IDs numéricos. Também investigamos como o hash de senhas funciona no Linux e como os grupos são atribuídos aos usuários.

Todas essas informações são armazenadas nos quatro arquivos a seguir, que fornecem os controles de acesso de segurança local mais básicos em um sistema Linux:

/etc/passwd

Todos os atributos POSIX locais da conta de usuário, exceto o hash da senha, legíveis por todos.

/etc/group

Todos os atributos POSIX locais da conta de grupo, legíveis por todos.

/etc/shadow

Todos os hashes de senha locais de usuário (e informações de expiração), ilegíveis por qualquer um (apenas processos selecionados).

/etc/sudoers

Todas as informações/permissões locais de aumento de privilégios pelo comando sudo.

Os seguintes comandos foram discutidos nesta lição:

id

Lista IDs de usuários e grupos reais (ou efetivos).

last

Lista os usuários que fizeram login por último.

who

Lista usuários que estão conectados no momento.

w

Semelhante a who, mas com contexto adicional.

su

Alterna para outro usuário com um shell de login ou executa comandos como aquele usuário, contornando a senha desse usuário.

sudo

Switch User Do (Substituição de Usuário) ou Superuser Do (Fazer como Superusuário). Caso esteja autorizado, o usuário atual digita sua própria senha (se necessário) para aumentar os privilégios.

chsh

Troca o shell de um usuário.

chfn

Altera as informações do usuário no campo GECOS.

Respostas aos Exercícios Guiados

  1. Considere a seguinte saída do comando id:

    $ id emma
    uid=1000(emma) gid=1000(emma) groups=1000(emma),4(adm),5(tty),10(uucp),20(dialout),27(sudo),46(plugdev)

    Em quais arquivos estão armazenados os atributos a seguir?

    UID e GID

    /etc/passwd

    Grupos

    /etc/group

    • Adicionalmente, em qual arquivo a senha do usuário é armazenada?

      A senha de usuário criptografada fica armazenada em /etc/shadow.

  2. Quais dos tipos de criptografia a seguir é usado por padrão para armazenar senhas localmente em um sistema Linux?

    Por padrão, um hash unidirecional é usado para armazenar senhas.

  3. Se uma conta tem um ID de usuário (UID) com número menor que 1000, de que tipo de conta se trata?

    Contas com UID menor que 1000 geralmente são contas de sistema.

  4. Como é possivel obter uma lista dos logins ativos de seu sistema e uma contagem deles?

    Use o comando w. Além de uma lista de logins ativos, ele também mostra informações como a quantidade de usuários conectados, além da carga e tempo de atividade do sistema.

  5. Usando o comando grep, temos o resultado abaixo com informações sobre o usuário emma.

    $ grep emma /etc/passwd
    emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555,:/home/emma:/bin/ksh

    Preencha as lacunas da tabela com as informações apropriadas usando a saída do comando anterior.

    Nome de usuário

    emma

    Senha

    x - deve sempre ser x para um login ativo válido

    UID

    1000

    GID principal

    1000

    GECOS

    Emma Smith,42 Douglas St,555.555.5555

    Diretório inicial

    /home/emma

    Shell

    /bin/ksh

Respostas aos Exercícios Exploratórios

  1. Compare os resultados de last com w e who. Quais detalhes estão faltando em cada um dos comandos em comparação com os outros?

    As ferramentas w e who listam apenas os usuários atualmente conectados ao sistema, ao passo que last também lista os usuários que se desconectaram. O comando w lista a utilização do sistema, enquanto who não faz isso.

  2. Tente lançar os comandos who e w -his.

    • Quais informações foram removidas da saída do comando w com as opções “no header” (-h) e “short” (-s)?

      O cabeçalho não é impresso, o que é útil para análise, e o tempo de login e informações selecionadas da CPU não são listados, respectivamente.

    • Quais informações foram adicionadas à saída do comando w com a opção “ip address” (-i)?

      Essa opção imprime o endereço IP, em vez de tentar a resolução de DNS, imprimindo o nome do host. Essa opção de w é mais adequada à saída padrão do comando last.

  3. Qual é o arquivo que armazena o hash de senha unidirecional de uma conta de usuário?

    O arquivo /etc/shadow armazena o hash unidirecional de uma conta de usuário, já que ele não é legível por uma conta de usuário regular, sem privilégios, ao contrário do arquivo /etc/passwd.

  4. Qual arquivo contém a lista dos grupos de que uma conta de usuário faz parte? Qual lógica poderia ser usada para compilar uma lista dos grupos de que uma conta de usuário faz parte?

    O arquivo /etc/group tem uma lista em formato CSV de nomes de usuários no último campo (“members”) de qualquer linha correspondente a um grupo.

    Qualquer linha no arquivo /etc/group na qual o usuário aparece listado no último campo, “members”, implica que o usuário é membro daquele grupo — supondo-se que ele esteja corretamente formatado (valores delimitados por vírgulas). Além disso, a participação do usuário em seu grupo principal no arquivo /etc/passwd também terá uma entrada correspondente no arquivo /etc/group, incluindo tanto o nome do grupo quanto o GID.

  5. Um ou mais (1+) dos seguintes arquivos não é legível por usuários regulares, sem privilégios especiais, por padrão. Quais?

    • /etc/group

    • /etc/passwd

    • /etc/shadow

    • /etc/sudoers

      Os arquivos /etc/shadow e /etc/sudoers não são legíveis por padrão, exceto por serviços selecionados ou o superusuário. Estas respostas serão personalizadas com base nos sistemas e nomes de usuário usados no laboratório.

  6. Como seria possível trocar o shell de login do usuário atual pelo Korn Shell (/usr/bin/ksh) em modo não-interativo?

    $ chsh -s /usr/bin/ksh
  7. Por que o diretório inicial do usuário root não fica dentro do diretório /home?

    Porque a conta root é necessária para resolver problemas e corrigir erros, o que pode incluir problemas no sistema de arquivos relacionados ao diretório /home. Nesses casos, root deve estar plenamente funcional mesmo que o sistema de arquivos de /home esteja indisponível.

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

Próxima Lição

5.2 Criando Usuários e Grupos (5.2 Lição 1)

Ir para a próxima lição

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

A LPI é uma organização sem fins lucrativos.

© 2023 O Linux Professional Institute (LPI) é um organismo de apoio aos profissionais de Open Source e referência mundial em certificação. Com mais de 200.000 pessoas certificadas, somos o principal organismo de certificação independente para Linux e Open Source do mundo. O LPI certificou profissionais de mais de 180 países, oferece exames em diversos idiomas e tem centenas de parcerias de formação em todo o globo.

Nossa missão é proporcionar oportunidades econômicas e criativas para todos, tornando universalmente acessível a certificação de conhecimentos e competências em matéria de Open Source.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Entre em Contato
  • Política de Privacidade e Cookies

Encontrou um erro ou quer ajudar a aprimorar esta página? Escreva pra nós.

© 1999–2023 The Linux Professional Institute Inc. Todos os direitos reservados.