Permissões do Linux

Artigo básico sobre as permissões do Linux para tentar elucidar um pouco como funciona a lógica da coisa.

[ Hits: 5.825 ]

Por: Buckminster em 08/05/2023


Desenvolvimento 1



Até aqui, é importantíssimo entender que o root é uma coisa e o Dono de diretórios e arquivos é outra; são distintos.

O root está acima do Dono, do Grupo e dos Outros. O root é o cara! E esse cara pode ser qualquer um (que tenha a senha de root)!

Por exemplo, o usuário lebowski é um cara chamado João Muhammad Wang da Silva (na instalação do sistema ele poderia ter colocado o nome do usuário de João, de Muhammad, de Wang, de Silva, etc, mas preferiu colocar o nome de lebowski). E este usuário lebowski, que é o CPF João Muhammad Wang da Silva, é o Dono lebowski de algum diretório e/ou arquivo e pode fazer parte de um Grupo ou pode ser os Outros em relação a algum diretório e/ou arquivo. Quem decide é o root.

Então, a pessoa João Muhammad Wang da Silva como root pode colocar o usuário lebowski (ele mesmo) como Outros em um determinado diretório e/ou arquivo, bem como pode colocar como Dono ou colocar na patota, no Grupo.

O importante é entender que você como root deve abstrair do mundo e a partir daí enxergar você mesmo como um usuário qualquer, ou seja, neste momento você é o root, é o cara; você não é o lebowski, sequer você é o João Muhammad Wang da Silva... você nem é você mesmo: você é o root.

O lebowski, neste momento, é um usuário que o root manipula como quiser e você é o root... pelo menos até deslogar do root e voltar a ser o lebowski com seus poderes limitados, sem poderes de super-vaca.

No Linux temos R de Read (em Português "Leitura"), W de Write (em Português "Escrita", mas entende-se aqui por Escrita/Gravação) e temos X de Execute (Execução).

Leitura - Concede a capacidade de ler, ou seja, visualizar o conteúdo do arquivo.

Escrita/Gravação - Entende-se aqueles diretórios e arquivos os quais um determinado usuário pode alterar, escrever e gravar no arquivo; concede a capacidade de modificar ou remover o conteúdo do arquivo; é a permissão mais cabulosa das três.

Execução - O usuário com permissões de execução pode executar um arquivo como um programa.

E temos os modos de acesso concernentes às permissões:

Ler
O acesso a um diretório significa que o usuário pode ler o conteúdo. O usuário pode ver os nomes dos arquivos dentro do diretório.

Escrever
Significa que o usuário pode adicionar ou excluir arquivos do diretório e pode modificar o conteúdo de um arquivo.

Executar
A execução de um diretório ou arquivo realmente não faz sentido na forma de acesso ao diretório ou arquivo, então pense nisso como uma permissão de passagem (não passageira, mas de passagem, atravessar). Por exemplo, um usuário deve ter acesso de execução ao diretório bin para executar o comando ls ou cd.

Então não confunda as permissões de forma geral com as permissões dos modos de acesso, isso reflete-se ao que veremos adiante com chown (change owner) e chmod (change mode).

Porém, antes temos o seguinte esquema:

Neste momento, você, neófito, pode estar se perguntando: "Agora colocaram números no meio da parada?" Mas é simples, é o formato octal (são oito algarismos de 0 a 7). O formato octal é um conjunto de oito números onde cada número define um tipo de acesso diferente.

O hífen (tracinho) indica que uma determinada permissão não está configurada, ou seja, o usuário não tem aquela permissão.
  • 0 Sem permissões --- = 0
  • 1 Permissão de Execução --x = 1
  • 2 Permissão de Escrita -w- = 2
  • 3 Permissão de Escrita e Execução: 1 (execute) + 2 (write) = 3 -wx
  • 4 Permissão de Leitura r-- = 4
  • 5 Permissão de Leitura e Execução: 4 (read) + 1 (execute) = 5 r-x
  • 6 Permissão de Leitura e Escrita: 4 (read) + 2 (write) = 6 rw-
  • 7 Todas as Permissões: 4 (read) + 2 (write) + 1 (execute) = 7 rwx

  • R de Read (Leitura) recebe o valor 4.
  • W de Write (Escrever/Gravar) recebe o valor 2.
  • X de Execution (Execução) recebe o valor 1.

