Linux e Unix
Permissões de Acesso a Arquivos e Diretórios e comando chmod
O Linux / Unix possui um sistema de permissões de acesso a arquivos e diretórios relativamente complexo.
Neste sistema, existem três tipos de permissões básicas: leitura, escrita (gravação) e execução, representados respectivamente pelos caracteres r, w e x:
Leitura (Read): r
Escrita (Write): w
Execução (Execute): x
Sem permissão: -
Vejamos como exemplo a listagem de arquivos de um diretório no meu sistema usando o comando ls -l:
$ ls -l
A primeira coluna à esquerda mostra as permissões dos arquivos e diretórios listados. Note que o primeiro caractere mais à esquerda indica o tipo do arquivo mostrado. Temos então dois arquivos (curriculum e planilha-01) e um diretório (Projetos).
Os tipos mais comuns incluem os da tabela a seguir:
Código | Tipo de arquivo |
- | Arquivo normal de dados, como texto, imagens, vídeos, programas executáveis, arquivos zipados, etc. |
d | Diretório. Os diretórios são arquivos também, porém contendo nomes de arquivos e ponteiros para inodes do disco. |
l | Link simbólico (symlink) - um arquivo que aponta para um outro arquivo ou diretório |
p | Pipe nomeado. Um pipe permite que dois programas em execução se comuniquem entre si, escreverndo e lendo dados no pipe. |
s | Socket. Um socket é parecido com um pipe nomeado, porém é usado em comunicações de rede. |
b | Dispositivo de bloco, o qual é um arquivo que corresponde a um dispositivo de hardware para o qual os dados são transferidos (e lidos) em blocos de bytes. |
c | Dispositivo de caractere, que é um arquivo que corresponde a um dispositivo de hardware para o qual os dados são transferidos (e lidos) em unidades de um byte. |
Os demais caracteres (nove em número) representam as permissões de acesso aos arquivos e diretórios.
Essas permissões são agrupadas em três conjuntos com três caracteres em cada conjunto, representando (em ordem) as permissões do usuário proprietário, do grupo do arquivo, e dos demais usuários (“outros”). Veja essa disposição na figura a seguir:
Tipo | Permissões do usuário proprietário | Permissões do grupo do arquivo | Permissões dos demais usuários - outros |
A ordem das permissões em cada conjunto é sempre a mesma: rwx (read, write e execute)
No exemplo da tabela acima, temos:
Tipo: Arquivo comum (-)
Permissões do proprietário: Leitura e gravação (rw-)
Permissões do grupo: Somente leitura (r--)
Permissões dos outros: Somente leitura (r--)
A permissão de Leitura permite que o usuário possa ler o conteúdo do arquivo, ou no caso de um diretório, visualizar seu conteúdo.
A permissão de Gravação permite que o usuário possa alterar o conteúdo do arquivo, ou no caso de um diretório, criar, renomear e excluir arquivos que ele contenha.
A permissão de Execução permite que o usuário possa executar um arquivo - um programa ou script - , ou no caso de um diretório, acessá-lo.
A maioria das permissões não se aplica ao usuário root. O root pode ler ou alterar qualquer arquivo no computador, mesmo arquivos que ninguém tenha permissão de acessar (permissão negada totalmente).
Podemos alterar as permissões de acesso de um arquivo ou diretório usando o comando chmod (change mode).
Alterando permissões de acesso a arquivos - comando chmod
Vamos aprender a modificar as permissões de acesso usando o comando chmod.
Sintaxe:
chmod [opções] [modo] nomes_arquivos
As opções são similares às dos comandos chgrp e chown. Geralmente usamos a opção -R (recursivo) para alterar as permissões de todos os arquivos em uma árvore de diretórios de uma só vez.
Há duas formas de especificarmos o modo (permissões) que será aplicado aos arquivos: modo octal (numérico) ou modo simbólico (códigos). Veremos as duas formas neste artigo.
Modo octal
No modo octal, cada tipo de permissão receberá um valor numérico, de acordo com os bits que forem ativados. Assim:
r | w | x | Permissão | Valor octal |
0 | 0 | 0 | Sem permissão | 0 |
0 | 0 | 1 | Execução | 1 |
0 | 1 | 0 | Gravação | 2 |
0 | 1 | 1 | Gravação e Execução | 3 |
1 | 0 | 0 | Leitura | 4 |
1 | 0 | 1 | Leitura e execução | 5 |
1 | 1 | 0 | Leitura e gravação | 6 |
1 | 1 | 1 | Permissão total | 7 |
:
Ou seja, um valor octal 1 equivale à permissão de execução, um valor octal 2 à permissão de gravação e o valor 4 à permissão de leitura. As demais combinações são derivadas da soma desses valores.
Por exemplo:
Leitura e gravação = 4 + 2 = 6
Leitura e execução = 4 + 1 = 5
Permissão total = 4 + 2 + 1 = 7
Usamos um valor desses para cada conjunto de permissões, ou seja, um número indicará a permissão do proprietário do arquivo, o segundo valor a permissão do grupo e o terceiro valor a permissão do resto do mundo.
Vejamos exemplos da aplicação do modo octal com o comando chmod:
1. Desejamos aplicar permissão de leitura e gravação ao proprietário do arquivo curriculum e a seu grupo, e somente leitura aos outros:
# chmod 664 curriculum
Ficamos então com:
- rw- rw- r--
6 6 4
2. Agora vamos alterar as permissões para que o proprietário possa ler e gravar, o grupo somente ler e os outros não terão acesso nenhum ao arquivo curriculum:
# chmod 640 curriculum
Assim:
- rw- r-- ---
6 4 0
Note que o zero significa “sem permissão alguma” para os outros.
3. Dando permissão total para todos no arquivo:
# chmod 777 curriculum
Então:
- rwx rwx rwx
7 7 7
4. Dando permissão de leitura e execução em um script chamado prog01.sh para o proprietário e grupo, e acesso somente execução aos outros:
# chmod 551 prog01.sh
Assim:
- r-x r-x --x
5 5 1
Veja que nosso terminal coloriu de verde o nome do arquivo - esse comportamento é padrão em muitas distribuições Linux quando listamos arquivos cujo bit de execução esteja ativado.
Vejamos agora como alterar as permissões usando o modo literal (códigos) do comando chmod.
Modo literal (simbólico)
No modo literal usaremos abreviações (símbolos) para representar os níveis de permissões e as permissões em si. Veja na tabela a seguir quais os códigos usados:
Código | Significado |
u | Usuário proprietário |
g | Grupo do arquivo |
o | Outros |
a | Todos (u, g o) |
+ | Adicionar permissão |
- | Remover permissão |
= | Configurar permissão como |
r | Leitura |
w | Gravação |
x | Execução |
s | SUID ou SGID |
t | Sticky bit |
As permissões especiais SUID, SGID e Sticky permitem estender a funcionalidade do sistema de permissões do Linux.
Estudaremos o significado das permissões SUID, SGID e Sticky bit em outro artigo.
Vejamos agora alguns exemplos do uso do modo literal com o comando chmod. A tabela a seguir mostra as permissões de um arquivo chamado arq1 e as permissões que ele recebe após a execução do comando chmod
Permissão do arquivo | Comando chmod aplicado | Nova permissão | Significado |
rw-r--r-- | chmod a+x arq1 | rwx-r-xr-x | Permissão de execução adicionada a todos |
rw-r--r-- | chmod g=u arq1 | rw-rw-r-- | Permissão do grupo configurada igual à do proprietário. |
r--r--r-- | chmod ug=rw arq1 | rw-rw-r-- | Permissões do proprietário e do grupo ajustadas em leitura e escrita. |
rw------- | chmod u+x,g=rx arq1 | rwxr-x--- | Permissão de execução adicionada ao proprietário, e leitura e execução ajustadas ao grupo. |
rwxrw-rw- | chmod o-w arq1 | rwxrw-r-- | Permissão de gravação retirada dos outros. |
r--r--r-- | chmod a+wx arq1 | rwxrwxrwx | Permissões de gravação e execução adicionadas a todos |
As permissões literais (simbólicas) são mais úteis quando queremos fazer alguma alteração simples, como adicionar ou retirar uma permissão qualquer.
Já as permissões octais são mais úteis quando queremos ajustar as permissões de modo geral a um arquivo, incluindo as permissões de proprietário, grupo e outros de uma só vez.
Somente o proprietário do arquivo e o superusuário root podem alterar permissões de um arquivo.
Outros conceitos e comandos relacionados com permissões de acesso a arquivos no Unix são:
- Comandos chgrp e chown
- Bits SUID, SGID e Sticky
- Listas de controle de acesso (ACL)
Estudaremos esses conceitos em vários outros artigos aqui no Planeta Unix.
Você pode também assistir a um vídeo sobre permissões no Linux:
loading...
-
Sticky Bit - Permissões Especiais No Linux 02
Sticky Bit - Permissões especiais no Linux Vamos explorar neste vídeo a configuração do Sticky bit, que é uma permissão de acesso que pode ser atribuída a arquivos e diretórios no Linux. Geralmente aplicamos o sticky bit a diretórios, de modo...
-
Acl - Access Control List - Ajustando Permissões Avançadas No Linux
ACL - Access Control List - Ajustando permissões avançadas no Linux As ACLs (Access Control Lists) nos fornecem um controle mais refinado sobre quais usuários podem acessar diretórios e arquivos específicos do que as permissões tradicionais do...
-
O Arquivo /etc/group - Gerenciando Grupos No Sistema Linux
Por Fábio dos Reis O arquivo /etc/group é um arquivo de sistema que define os grupos aos quais os usuários pertencem em sistemas UNIX, como o Linux e o BSD.Usamos os grupos para configurar permissões de acesso a arquivos e pastas aos usuários do...
-
Alterar Proprietário E Grupo De Arquivos - Comandos Chown E Chgrp
A segurança em sistemas Linux (e Unix em geral) é constituída a partir dos conceitos de propriedade dos arquivos e de permissões de arquivos. Neste artigo estudaremos a posse dos arquivos, falando sobre Proprietário e Grupo de um arquivo. Cada arquivo...
-
Criando E Manipulando Diretórios: Comandos Mkdir, Rmdir E Rm -r
Uma das tarefas mais importantes na administração de um sistema Linux é a criação e manutenção de diretórios (pastas), que aparecem para os usuários como contêineres para organizar os arquivos do sistema e armazenar seus dados, por exemplo.Nos...
Linux e Unix