Post

Guia Completo de Permissões e Propriedades de Arquivos no Linux

Guia Completo de Permissões e Propriedades de Arquivos no Linux

Introdução

No Linux, o sistema de permissões de arquivos é uma das bases para a segurança e o controle de acesso do sistema. Saber configurar e gerenciar essas permissões é essencial para proteger dados, definir acessos e manter a integridade de arquivos e diretórios. Além das permissões tradicionais, o Linux oferece atributos especiais que reforçam ainda mais a segurança, como o uso de atributos de imutabilidade e anexação, configuráveis através dos comandos chattr e lsattr. Este tutorial foi criado para explorar profundamente cada aspecto das permissões e atributos de arquivos no Linux, abordando desde as configurações básicas até controles avançados.

Aqui, você aprenderá como visualizar, configurar e proteger arquivos e diretórios de maneira eficaz. Cada seção oferece teoria e prática, com exemplos e exercícios que fortalecem o aprendizado. Ao final, você estará preparado para dominar as práticas de controle de acesso no Linux, aplicando conhecimentos essenciais para administrar o sistema de forma segura e eficiente.


Sumário

  1. Introdução
  2. Gerenciamento de Permissões no Sistema de Arquivos
  3. Controle de Acesso
  4. Tipos de Permissões de Arquivo
  5. Permissões Básicas
  6. Modo Literal e Modo Numérico
  7. Permissões Avançadas
  8. Sticky Bit
  9. SUID (Set User ID) Bit
  10. SGID (Set Group ID) Bit
  11. Entendendo Umask
  12. Solução de Problemas Comuns com Permissões no Linux
  13. Atributos de Arquivos com chattr e lsattr
  14. Conclusão

1. Gerenciamento de Permissões no Sistema de Arquivos

Objetivo

Nesta seção, vamos introduzir os conceitos de permissões e propriedades de arquivos no Linux, explicando sua importância para o controle e segurança do sistema de arquivos. Veremos também como visualizar as permissões atuais de arquivos e diretórios usando o comando ls -l.

Estrutura de Permissões no Linux

No Linux, cada arquivo e diretório possui permissões associadas a três tipos de usuários:

  • Usuário (ou Dono): o proprietário do arquivo.
  • Grupo: o grupo ao qual o arquivo pertence.
  • Outros: todos os outros usuários do sistema.

Cada um desses tipos de usuários pode ter permissões específicas, divididas em:

  • Leitura (r): permite visualizar o conteúdo do arquivo ou listar o conteúdo de um diretório.
  • Escrita (w): permite modificar o conteúdo de um arquivo ou criar/remover arquivos em um diretório.
  • Execução (x): permite executar o arquivo (se for um script/programa) ou acessar um diretório.

Visualizando Permissões com ls -l

Para ver as permissões de um arquivo ou diretório, use o comando:

1
ls -l

Exemplo de Saída

1
-rwxr-xr--  1 usuario grupo 1024 Nov  3 10:00 exemplo.txt

A linha acima exibe detalhes sobre o arquivo exemplo.txt. Vamos entender cada parte:

Segmento Descrição
-rwxr-xr-- Representa as permissões do arquivo: o primeiro caractere indica o tipo (- para arquivo, d para diretório), e os demais são as permissões.
1 Número de links para o arquivo.
usuario Dono do arquivo (usuário que possui o arquivo).
grupo Grupo ao qual o arquivo pertence.
1024 Tamanho do arquivo em bytes.
Nov 3 10:00 Data e hora da última modificação.
exemplo.txt Nome do arquivo.

Interpretação das Permissões

No exemplo -rwxr-xr--, temos as permissões divididas em três blocos para cada tipo de usuário:

  1. Usuário (Dono): rwx (permissão de leitura, escrita e execução).
  2. Grupo: r-x (permissão de leitura e execução, mas não de escrita).
  3. Outros: r-- (apenas leitura).

Tabelas de Permissões e Bits de Permissão

Permissões Básicas

Permissão Símbolo Descrição
r Leitura Permite ler o conteúdo do arquivo ou listar arquivos no diretório.
w Escrita Permite modificar o conteúdo de um arquivo ou criar/remover arquivos em um diretório.
x Execução Permite executar um arquivo ou acessar um diretório.

Bits de Permissão

Bit Símbolo Descrição
400 r-- Permissão de leitura para o dono
200 -w- Permissão de escrita para o dono
100 --x Permissão de execução para o dono
040 r-- Permissão de leitura para o grupo
020 -w- Permissão de escrita para o grupo
010 --x Permissão de execução para o grupo
004 r-- Permissão de leitura para outros
002 -w- Permissão de escrita para outros
001 --x Permissão de execução para outros

Exercícios Práticos

  1. Listar Permissões de Arquivos: Execute o comando abaixo para listar as permissões dos arquivos no diretório atual:
    1
    
    ls -l
    
  2. Interpretar Permissões: Tente interpretar as permissões de pelo menos três arquivos ou diretórios diferentes para identificar as permissões de leitura, escrita e execução.

  3. Criar e Modificar Permissões: Crie um arquivo e defina permissões de leitura, escrita e execução para o usuário e apenas leitura para grupo e outros:
    1
    2
    3
    
    touch exemplo_teste.txt
    chmod 744 exemplo_teste.txt
    ls -l exemplo_teste.txt
    

2. Controle de Acesso

Objetivo