Recebem esses valores (números) porque foram convencionados, apesar de que isso remonta aos primórdios de bits e bytes, mas não vem ao caso.

Veremos agora a saída do comando ls -l para vermos algumas permissões como exemplo.

# ls -l
total 52
-rw-r--r-- 1 root root 9644 abr 5 02:54 clamav-milter.conf
-rw-r--r-- 1 root root 26117 abr 5 02:54 clamd.conf
-rw-r--r-- 1 root root 5983 abr 5 02:54 freshclam.conf
drwxr-xr-x 12 root root 4096 mar 13 20:34 nftables
-rw-r--r-- 1 root root 0 mar 13 19:14 packages.txt



Vamos analisar a primeira parte da seguinte linha:

drwxr-xr-x 12 root root 4096 mar 13 20:34 nftables
  • Tem 10 caracteres no começo da linha (drwxr-xr-x).
  • Inicia com "d" que significa que é um diretório, os outros nove são as permissões propriamente ditas, três para cada: Dono, Grupo e Outros. rwx (dono), r-x (grupo) e r-x (outros).
  • O hífen, no caso, não é um separador, ele indica quando uma permissão não está configurada e as permissões aparecem em sequência rwx.

Traduzindo para octal:
  • rwx é 4+2+1 = 7.
  • r-x é 4+1 = 5
  • r-x é 4+1 = 5

Em octal a permissão é 755.

Aí você escolhe se quer trabalhar umas vezes com letras (rwx) e outras com números (421).

Esta linha:

-rw-r--r-- 1 root root 5983 abr 5 02:54 freshclam.conf

Tem os 10 caracteres iniciando com um hífen (traço) que estando no início da linha indica se tratar de um arquivo.

Seguindo o esquema r=4, w=2 e x=1 temos os nove caracteres restantes que são as permissões propriamente ditas:

rw- = 4+2 = 6
r-- = 4
r-- = 4


Permissão 644.

Lembrando que muitas vezes um programa ao ser instalado ele muda as permissões padrões do sistema operacional para suas próprias permissões, mas é para isso mesmo que existem os comandos, principalmente como root, para você alterar tudo e bagunçar todo o sistema.

# ls -l
lista as permissões dos diretórios e arquivos.

Caso queira listar um diretório ou arquivo em específico:

# ls -l nome_do_arquivo ou diretorio

Não me deterei em comandos aqui, pois temos que entender a lógica da coisa antes de ser um mero decorador de comandos. Os comandos você memoriza praticando e os manuais estão aí para auxiliar.

Dando um umask -S no mesmo lugar:

# umask -S u=rwx,g=rx,o=rx

u=usuário=dono, g=grupo e o=outros.

Podemos ver a diferença. A saída do umask refere-se às permissões padrões em relação ao sistema e a saída do ls -l refere-se aos diretórios e arquivos.

Em qualquer lugar (diretório) que você for, a saída do umask -S será sempre a mesma. Vá dando cd /home, cd /usr/src, cd /bin/X11, etc, e dando umask -S e verá que a saída é sempre a mesma.

A saída de ls -l muda de acordo com as permissões de cada diretório e arquivo.

Quando aparecer uma linha assim:

lrwxrwxrwx 1 root root 4 mar 18 17:58 zstdmt -> zstd

O "l" (letra éle) no início dos 10 caracteres indica se tratar de um link simbólico (symlink).

Agora ficou fácil de entender as permissões, a linha aí de cima tem as permissões:
  • rwx - Dono;
  • rwx - Grupo;
  • rwx - Outros.

Permissão 777.

Depois do primeiro caractere à esquerda começam as permissões que são nove caracteres e quando tem hífen nos nove caracteres indica que tal permissão (r, w ou x) não está setada.

No primeiro caractere:
  • d -> indica que é um diretório;
  • hífen(-) -> indica que é um arquivo;
  • l -> indica que é um link simbólico.

Vamos ver o significado de toda a linha:

drwxr-xr-x 12 root root 4096 mar 13 20:34 nftables
  • d = tipo do arquivo (é um diretório)
  • rwxr-xr-x = permissões de acesso ao diretório ou arquivo ou symlink
  • 12 = número total de links para o arquivo ("atalhos") somado com o número de diretórios e arquivos dentro do diretório em questão
  • root = usuário proprietário do arquivo
  • root = grupo do arquivo
  • 4096 = tamanho do arquivo em bytes
  • mar = mês da última modificação
  • 13 = dia da última modificação
  • 20:34 = horário da última modificação
  • nftables = nome do arquivo ou diretório

