Permissões de arquivos
Esta aula cobre o modelo de permissões rwx do Linux, os comandos chmod (nos modos octal e simbólico), chown e chgrp para alterar proprietário e grupo, e o comando umask para definir permissões padrão. Inclui exemplos práticos e exercícios com respostas.
Nesta aula, você aprenderá sobre o sistema de permissões de arquivos do Linux, essencial para controlar acesso a arquivos e diretórios em sistemas multiusuário. O modelo rwx define permissões de leitura, escrita e execução para três categorias de usuários: proprietário, grupo e outros. Comandos como chmod, chown, chgrp e umask permitem modificar essas permissões de forma flexível. Entender esses conceitos é fundamental para administração de sistemas e segurança.
Dominar permissões é crucial para garantir que apenas usuários autorizados possam ler, escrever ou executar arquivos, prevenindo acessos indevidos e mantendo a integridade do sistema.
Modelo rwx
O modelo rwx representa três tipos de permissão: r (read/leitura), w (write/escrita) e x (execute/execução). Cada permissão é atribuída a três grupos: proprietário (user, u), grupo (group, g) e outros (others, o). A ordem é sempre: proprietário, grupo, outros. Exemplo: rwxr-xr-- significa proprietário com todas as permissões, grupo com leitura e execução, outros apenas leitura.
Em diretórios, a permissão de execução (x) permite acessar o diretório (entrar nele com cd) e listar conteúdo se também houver permissão de leitura. A permissão de escrita (w) em diretório permite criar, renomear ou deletar arquivos dentro dele. É importante notar que para deletar um arquivo, é necessário ter permissão de escrita no diretório, não no arquivo em si.
Exemplo de visualização com ls -l:
$ ls -l /home/user/documento.txt
-rw-r--r-- 1 user group 1234 Jan 1 10:00 /home/user/documento.txtO primeiro caractere '-' indica arquivo regular (d para diretório, l para link simbólico). Os próximos nove caracteres são as permissões: rw- (proprietário: leitura e escrita), r-- (grupo: leitura), r-- (outros: leitura).
chmod (octal e simbólico)
O comando chmod (change mode) altera as permissões de um arquivo ou diretório. Existem duas formas de especificar as permissões: modo octal e modo simbólico.
Modo octal: cada permissão é representada por um número: r=4, w=2, x=1. A soma desses valores para um grupo (proprietário, grupo, outros) forma um dígito octal (0-7). Assim, um número de três dígitos (ex.: 755) define as permissões completas. Exemplo: 755 = proprietário: 4+2+1=7 (rwx), grupo: 4+0+1=5 (r-x), outros: 4+0+1=5 (r-x).
$ chmod 755 script.sh
$ ls -l script.sh
-rwxr-xr-x 1 user group 0 Jan 1 10:00 script.shModo simbólico: usa letras para especificar quem (u/g/o/a), operador (+/-/=) e permissões (r/w/x). Exemplos:
chmod u+x arquivo– adiciona execução para o proprietáriochmod g-w arquivo– remove escrita do grupochmod o=r arquivo– define outros como somente leiturachmod a+rx arquivo– adiciona leitura e execução para todos
$ chmod u+x,g-w,o=r script.sh
$ ls -l script.sh
-rwxr--r-- 1 user group 0 Jan 1 10:00 script.shÉ possível combinar operadores separados por vírgula. O modo simbólico é mais intuitivo para alterações parciais.
chown e chgrp
O comando chown (change owner) altera o proprietário de um arquivo ou diretório. Apenas o superusuário (root) pode alterar o proprietário. Sintaxe: chown [opções] usuário[:grupo] arquivo. Exemplo:
$ sudo chown maria documento.txt
$ ls -l documento.txt
-rw-r--r-- 1 maria grupo 1234 Jan 1 10:00 documento.txtPara alterar também o grupo, use chown maria:adm documento.txt. Se apenas o grupo for alterado, pode-se usar chown :adm documento.txt.
O comando chgrp (change group) altera apenas o grupo de um arquivo ou diretório. Qualquer usuário pode alterar o grupo de um arquivo que possui para um grupo do qual seja membro. Sintaxe: chgrp [opções] grupo arquivo. Exemplo:
$ chgrp desenvolvedores projeto/
$ ls -ld projeto/
drwxr-xr-x 2 user desenvolvedores 4096 Jan 1 10:00 projeto/Use a opção -R para aplicar recursivamente em diretórios: chown -R maria:adm /home/maria/.
umask
O comando umask (user mask) define as permissões padrão para novos arquivos e diretórios criados pelo usuário. A máscara é um valor octal que subtrai permissões do valor base (666 para arquivos, 777 para diretórios). Por exemplo, umask 022 resulta em permissões 644 (rw-r--r--) para arquivos e 755 (rwxr-xr-x) para diretórios. O valor padrão geralmente é 022 ou 002.
Para visualizar o umask atual: umask (exibe em octal) ou umask -S (exibe em modo simbólico). Para alterar: umask 027. A alteração é válida apenas para a sessão atual; para torná-la permanente, adicione o comando no arquivo ~/.bashrc ou ~/.profile.
Exemplo de cálculo: umask 027 (octal) = --- -w- rwx (simbólico). Para arquivos (base 666): 666 - 027 = 640 (rw-r-----). Para diretórios (base 777): 777 - 027 = 750 (rwxr-x---).
$ umask 027
$ touch novo_arquivo
$ mkdir novo_diretorio
$ ls -l
total 0
-rw-r----- 1 user group 0 Jan 1 10:00 novo_arquivo
drwxr-x--- 2 user group 4096 Jan 1 10:00 novo_diretorioÉ importante notar que o umask não afeta arquivos já existentes. Para scripts, pode-se usar umask dentro do script para garantir permissões adequadas aos arquivos criados.
Boas práticas e observações finais
Sempre verifique as permissões com ls -l antes e depois de alterações. Use o modo octal para definir permissões exatas e o modo simbólico para ajustes rápidos. Lembre-se de que permissões muito permissivas (ex.: 777) podem ser um risco de segurança. Para diretórios compartilhados, considere usar o sticky bit (chmod +t) para evitar que usuários deletem arquivos de outros. O comando umask deve ser ajustado conforme a política de segurança do ambiente.
Exercícios
Crie um arquivo chamado
teste.txtcom permissões 644. Altere para que o grupo tenha permissão de escrita, mantendo as demais. Mostre o comando e a saída dels -l.✓ Resposta:$ touch teste.txt $ chmod 644 teste.txt $ chmod g+w teste.txt # ou: chmod 664 teste.txt $ ls -l teste.txt -rw-rw-r-- 1 user group 0 Jan 1 10:00 teste.txtExplique o que significa a permissão
rwxr-xr--para um diretório. Quais operações um usuário do grupo pode realizar? E um outro?✓ Resposta: A permissão significa: proprietário (rwx) pode ler, escrever e executar (acessar) o diretório; grupo (r-x) pode ler e executar (listar conteúdo e acessar), mas não pode criar/remover arquivos (sem w); outros (r--) apenas podem ler (listar nomes, mas não podem acessar porque falta execução? Na verdade, para listar o conteúdo é necessário leitura, mas para acessar (cd) é necessária execução. Então outros podem listar mas não podem entrar no diretório. Operações: grupo pode listar e acessar, outros só listar (se tiverem permissão de leitura, mas sem execução não podem acessar; na prática, listar requer leitura, mas acessar requer execução). Portanto, outros podem ver os nomes mas não podem ler ou modificar arquivos dentro (a menos que tenham permissão específica nos arquivos).Usando o modo simbólico, remova a permissão de execução para outros em um arquivo
script.shque atualmente tem permissões 755. Mostre o comando e o resultado.✓ Resposta:$ chmod o-x script.sh $ ls -l script.sh -rwxr-xr-- 1 user group 0 Jan 1 10:00 script.shO que o comando
chown :adm arquivofaz? É necessário ser root?✓ Resposta: Altera o grupo do arquivo para 'adm', mantendo o proprietário atual. Não é necessário ser root; o proprietário do arquivo pode alterar o grupo para qualquer grupo do qual seja membro (desde que não seja root, mas pode alterar para grupos que pertence). Se o proprietário não pertencer ao grupo 'adm', a operação falhará. Apenas root pode alterar para qualquer grupo.Defina um umask que resulte em permissões padrão 640 para arquivos e 750 para diretórios. Mostre o comando e verifique com um exemplo.
✓ Resposta: Para arquivos: base 666 - umask = 640 => umask = 26 (octal 026). Para diretórios: base 777 - umask = 750 => umask = 27 (octal 027). Há conflito? Na verdade, o umask é único e aplicado a ambos. Para obter 640 em arquivos e 750 em diretórios, precisamos de um umask que subtraia 26 de 666 (dá 640) e 27 de 777 (dá 750). Isso não é possível com um único valor porque a subtração não é linear. O umask funciona como máscara de bits: cada bit 1 na máscara desabilita a permissão correspondente. O valor 027 em binário: 000 010 111. Para arquivos (666 = 110 110 110), aplicando AND com complemento: 110 110 110 & ~000 010 111 = 110 100 000 = 640? Vamos calcular: ~027 = 111 101 000 (bits invertidos). 666 & ~027 = 110 110 110 & 111 101 000 = 110 100 000 = 640. Para diretórios (777 = 111 111 111) & ~027 = 111 111 111 & 111 101 000 = 111 101 000 = 750. Portanto, umask 027 resulta exatamente em 640 para arquivos e 750 para diretórios. Comando:umask 027. Exemplo:$ umask 027 $ touch arq; mkdir dir; ls -l total 0 -rw-r----- 1 user group 0 Jan 1 10:00 arq drwxr-x--- 2 user group 4096 Jan 1 10:00 dir