Entender como o Linux gerencia o controle de acesso para arquivos e diretórios. Nesta seção, vamos explorar os modos Usuário (User), Grupo (Group), Outros (Other), e Todos (All), que ajudam a determinar quem pode interagir com os arquivos e como.

Modos de Controle de Acesso

  1. Modo Usuário (User): Representa o dono do arquivo, ou seja, o usuário que criou ou possui o arquivo/diretório. Ele tem controle direto sobre as permissões atribuídas a si mesmo.

    • Comando para visualizar o usuário/dono:
      1
      
      ls -l nome_do_arquivo
      

      Exemplo de saída:

      1
      
      -rw-r--r-- 1 maria users 1024 Nov  3 12:00 exemplo.txt
      

      No exemplo, o dono do arquivo exemplo.txt é maria.

  2. Modo Grupo (Group): Representa o grupo ao qual o arquivo ou diretório pertence. Todos os membros deste grupo herdam as permissões definidas para o grupo.

    • Comando para alterar o grupo de um arquivo:
      1
      
      sudo chgrp novo_grupo nome_do_arquivo
      
  3. Modo Outros (Other): Representa todos os outros usuários do sistema que não são o dono nem pertencem ao grupo do arquivo.

  4. Modo Todos (All): Representa todos os tipos de usuários (usuário, grupo e outros) simultaneamente. Isso é útil quando você deseja aplicar uma permissão universal a todos os tipos de usuários.

Tabela de Permissões e Modos de Acesso

Tipo de Usuário Símbolo Descrição
Usuário u Refere-se ao dono do arquivo.
Grupo g Refere-se ao grupo ao qual o arquivo pertence.
Outros o Refere-se a todos os outros usuários que não são o dono e nem fazem parte do grupo do arquivo.
Todos a Refere-se a todos os tipos de usuário: dono, grupo e outros.

Exemplos Práticos

Modificando Permissões para Usuário, Grupo e Outros

  1. Conceder permissão de leitura e execução ao grupo:
    1
    
    chmod g+rx exemplo.txt
    
  2. Remover permissão de escrita para outros:
    1
    
    chmod o-w exemplo.txt
    
  3. Definir permissões para todos:
    1
    
    chmod a+r exemplo.txt
    

Modificando Permissões com o Comando chmod

O comando chmod permite configurar permissões para usuário, grupo e outros usando símbolos e letras para especificar permissões. O formato geral é:

1
chmod [operação][permissão][usuário] arquivo
Operação Símbolo Descrição
Adicionar + Adiciona uma permissão.
Remover - Remove uma permissão.
Definir = Define exatamente a permissão indicada.

Exemplos

  1. Adicionar permissão de execução para o usuário (dono):
    1
    
    chmod u+x exemplo.txt
    
  2. Remover permissão de escrita para o grupo:
    1
    
    chmod g-w exemplo.txt
    
  3. Definir leitura e execução para todos os usuários (sem alterar escrita):
    1
    
    chmod a+rx exemplo.txt
    
  4. Definir apenas leitura para todos os usuários, removendo outras permissões:
    1
    
    chmod a=r exemplo.txt
    

Exercícios Práticos de Controle de Acesso

  1. Adicionar Permissões para o Usuário:
    • Crie um novo arquivo e conceda permissões de leitura e escrita apenas para o usuário:
      1
      2
      
      touch meu_arquivo.txt
      chmod u=rw meu_arquivo.txt
      
  2. Remover Permissões de Outros:
    • Remova todas as permissões para outros usuários em um arquivo:
      1
      
      chmod o-rwx exemplo.txt
      
  3. Conceder Permissões a Todos os Tipos de Usuário:
    • Defina permissões completas para o usuário e permissões de leitura e execução para o grupo e outros:
      1
      
      chmod 755 exemplo.txt
      

3. Tipos de Permissões de Arquivo

Objetivo

Nesta seção, vamos explorar os diferentes tipos de permissões no Linux e entender como eles afetam o acesso a arquivos e diretórios. Vamos aprender também como usar o modo numérico para configurar permissões de maneira prática e eficiente.

Tipos de Permissões: Leitura, Escrita e Execução

Cada arquivo e diretório no Linux possui três tipos principais de permissões:

  • Leitura (r): Permite visualizar o conteúdo do arquivo ou listar o conteúdo de um diretório.
  • Escrita (w): Permite modificar o conteúdo de um arquivo ou criar/remover arquivos dentro de um diretório.
  • Execução (x): Permite executar um arquivo (se for um programa ou script) ou acessar um diretório.

Essas permissões são atribuídas aos três tipos de usuários: usuário (dono), grupo e outros.

Tabela de Permissões com Modo Numérico

No Linux, as permissões também podem ser definidas usando um sistema numérico, onde cada permissão tem um valor específico:

Permissão Valor Numérico Descrição
Nenhuma 0 Nenhuma permissão
Execução 1 Permissão de execução
Escrita 2 Permissão de escrita
Escrita + Execução 3 Permissões de escrita e execução
Leitura 4 Permissão de leitura
Leitura + Execução 5 Permissões de leitura e execução
Leitura + Escrita 6 Permissões de leitura e escrita
Leitura + Escrita + Execução 7 Permissões de leitura, escrita e execução