Alterando permissões

# chmod 444 diretorio ou arquivo
ou
sudo chmod 444 diretorio ou arquivo

Podemos aplicar uma permissão recursivamente com o parâmetro "-R" de forma que todo o diretório e subdiretórios e arquivos também recebam esta permissão. Exemplo:

# chmod -R 750 diretorio ou arquivo

Obs.: A opção -R muda as permissões de TODOS os diretórios e arquivos que estão dentro do diretório. Por exemplo:

# chmod -R 777 nftables

mudará as permissões de TODOS os diretórios e arquivos incluindo os arquivos dentro dos diretórios dentro de nftables, TUDO ficará com as permissões 777. Use com cuidado.

Alterando o dono

Sintaxe:

chown [opções] [novo_proprietário] [:novo_grupo] nomes_arquivos

Alterar o dono do diretório ou arquivo para o usuário lebowski

# chown lebowski diretorio ou arquivo

Alterar o usuário (dono) e o grupo do diretório ou arquivo para dono lebowski e grupo patota:

# chown lebowski:patota nome_do_diretorio ou nome_do_arquivo

Vamos ver um pouco mais na realidade:

# adduser lebowski www-data
# cd /var/www
# chown -Rv www-data:www-data /var/www/
# chmod -Rv g+rw /var/www/

O comando adduser foi usado para colocar o usuário lebowski no grupo www-data, a patota do Apache.

Depois o root entrou (cd, change directory) no diretório /var/www.

O comando chown (change owner) atribuiu os arquivos contidos em /var/www para o usuário e grupo www-data, ou seja, colocou o usuário www-data como dono e colocou o /var/www no grupo www-data. E atribuiu recursivamente (-R) e verbosamente (v dá informações na saída do comando).

Pode ter um usuário e um grupo com o mesmo nome, mas não pode ter dois usuários com o mesmo nome e nem dois grupos com o mesmo nome.
  • chown define quem é o proprietário do arquivo ou diretório.
  • chmod define quem tem permissão de fazer outras coisas dentro do arquivo ou diretório.

O comando chmod (change mode) adicionou permissões de leitura (r) e escrita (w) aos arquivos para os grupos a que pertencem, no caso www-data.

Percebam que pode ter mais de uma sintaxe:

# chmod g+rw diretorio ou arquivo
# chmod 755 diretorio ou arquivo
  • g+rw acrescenta essas permissões, caso não tenham.
  • g-rx tira essas permissões, caso tenham.
  • g=x elimina todas as permissões que tem no grupo e deixa com somente permissão de execução (x).

A mesma coisa com:
  • u+rwx;
  • u-rx;
  • u=r.

Lembrando:
  • u = Usuário/Dono;
  • g = Grupo;
  • o = Outros.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Desenvolvimento 1
   3. Desenvolvimento 2
   4. Conclusão
Outros artigos deste autor

Compilando kernel no Debian Squeeze

Problema no GRUB no Debian Squeeze 6.0.7 [Resolvido]

Configuração do sistema, DHCP, compartilhamento e DNS no Debian Squeeze

Como agendar um backup automático do PostgreSQL no Cron evitando o problema de senha

kernel Linux otimizado - Compilação e teste

Leitura recomendada

Incentivo ao Funtoo

Use o GAG e nunca mais perca o boot

Guia pós-instalação do Slackware - edição 2013

Instalando o Slackware 10.1

GNOME vs KDE - Usabilidade ou Personalização

  
Comentários
[1] Comentário enviado por danniel-lara em 09/05/2023 - 09:34h


Muito bom o Artigo

[2] Comentário enviado por maurixnovatrento em 14/05/2023 - 20:35h


Ótimo artigo.

___________________________________________________________
Conhecimento não se Leva para o Túmulo.
https://github.com/mxnt10

[3] Comentário enviado por SamL em 23/05/2023 - 00:51h

Massa hein!


https://nerdki.blogspot.com/ acessa ai, é grátis
Não gostou? O ícone da casinha é serventia do site!

[4] Comentário enviado por Hunt15 em 16/06/2023 - 03:43h

I like the way you made this post. Short but juicy. Thanks for sharing! https://www.paybyplatema.one/


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts