Voltar ao Diminua Blog

Artigo

Entendendo o `chmod` no Linux: Controle de Permissões de Arquivos

Domine as permissões de leitura, escrita e execução para garantir a segurança e o bom funcionamento do seu sistema.

Entendendo o `chmod` no Linux: Controle de Permissões de Arquivos

O Que São Permissões de Arquivos no Linux?

No mundo Linux, cada arquivo e diretório possui um conjunto de permissões que definem quem pode fazer o quê com ele. Essas permissões são cruciais para a segurança e estabilidade do sistema, pois controlam o acesso aos dados e a execução de programas. Existem três tipos básicos de permissões: leitura (r), escrita (w) e execução (x). Além disso, as permissões são aplicadas a três categorias de usuários: o dono do arquivo, o grupo ao qual o arquivo pertence, e outros (todos os demais usuários do sistema).

Decifrando a Saída de `ls -l`

Para visualizar as permissões de um arquivo ou diretório, utilizamos o comando ls -l. A saída desse comando exibe uma linha detalhada com várias informações, sendo a primeira coluna a que nos interessa para entender as permissões. Ela se parece com algo assim: -rwxr-xr--.

Vamos quebrar essa sequência:

  • O primeiro caractere indica o tipo de arquivo: - para arquivos regulares, d para diretórios, l para links simbólicos, entre outros.
  • Os próximos nove caracteres são divididos em três grupos de três:
  • Primeiro grupo (rwx): Permissões para o dono do arquivo.
  • Segundo grupo (r-x): Permissões para o grupo.
  • Terceiro grupo (r--): Permissões para outros usuários.

Dentro de cada grupo, as letras significam:

  • r: Permissão de leitura.
  • w: Permissão de escrita.
  • x: Permissão de execução.
  • -: Indica que a permissão correspondente não foi concedida.

No exemplo -rwxr-xr--, temos:

  • O arquivo é um arquivo regular (-).
  • O dono tem permissão de leitura, escrita e execução (rwx).
  • O grupo tem permissão de leitura e execução (r-x).
  • Outros usuários têm apenas permissão de leitura (r--).

O Comando `chmod`: Modificando Permissões

O comando chmod (change mode) é a ferramenta utilizada para alterar as permissões de arquivos e diretórios. Ele pode ser usado de duas formas principais: simbólica e numérica.

Modo Simbólico

O modo simbólico utiliza letras para representar usuários e operações. A sintaxe geral é: chmod [quem][operação][permissão] arquivo(s).

  • Quem:
  • u (user/dono)
  • g (group/grupo)
  • o (others/outros)
  • a (all/todos - dono, grupo e outros)
  • Operação:
  • +: Adiciona uma permissão.
  • -: Remove uma permissão.
  • =: Define as permissões exatamente como especificado (substitui as permissões existentes para essa categoria).
  • Permissão:
  • r (read)
  • w (write)
  • x (execute)
Exemplos de Modo Simbólico:

Para dar permissão de execução ao dono de um script chamado meu_script.sh:

chmod u+x meu_script.sh

Para remover a permissão de escrita do grupo e de outros usuários de um arquivo chamado config.txt:

chmod go-w config.txt

Para definir que apenas o dono pode ler, escrever e executar um arquivo, e mais ninguém pode fazer nada:

chmod u=rwx,go= meu_arquivo.dat

Modo Numérico (Octal)

O modo numérico é uma forma mais concisa de definir permissões, utilizando uma representação octal (base 8). Cada permissão tem um valor:

  • r (leitura) = 4
  • w (escrita) = 2
  • x (execução) = 1

A soma desses valores para cada categoria (dono, grupo, outros) define o número octal. Por exemplo:

  • rwx (4 + 2 + 1) = 7
  • rw- (4 + 2 + 0) = 6
  • r-x (4 + 0 + 1) = 5
  • r-- (4 + 0 + 0) = 4
  • --x (0 + 0 + 1) = 1
  • --- (0 + 0 + 0) = 0

O comando chmod no modo numérico recebe três dígitos, representando as permissões para o dono, o grupo e outros, respectivamente.

Exemplos de Modo Numérico:

Para dar permissões completas ao dono (rwx), permissão de leitura e execução ao grupo (r-x), e apenas leitura para outros (r--) em um arquivo:

chmod 754 meu_arquivo.txt

Para tornar um script executável por todos (dono, grupo e outros):

chmod 755 meu_script.sh

Para um arquivo de configuração que deve ser lido apenas pelo dono e pelo grupo, e não ser executável por ninguém:

chmod 660 meu_config.conf

Permissões Especiais: SUID, SGID e Sticky Bit

Além das permissões básicas, existem três permissões especiais que alteram o comportamento de arquivos e diretórios:

  • SUID (Set User ID): Quando aplicada a um arquivo executável, faz com que o processo seja executado com os privilégios do dono do arquivo, e não do usuário que o executou. No modo numérico, é representado pelo dígito 4 na primeira posição (ex: 4755). Na saída de ls -l, o x do dono se torna s (ex: -rwsr-xr-x).
  • SGID (Set Group ID): Quando aplicada a um arquivo executável, o processo é executado com os privilégios do grupo do arquivo. Quando aplicada a um diretório, novos arquivos criados dentro dele herdarão o grupo do diretório pai, e não o grupo primário do usuário que os criou. No modo numérico, é representado pelo dígito 2 na primeira posição (ex: 2775). Na saída de ls -l, o x do grupo se torna s (ex: -rwxr-sr-x).
  • Sticky Bit: Quando aplicado a um diretório, impede que usuários removam ou renomeiem arquivos dentro desse diretório, a menos que sejam o dono do arquivo, o dono do diretório ou o superusuário (root). É comumente usado em diretórios como /tmp. No modo numérico, é representado pelo dígito 1 na primeira posição (ex: 1777). Na saída de ls -l, o x de outros se torna t (ex: drwxrwxrwt).

Considerações de Segurança

O uso incorreto das permissões de arquivo pode levar a sérias vulnerabilidades de segurança. Conceder permissões de escrita ou execução desnecessárias pode permitir que usuários não autorizados modifiquem arquivos importantes do sistema ou executem código malicioso. Sempre aplique o princípio do menor privilégio: conceda apenas as permissões estritamente necessárias para que um usuário ou processo funcione corretamente.

Por exemplo, arquivos de configuração sensíveis ou scripts que lidam com informações confidenciais nunca devem ter permissões de escrita para o grupo ou para outros usuários. Da mesma forma, arquivos executáveis que não precisam ser rodados por outros usuários não devem ter permissões de execução para o grupo ou para outros.

Para um controle mais granular sobre permissões, especialmente em ambientes colaborativos, explore os recursos avançados de controle de acesso, como as Access Control Lists (ACLs), que podem ser gerenciadas com os comandos setfacl e getfacl.

Conclusão

Dominar o comando chmod é fundamental para qualquer usuário ou administrador de sistemas Linux. Compreender as permissões de arquivo, como interpretá-las com ls -l e como modificá-las com chmod (seja no modo simbólico ou numérico) permite gerenciar o acesso aos seus dados de forma eficaz e segura. Lembre-se sempre de aplicar as permissões de maneira consciente, priorizando a segurança e a integridade do seu sistema.

Foto de Rafael Minguet Delgado no Pexels.