Diferenças entre Permissões para Arquivos e Diretórios

  • Em arquivos:
    • Leitura (r) permite visualizar o conteúdo do arquivo.
    • Escrita (w) permite modificar o conteúdo do arquivo.
    • Execução (x) permite executar o arquivo, se ele for um programa ou script.
  • Em diretórios:
    • Leitura (r) permite listar os arquivos no diretório.
    • Escrita (w) permite criar, renomear e excluir arquivos no diretório.
    • Execução (x) permite acessar o diretório, ou seja, entrar nele e buscar informações.

Exemplos Práticos

  1. Permissão 644 para arquivos (rw-r--r--):
    • Usuário: leitura e escrita.
    • Grupo e outros: apenas leitura.
    • Usado para arquivos que só o dono pode modificar, mas todos podem ler.
    1
    
    chmod 644 exemplo.txt
    
  2. Permissão 755 para diretórios (rwxr-xr-x):
    • Usuário: leitura, escrita e execução.
    • Grupo e outros: apenas leitura e execução.
    • Usado para diretórios que todos podem acessar e ler, mas apenas o dono pode modificar.
    1
    
    chmod 755 /caminho/para/diretorio
    
  3. Permissão 700 (rwx------):
    • Usuário: leitura, escrita e execução.
    • Grupo e outros: sem acesso.
    • Usado para arquivos ou diretórios privados.
    1
    
    chmod 700 privado.txt
    

Exercícios Práticos

  1. Definir Permissões de Arquivo: Defina permissões de leitura e escrita para o usuário, e apenas leitura para o grupo e outros em um arquivo.
    1
    
    chmod 644 arquivo_exemplo.txt
    
  2. Definir Permissões de Diretório: Crie um diretório e configure-o para que o dono tenha todas as permissões, enquanto grupo e outros podem apenas acessar e listar o conteúdo.
    1
    2
    
    mkdir meu_diretorio
    chmod 755 meu_diretorio
    
  3. Definir Permissões Restritivas: Crie um arquivo privado que só o dono possa ler e modificar.
    1
    2
    
    touch privado.txt
    chmod 600 privado.txt
    

4. Permissões Básicas

Objetivo

Nesta seção, vamos aprender a configurar permissões básicas para usuários, grupos e outros, usando o comando chmod. Vamos explorar exemplos de como conceder e remover permissões específicas.

Definindo Permissões Básicas com chmod

O comando chmod permite definir permissões para usuário (dono), grupo e outros. Podemos usá-lo de duas formas:

  • Modo Literal: Usando letras (r, w, x) para adicionar, remover ou definir permissões.
  • Modo Numérico: Usando números (como 755 ou 644) para configurar permissões de forma mais compacta.

Exemplo de Configuração com chmod

  1. Adicionar Permissões de Leitura e Execução ao Grupo:
    1
    
    chmod g+rx arquivo.txt
    
  2. Remover Permissão de Escrita para Outros:
    1
    
    chmod o-w arquivo.txt
    
  3. Definir Permissões de Leitura para Todos:
    1
    
    chmod a+r arquivo.txt
    

Modo Literal e Exemplos

Comando Descrição
chmod u+x Adiciona permissão de execução para o dono.
chmod g-w Remove a permissão de escrita para o grupo.
chmod o=r Define apenas leitura para outros (remove outras permissões).
chmod a+rw Adiciona permissão de leitura e escrita para todos.
chmod -R 755 Aplica permissões de 755 a todos os arquivos em um diretório (opção recursiva).

Exercícios Práticos de Permissões Básicas

  1. Adicionar Permissões de Execução para o Dono e Grupo:
    • Conceda permissões de execução ao dono e ao grupo de um arquivo:
      1
      
      chmod ug+x exemplo.sh
      
  2. Remover Todas as Permissões para Outros:
    • Remova todas as permissões para “outros” em um arquivo ou diretório:
      1
      
      chmod o-rwx exemplo.txt
      
  3. Definir Permissões de Leitura e Escrita para Todos:
    • Crie um arquivo e defina permissões para leitura e escrita para todos os tipos de usuário:
      1
      2
      
      touch compartilhado.txt
      chmod a+rw compartilhado.txt
      

Explicação sobre Permissões para Proprietário, Grupo e Outros

  • Permissões para Proprietário: Controla o que o dono do arquivo pode fazer com ele. Normalmente, o dono tem mais permissões para leitura, escrita e execução.
  • Permissões para Grupo: Define as ações que os membros do grupo associado ao arquivo podem executar.
  • Permissões para Outros: Define as permissões para todos os outros usuários no sistema que não são o dono e não pertencem ao grupo do arquivo.

Com o comando chmod, você pode ajustar essas permissões conforme necessário para reforçar a segurança e o controle de acesso.


5. Modo Literal e Modo Numérico

Objetivo

Nesta seção, vamos aprender a definir permissões de maneira eficiente usando os modos literal e numérico com o comando chmod. Cada método tem suas vantagens, e conhecer ambos é essencial para gerenciar permissões de forma prática.

Modo Literal

No modo literal, usamos letras para indicar as permissões e para quem elas se aplicam:

  • Usuário (u), Grupo (g), Outros (o), e Todos (a).
  • Operadores: + para adicionar, - para remover, e = para definir permissões específicas.
  • Permissões: r (leitura), w (escrita), x (execução).

Exemplos em Modo Literal

Comando Descrição
chmod u+x file Adiciona permissão de execução ao usuário (dono).
chmod g-w file Remove a permissão de escrita para o grupo.
chmod o=r file Define apenas leitura para outros.
chmod a+rw file Adiciona leitura e escrita para todos os tipos de usuário.
chmod u=rwx,g=rx,o=r file Define permissões específicas para usuário, grupo, e outros.

Exercício Prático com Modo Literal

  1. Adicione permissões de leitura e execução ao grupo, e remova a permissão de escrita para outros:
    1
    
    chmod g+rx,o-w arquivo.txt
    
  2. Defina permissões de leitura e escrita para todos:
    1
    
    chmod a+rw arquivo.txt
    
  3. Remova todas as permissões de execução para usuário, grupo, e outros:
    1
    
    chmod a-x arquivo.txt
    

Modo Numérico

No modo numérico, usamos uma combinação de três dígitos para representar as permissões:

  • Cada dígito representa as permissões para usuário, grupo, e outros, nessa ordem.
  • Os números são somados para obter o valor final:
    • Leitura (r) = 4
    • Escrita (w) = 2
    • Execução (x) = 1

Tabela de Valores Numéricos de Permissões

Permissão Valor Descrição
Nenhuma 0 Nenhuma permissão
Execução (x) 1 Permissão de execução
Escrita (w) 2 Permissão de escrita
Leitura (r) 4 Permissão de leitura
Leitura + Execução 5 Leitura e execução
Leitura + Escrita 6 Leitura e escrita
Leitura + Escrita + Execução 7 Todas as permissões

Exemplos em Modo Numérico

Comando Permissões Descrição
chmod 755 file rwxr-xr-x Usuário: leitura, escrita, execução; Grupo e Outros: leitura e execução.
chmod 644 file rw-r--r-- Usuário: leitura e escrita; Grupo e Outros: apenas leitura.
chmod 700 file rwx------ Usuário: todas as permissões; Grupo e Outros: nenhuma permissão.

Exercício Prático com Modo Numérico

  1. Configure permissões completas para o dono, e permissões de leitura e execução para o grupo e outros:
    1
    
    chmod 755 arquivo.txt
    
  2. Defina permissões de leitura e escrita para o dono e grupo, e somente leitura para outros:
    1
    
    chmod 664 arquivo.txt
    
  3. Configure permissões restritas para que apenas o dono possa ler, escrever, e executar o arquivo:
    1
    
    chmod 700 arquivo.txt
    

Comparação entre Modo Literal e Modo Numérico

Ação Modo Literal Modo Numérico
Adicionar execução para grupo chmod g+x file Não aplicável (numérico define todas as permissões)
Remover escrita para outros chmod o-w file Não aplicável
Definir permissões rwxr-xr-- chmod u=rwx,g=rx,o=r file chmod 754 file

Exercícios de Configuração para Praticar

  1. Defina permissões completas para o dono, e permissões de leitura para o grupo e outros:
    • Modo Literal: chmod u=rwx,g=r,o=r file
    • Modo Numérico: chmod 744 file
  2. Remova a permissão de escrita para grupo e outros:
    • Modo Literal: chmod go-w file
  3. Adicione permissão de execução para todos:
    • Modo Literal: chmod a+x file

Esses exercícios ajudam a consolidar o entendimento do modo literal e numérico, permitindo que você escolha o método mais adequado para cada situação.


6. Permissões Avançadas

Objetivo

Nesta seção, vamos explorar permissões avançadas, incluindo os bits sticky, SUID (Set User ID), SGID (Set Group ID), e umask. Esses recursos são úteis para situações onde o controle de acesso precisa ser mais granular, especialmente em diretórios e scripts compartilhados.

Tabela de Bits Especiais

Bit Especial Valor Numérico Descrição
Sticky Bit 1000 Protege arquivos em diretórios compartilhados; apenas o dono pode excluí-los.
SUID 4000 Permite que um arquivo execute com as permissões do dono, em vez do usuário que o executa.
SGID 2000 Permite que um arquivo execute com as permissões do grupo do arquivo. Para diretórios, faz com que arquivos criados herdem o grupo do diretório.

Importância das Permissões Avançadas

  • Sticky Bit: Usado principalmente em diretórios como /tmp, onde vários usuários têm acesso, mas apenas o dono de cada arquivo (ou root) pode removê-los.
  • SUID: Comumente usado em executáveis que precisam temporariamente de permissões elevadas, como o comando passwd, que altera senhas.
  • SGID: Útil em diretórios compartilhados para garantir que todos os arquivos criados dentro deles pertençam ao mesmo grupo.

Tabela de Comandos para Configurar Bits Especiais

Comando Descrição
chmod +t dir Ativa o sticky bit no diretório dir.
chmod u+s file Ativa o SUID no arquivo file.
chmod g+s dir Ativa o SGID no diretório dir (novos arquivos herdam o grupo do diretório).
chmod 4755 file Define rwsr-xr-x no arquivo, ativando SUID.
chmod 2755 dir Define rwxr-sr-x no diretório, ativando SGID.

Exercícios Práticos para Permissões Avançadas

  1. Configurar o Sticky Bit em um Diretório:
    • Crie um diretório compartilhado e configure o sticky bit para proteger os arquivos contra remoção por outros usuários.
      1
      2
      
      mkdir /tmp/compartilhado
      chmod +t /tmp/compartilhado
      
  2. Ativar o SUID em um Arquivo:
    • Defina o SUID em um script para que ele execute com as permissões do dono, em vez do usuário atual.
      1
      
      chmod u+s meu_script.sh
      
  3. Configurar SGID em um Diretório Compartilhado:
    • Crie um diretório para projetos de grupo, onde todos os arquivos herdem o grupo do diretório.
      1
      2
      
      mkdir /projetos
      chmod g+s /projetos
      

Considerações de Segurança para Permissões Avançadas

As permissões avançadas, especialmente SUID e SGID, devem ser usadas com cuidado:

  • SUID e SGID em executáveis podem representar riscos de segurança, pois permitem que o programa rode com permissões elevadas.
  • O Sticky Bit ajuda a proteger diretórios compartilhados, como /tmp, onde múltiplos usuários podem criar arquivos.

7. Sticky Bit

Objetivo

Nesta seção, vamos entender o uso do Sticky Bit, que é uma permissão especial para diretórios compartilhados. Ele garante que apenas o dono de um arquivo ou o administrador do sistema possa removê-lo ou renomeá-lo dentro do diretório, mesmo que outros usuários tenham permissões de escrita.

O Que é o Sticky Bit?

O Sticky Bit é uma permissão especial, indicada pelo bit t no final das permissões de um diretório (exemplo: drwxrwxrwt). É comumente usado em diretórios onde vários usuários podem criar arquivos, mas onde é desejável que apenas o dono do arquivo ou o administrador possa removê-lo.

Um exemplo clássico é o diretório /tmp, onde todos os usuários podem criar arquivos temporários, mas apenas os donos dos arquivos ou o root podem excluí-los.

Como Configurar o Sticky Bit

Para ativar o Sticky Bit em um diretório, usamos o comando chmod com a opção +t.

1
chmod +t /caminho/do/diretorio

Exemplo

1
chmod +t /tmp/compartilhado

Verificando o Sticky Bit

Para verificar se o Sticky Bit está configurado, observe a permissão do diretório. Um t no final indica que o Sticky Bit está ativado.

1
ls -ld /tmp/compartilhado

Exemplo de Saída

1
drwxrwxrwt  5 usuario grupo 4096 Nov  3 10:00 /tmp/compartilhado

Tabela de Configuração do Sticky Bit

Comando Descrição
chmod +t dir Ativa o Sticky Bit no diretório dir.
chmod 1777 dir Define permissões completas com Sticky Bit para todos os usuários.
chmod -t dir Remove o Sticky Bit do diretório dir.

Exercício Prático com Sticky Bit

  1. Configurar Sticky Bit para Diretório Compartilhado:
    • Crie um diretório compartilhado e configure o Sticky Bit:
      1
      2
      3
      
      mkdir /tmp/diretorio_compartilhado
      chmod 1777 /tmp/diretorio_compartilhado
      ls -ld /tmp/diretorio_compartilhado
      
  2. Teste de Exclusão:
    • Tente excluir um arquivo dentro do diretório compartilhado com outro usuário. Verifique que apenas o dono do arquivo ou o root pode removê-lo.

8. SUID (Set User ID) Bit

Objetivo

Nesta seção, vamos explorar o SUID (Set User ID), que permite que um arquivo execute com as permissões do proprietário (usuário) do arquivo, em vez do usuário que o executa. Isso é útil em programas que precisam de permissões temporárias elevadas, como o comando passwd.

O Que é o SUID?

O SUID é um bit de permissão especial que faz com que o arquivo seja executado com as permissões do dono do arquivo, não com as permissões do usuário que o está executando. Quando o SUID está ativo, ele é indicado por um s no campo de permissões do usuário, como em -rwsr-xr-x.

Como Configurar o SUID

Para configurar o SUID em um arquivo, usamos o comando chmod com a opção u+s ou 4 como o primeiro dígito no modo numérico.

1
chmod u+s /caminho/do/arquivo

Exemplo

1
chmod u+s /usr/bin/passwd

Verificando o SUID

Para verificar o SUID, observe as permissões do arquivo. Um s no campo de permissão do usuário indica que o SUID está configurado.

1
ls -l /usr/bin/passwd

Exemplo de Saída

1
-rwsr-xr-x  1 root root 54256 Nov  3 10:00 /usr/bin/passwd

Tabela de Configuração do SUID

Comando Descrição
chmod u+s file Ativa o SUID no arquivo file.
chmod 4755 file Define permissões rwsr-xr-x para ativar o SUID.
chmod u-s file Remove o SUID do arquivo file.

Considerações de Segurança para o SUID

O SUID pode representar um risco de segurança, pois permite que o programa rode com permissões elevadas. Evite aplicar o SUID em scripts ou em executáveis que não tenham sido projetados para esse tipo de acesso.

Exercício Prático com SUID

  1. Configurar SUID em um Executável de Teste:
    • Crie um script simples e configure o SUID (necessita de permissões administrativas):
      1
      2
      3
      
      touch teste_suid.sh
      chmod u+s teste_suid.sh
      ls -l teste_suid.sh
      
  2. Testar o Comando passwd:
    • Verifique que o comando passwd possui o SUID ativado:
      1
      
      ls -l /usr/bin/passwd
      

9. SGID (Set Group ID) Bit

Objetivo

Nesta seção, vamos explorar o SGID (Set Group ID), que permite que um arquivo execute com as permissões do grupo ao qual o arquivo pertence. No caso de diretórios, o SGID faz com que novos arquivos criados herdem o grupo do diretório.

O Que é o SGID?

O SGID é uma permissão especial que faz com que o arquivo seja executado com as permissões do grupo do arquivo, em vez do grupo do usuário que o executa. Em diretórios, o SGID garante que novos arquivos herdem o grupo do diretório, o que facilita a colaboração em projetos de grupo.

  • SGID em Arquivos: Usado em arquivos executáveis para executar com as permissões do grupo do arquivo.
  • SGID em Diretórios: Configura o diretório para que todos os arquivos criados nele herdem o grupo do diretório.

Como Configurar o SGID

Para configurar o SGID em um arquivo ou diretório, usamos o comando chmod com a opção g+s ou 2 como o primeiro dígito no modo numérico.

1
chmod g+s /caminho/do/diretorio

Exemplo para Diretório

1
chmod g+s /projetos/grupo

Verificando o SGID

Para verificar o SGID, observe as permissões do arquivo ou diretório. Um s no campo de permissão do grupo indica que o SGID está configurado.

1
ls -ld /projetos/grupo

Exemplo de Saída

1
drwxr-sr-x  2 usuario grupo 4096 Nov  3 10:00 /projetos/grupo

Tabela de Configuração do SGID

Comando Descrição
chmod g+s dir Ativa o SGID no diretório dir.
chmod 2755 dir Define permissões rwxr-sr-x para ativar o SGID em um diretório.
chmod g-s dir Remove o SGID do diretório dir.

Exercício Prático com SGID

  1. Configurar SGID em um Diretório de Projeto:
    • Crie um diretório para um projeto de grupo e configure o SGID para que novos arquivos herdem o grupo do diretório:
      1
      2
      3
      
      mkdir /projetos/grupo_projeto
      chmod g+s /projetos/grupo_projeto
      ls -ld /projetos/grupo_projeto
      
  2. Testar o SGID:
    • Crie um novo arquivo dentro do diretório com outro usuário ou altere temporariamente seu grupo para verificar que ele herda o grupo do diretório.

Considerações de Segurança para o SGID

O SGID é seguro quando usado corretamente em diretórios compartilhados, mas deve ser evitado em scripts ou binários que não precisam dessa permissão, pois ele pode introduzir riscos de segurança, especialmente em arquivos executáveis.


10. Entendendo Umask

Objetivo

Explicar o conceito de umask e como ele influencia as permissões padrão para novos arquivos e diretórios. Vamos aprender a verificar, configurar, e ajustar o umask para diferentes ambientes e necessidades de segurança.

O Que é Umask?

O umask (user file-creation mode mask) é uma configuração que determina quais permissões padrão serão removidas de novos arquivos e diretórios criados pelo usuário. O umask subtrai permissões das permissões padrão, limitando-as de acordo com os valores definidos.

  • Permissões padrão para novos arquivos: 666 (leitura e escrita para todos).
  • Permissões padrão para novos diretórios: 777 (leitura, escrita, e execução para todos).

Por exemplo, um umask de 022 removerá a permissão de escrita para o grupo e outros, resultando em permissões de 644 para arquivos e 755 para diretórios.

Verificando o Umask Atual

Para ver o umask atual, basta usar o comando:

1
umask

Exemplo de Saída

1
0022

Aqui, 0022 indica que a permissão de escrita será removida para o grupo e outros, resultando em permissões finais de 755 para diretórios e 644 para arquivos.

Como Funciona o Cálculo do Umask

Para calcular as permissões finais:

  1. Comece com as permissões padrão: 777 para diretórios e 666 para arquivos.
  2. Subtraia o valor do umask para obter as permissões finais.

Exemplos de Umask

Umask Permissões para Diretórios Permissões para Arquivos Descrição
022 755 644 Usuário com todas as permissões; grupo e outros com leitura e execução em diretórios e leitura em arquivos.
027 750 640 Usuário com todas as permissões; grupo com leitura e execução em diretórios e leitura em arquivos; outros sem permissão.
002 775 664 Usuário e grupo com leitura e escrita; outros com leitura e execução em diretórios e leitura em arquivos.
077 700 600 Usuário com todas as permissões; grupo e outros sem permissão.

Como Configurar o Umask

O umask pode ser configurado temporariamente em uma sessão ou permanentemente no arquivo de configuração do shell do usuário.

Configurando Umask Temporariamente

Para definir o umask temporariamente, use o comando umask seguido do valor desejado:

1
umask 027

Configurando Umask Permanentemente

Para tornar o umask permanente, adicione o comando umask ao arquivo de configuração do shell, como .bashrc, .bash_profile, ou /etc/profile para configurações globais.

  1. Abra o arquivo .bashrc no editor de sua escolha:
    1
    
    nano ~/.bashrc
    
  2. Adicione o comando umask com o valor desejado:
    1
    
    umask 027
    
  3. Salve o arquivo e recarregue a configuração:
    1
    
    source ~/.bashrc
    

Dica de Segurança: Um umask mais restritivo, como 077, é ideal em ambientes onde os arquivos devem ser privados, limitando o acesso apenas ao usuário.

Tabela de Códigos Comuns para Umask

Umask Diretórios Arquivos Ideal para
022 755 644 Configuração padrão com leitura para grupo e outros.
027 750 640 Ambientes onde apenas grupo e usuário precisam de acesso.
002 775 664 Permissões mais permissivas para ambientes de colaboração.
077 700 600 Ambientes de alta segurança onde o acesso deve ser restrito ao usuário.

Exercícios Práticos com Umask

  1. Verificar o Umask Atual:
    • Execute o comando para visualizar o umask padrão do sistema:
      1
      
      umask
      
  2. Configurar um Umask Temporário para uma Sessão:
    • Configure um umask temporário de 077 e crie um novo arquivo e diretório para verificar as permissões padrão.
      1
      2
      3
      4
      
      umask 077
      touch arquivo_privado.txt
      mkdir diretorio_privado
      ls -ld arquivo_privado.txt diretorio_privado
      
  3. Configurar o Umask Permanentemente:
    • Defina um umask de 027 no arquivo .bashrc e recarregue as configurações para que ele seja aplicado automaticamente em novas sessões.
      1
      2
      
      echo "umask 027" >> ~/.bashrc
      source ~/.bashrc
      

Efeitos do Umask em Diferentes Ambientes

  1. Ambientes Multiusuário: Em sistemas onde vários usuários trabalham em colaboração, um umask de 002 é comum para permitir que os membros de grupo tenham leitura e escrita. Isso é especialmente útil em projetos compartilhados.

  2. Ambientes de Alta Segurança: Em ambientes que exigem confidencialidade e controle estrito, um umask de 077 garante que apenas o dono possa ler, escrever, ou executar os novos arquivos e diretórios.

  3. Servidores Web: Em servidores, umask de 022 ou 027 é comum para garantir que o usuário e o grupo específico tenham permissões, enquanto outros têm apenas leitura, se necessário.


11. Solução de Problemas Comuns com Permissões no Linux

Objetivo

Esta seção ajuda a resolver problemas frequentes relacionados a permissões, como erros ao acessar arquivos, dificuldades em alterar permissões e problemas com permissões avançadas. Cada cenário inclui uma explicação do problema, possíveis causas e soluções sugeridas.


1. Erro de Permissão Negada (Permission Denied)

  • Problema: Ao tentar acessar, modificar ou executar um arquivo, o sistema exibe um erro de “Permission Denied”.
  • Causas Comuns:
    • O usuário não tem permissões suficientes (ex.: falta de permissão de execução em um script).
    • O arquivo ou diretório pertence a outro usuário ou grupo.
    • O sticky bit, SUID, ou SGID está configurado incorretamente.
  • Soluções:
    • Verifique as permissões do arquivo:
      1
      
      ls -l nome_do_arquivo
      
    • Se o arquivo for um script ou programa, verifique se a permissão de execução está ativa para o usuário:
      1
      
      chmod u+x nome_do_arquivo
      
    • Se o problema for de propriedade, considere alterar o dono ou o grupo com chown ou chgrp.

2. Alterar Permissões ou Propriedades Requer Permissões Administrativas

  • Problema: Ao tentar alterar permissões com chmod ou chown, o sistema exibe “Operation not permitted”.
  • Causas Comuns:
    • Somente o dono do arquivo ou o usuário root tem permissão para alterar permissões e propriedades.
    • Arquivos de sistema e alguns diretórios especiais requerem permissões administrativas.
  • Soluções:
    • Use sudo para comandos que exigem privilégios elevados:
      1
      2
      
      sudo chmod 755 nome_do_arquivo
      sudo chown usuario:grupo nome_do_arquivo
      
    • Verifique se o arquivo está em um diretório onde o usuário atual possui permissões de escrita.

3. Novo Arquivo com Permissões Incorretas

  • Problema: Arquivos criados recentemente não têm as permissões esperadas.
  • Causa Comum:
    • O umask do usuário está configurado com um valor inadequado, resultando em permissões padrão indesejadas.
  • Soluções:
    • Verifique o umask atual:
      1
      
      umask
      
    • Ajuste o umask temporariamente ou configure-o no arquivo .bashrc para ajustes permanentes (ex.: umask 022 para permissões de 755 em diretórios).

4. Problemas ao Usar o SUID e SGID

  • Problema: Scripts ou programas com SUID ou SGID configurados não funcionam como esperado, ou apresentam falhas de segurança.
  • Causas Comuns:
    • O SUID ou SGID está configurado em um script de shell (geralmente desaconselhado).
    • O arquivo com SUID é acessado por um usuário sem permissão.
  • Soluções:
    • Evite usar SUID e SGID em scripts. Preferencialmente, use-os apenas em executáveis binários.
    • Revise a necessidade do SUID e, se necessário, aplique-o com cautela:
      1
      
      sudo chmod u+s nome_do_executavel
      
    • Para SGID em diretórios compartilhados, use chmod g+s nome_do_diretorio para garantir que novos arquivos herdem o grupo correto.

5. Erro: “Read-Only File System”

  • Problema: Ao tentar modificar um arquivo, o sistema exibe “Read-Only File System”.
  • Causa Comum:
    • O sistema de arquivos foi montado como somente leitura (ex.: em dispositivos removíveis ou partições específicas).
  • Soluções:
    • Verifique o ponto de montagem e se o sistema de arquivos foi montado como somente leitura:
      1
      
      mount | grep nome_do_disco
      
    • Remonte o sistema de arquivos com permissão de escrita (se for seguro e necessário):
      1
      
      sudo mount -o remount,rw /ponto/de/montagem
      

6. Erros ao Trabalhar com Permissões Recursivas

  • Problema: Ao aplicar permissões recursivas (chmod -R), arquivos e diretórios específicos ainda apresentam erros de acesso.
  • Causas Comuns:
    • Certos arquivos ou diretórios têm permissões especiais que impedem modificações.
    • O comando foi aplicado sem sudo, o que é necessário para pastas protegidas.
  • Soluções:
    • Execute o comando com sudo para garantir permissões:
      1
      
      sudo chmod -R 755 /caminho/para/diretorio
      
    • Selecione tipos de arquivos específicos para modificar, evitando sobrecarga de execução:
      1
      2
      
      sudo find /caminho/para/diretorio -type d -exec chmod 755 {} \;
      sudo find /caminho/para/diretorio -type f -exec chmod 644 {} \;
      

12. Atributos de Arquivos com chattr e lsattr

Objetivo

Explicar como os comandos chattr (change attributes) e lsattr (list attributes) são usados para configurar atributos especiais de arquivos no Linux, adicionando uma camada extra de controle sobre arquivos críticos. Esses atributos permitem proteger arquivos importantes contra modificações acidentais ou mal-intencionadas, independentemente das permissões configuradas com chmod e chown.

Diferença entre Permissões e Atributos de Arquivos

Enquanto permissões controlam quem pode ler, escrever, ou executar um arquivo, os atributos de arquivos configurados com chattr oferecem restrições adicionais, que se aplicam a todos os usuários, incluindo o root, para proteger e gerenciar a integridade dos arquivos.

Principais Atributos de Arquivo Configurados com chattr

Atributo Flag Descrição
i +i Torna o arquivo imutável; ele não pode ser alterado, excluído, ou renomeado até que o atributo seja removido.
a +a Define o arquivo como somente para anexação (append-only), permitindo apenas adicionar dados ao final do arquivo, útil para logs.
s +s Quando o arquivo é deletado, ele é apagado de forma segura, não podendo ser recuperado.
e +e Indica que o arquivo está armazenado em formato estendido (comum em sistemas de arquivos ext4).
u +u Permite a recuperação do arquivo após exclusão, caso o sistema de arquivos ofereça suporte.

Exemplo Prático: Protegendo o /etc/resolv.conf com chattr

O arquivo /etc/resolv.conf armazena a configuração de servidores DNS para resolver domínios no sistema. Em muitos sistemas, esse arquivo pode ser reescrito automaticamente por serviços de rede, como o NetworkManager. Para evitar que uma configuração de DNS personalizada seja sobrescrita, o arquivo pode ser protegido com o atributo imutável (+i), que impede qualquer modificação até que o atributo seja removido.

  1. Configure o DNS personalizado:
    1
    
    echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf
    
  2. Defina o atributo imutável no arquivo:
    1
    
    sudo chattr +i /etc/resolv.conf
    
  3. Verifique os atributos do arquivo:
    1
    
    lsattr /etc/resolv.conf
    

    A saída exibirá algo como ----i-------- /etc/resolv.conf, indicando que o arquivo está imutável.

  4. Para modificar o arquivo novamente (por exemplo, para atualizar o DNS), remova temporariamente o atributo i:
    1
    
    sudo chattr -i /etc/resolv.conf
    

Este processo é útil em sistemas onde queremos garantir a persistência de configurações de rede, evitando que gerenciadores de rede sobrescrevam o arquivo.

Outros Exemplos Úteis de chattr e lsattr

  • Tornar um arquivo imutável (ex.: proteger arquivos de configuração sensíveis):
    1
    
    sudo chattr +i /etc/fstab
    
  • Configurar um arquivo como somente para anexação (útil para logs):
    1
    
    sudo chattr +a /var/log/seguro.log
    
  • Listar Atributos de um Arquivo:
    1
    
    lsattr /var/log/seguro.log
    

    A saída exibirá ----a-------- /var/log/seguro.log, indicando que o arquivo é somente para anexação.

Quando Usar chattr e lsattr

Os comandos chattr e lsattr são especialmente úteis para:

  • Proteger arquivos de configuração, como /etc/resolv.conf e /etc/fstab, contra alterações não intencionais.
  • Preservar a integridade de logs que devem ser apenas anexados, como /var/log/seguro.log.
  • Adicionar uma camada extra de segurança a arquivos críticos, onde alterações são proibidas ou restritas.

Esses atributos são uma forma eficaz de garantir que arquivos essenciais do sistema permaneçam estáveis e protegidos contra modificações inesperadas.

Conclusão

O gerenciamento de permissões e atributos de arquivos no Linux é uma habilidade fundamental para qualquer administrador de sistemas ou usuário que deseja garantir segurança e controle sobre seus dados. Ao longo deste tutorial, exploramos as permissões tradicionais com chmod, chown e chgrp, além de comandos avançados como chattr e lsattr para proteger arquivos críticos contra alterações indesejadas. Também incluímos uma seção de solução de problemas, abordando desafios comuns e mostrando como solucioná-los de maneira prática.

Com esse conhecimento, você tem as ferramentas necessárias para configurar permissões de forma eficaz, reforçar a segurança do sistema e lidar com problemas de acesso e modificação de arquivos. Incentivamos que você continue praticando, aplicando essas técnicas no dia a dia, e explorando a documentação oficial para se aprofundar ainda mais. Lembre-se: um sistema bem configurado é o primeiro passo para um ambiente seguro e produtivo no Linux.

This post is licensed under CC BY 4.0 by the author.