Linux: permissão de leitura, escrita e execução de arquivos e diretórios - os comandos chmod, chown e chgrp

Um dos maiores motivos de segurança nos sistemas do tipo Unix, como o Linux, são o modo como arquivos e diretórios podem ser acessados.

É tudo bem dividido entre owner (dono), grupos e outros usuários.
Uns podem ler, outros escrever e apagar, outros executar...

Sabendo e usando isso terá um total controle do sistema, além de entender um pouco o motivo do Linux ser um sistema tão seguro e flexível.

- Permissões de leitura (r-read), escrita (w-write) e execução (x-execute)

O comando 'ls' que lista os arquivos e sub-diretórios de um diretório você já deve conhecer.
Agora use o 'ls -l diretorio', que mostrar uma descrição maior desses arquivos e sub-diretórios, incluindo as permissões de leitura, escrita e execução de cada um deles e o dono.grupo.

Teste com o diretório raiz '/': 
ls -l /

Aprenda como funciona e como usar os comandos chmod, chown e chgrp. Ele são usados para conceder ou tirar permissão de leitura (r-read), escrita (w-write), execução (x-execute), para mudar o dono (owner) de arquivos e diretórios e mudar o grupo de acesso aos arquivos.

Os diretórios são os que começam com 'd', se não começam, não são (tente o comando em uma pasta que não tenha só diretórios, o 'd' não aparece).
Para ver as permissões de um arquivo específico, use o comando 'ls -l arquivo'

Todos os arquivos tem suas permissões separadas por: dono, grupo e outros - NESSA ORDEM
Cada um destes por ter permissão de: leitura(r), escrita(w) e execução(x)

Vamos supor que um diretório de bagunça, onde todos tenham permissão de fazer tudo, como um diretório chamado 'windows/system', por exemplo. Ele apareceria assim no comando 'ls -l':
drwxrwxrwx

Parece confuso, mas é só 'tirar' o 'd' e separar por dono ,grupo e outros:
d(rwx)(rwx)(rwx)

O primeiro diretório, /bin , está assim:
drwxr-xr-x

Ou seja:
d(rwx)(r-x)(r-x)

  • O dono, que é o root, pode tudo: rwx (ler, escrever e executar)
  • O grupo: r-x (ler e executar), no lugar onde seria o 'w', aparece um traço, ou seja, não pode escrever (alterar) aquele diretório
  • Os outros: r-x (ler e executar), do mesmo jeito, podem ver e executar os arquivos do diretórios, só não podem alterar, apagar ou adicionar nada lá.

Notou a segurança? Só pode fazer algo se for o root.
Se te invadirem e tentarem apagar (w), não vão conseguir, pois não são root.

Se outro usuário sentar na sua cadeira e tentar apagar seu diretório /bin ?
Não vai conseguir, ele não é o root (suponho que você não saia divulgando sua senha por aí).

Ao contrário do Windows, por exemplo, onde qualquer um pode apagar, alterar, adicionar e fazer o que quiser, em sistemas Unix você é o chefão. Você manda, concede e tira permissões.
Você tem total controle do sistema. Se algo acontecer de errado, foi falha sua.

Pra não ser injusto, as vezes, por questão de segurança, o Windows pergunta se você tem certeza de que quer fazer aquilo.
Ou mais seguro ainda: você tem que clicar com o botão direito e fazer as coisas como administrador.
Super seguro, não?

- Alterando as permissões de leitura (r), escrita (w) e execução (x): o comando chmod

O modo octal

Como já disse, todos os tipos de usuários - dono, do grupo, outros - possuem as características de leitura, escrita e de execução.
Essas características podem ser de permissão ou não. Caso seja permitido a característica, aparecerá a letra (r, w ou x). Caso não, aparece o hífen.

Por exemplo, se o comando 'ls -l' para o diretório /media exibir:
drwxr-xr--

O dono, owner pode: r, w, x
O grupo dele pode: r e x, não pode 'w' pois apareceu '-' no lugar do 'w'
Os outros só podem: r, pois apareceu '-' no lugar do 'w' e do 'x'

Vamos adotar a seguinte nomenclatura, binária. Se puder ler, escrever ou executar, colocaremos o número 1, se não puder, colocaremos o número 0.

Então, para o mesmo exemplo:
O dono: 111
O grupo: 101
Os outros: 100

Simples, não?
Agora vamos passar esses números de binário para decimal
111 = 1.2² + 1.2¹ + 1.2⁰ = 4 + 2 + 1 = 7
101 = 1.2² + 0.2¹ + 1.2⁰ = 4 + 0 + 1 = 5
100 = 1.2² + 0.2¹ + 0.2⁰ = 4 + 0 + 0 = 4

O número menor binário é 000 e vale 0, e o maior (de 3 dígitos) é 111 e vale 7. Ou seja, toda a gama de permissões dos usuários vai de 0 até 7, há 8 opções. Então, esse é o método octal.

drwxr-xr-- pode ser representado por 754
Ou seja, o primeiro número, 7, se refere ao dono.
O segundo, 5, se refere a grupo.
O terceiro, 4, se refere aos demais usuários.
Mais simples, não?

Se estiver com preguiça ou não souber trabalhar com binários, está aqui a tabela que peguei da Wiki:
http://pt.wikipedia.org/wiki/Chmod

Para arquivos (-)
rwx 
000  0  (zero) permissão negada
001  1   permissão de execução
010  2   permissão de gravação
011  3   permissão de gravação e execução
100  4   permissão de leitura
101  5   permissão de leitura e execução
110  6   permissão de leitura e gravação
111  7   soma de todas as permissões
Para diretórios (d)
rwx
000  0  (zero) permissão negada
001  1   permissão para entrar no diretório
010  2   permissão para gravar dentro do diretório
011  3   permissão de entrar e gravar no diretório
100  4   permissão para listar o conteúdo do diretório
101  5   permissão de listar e entrar no diretório
110  6   permissão de listar e gravar no diretório
111  7   soma de todas as permissões

Concedendo e alterando permissões em arquivos e diretórios

Se usa o comando chmod (cd de change e mod modes).

Vamos tornar uma pasta liberada, para tudo e para todos. Vamos chamar esse diretório de '/Windows'
chmod 777 /Windows

Porém, se existirem vários arquivos e sub diretórios, você não vai ficar concedendo permissões a todos.
Use a flag '-R' para fazer isso recursivamente:
chmod -R 777 /Windows

Para matar alguém (que não é root) de curiosidade, faça:
chmod -R 000 /meu/diario/de/segredos

Pronto. Agora você pode conceder qualquer tipo de permissão para qualquer tipo de usuário.
Só saber que o primeiro número se refere ao dono, o segundo ao grupo que tem acesso a este arquivo/diretório e terceiro aos demais usuários.
Para saber que tipo de permissão cada um vai ter, faça as contas binárias ou olhe a tabela.

- Mudando o dono (owner): o comando chown

Quando se instala um programa, por exemplo, o usuário logado será o dono e terá o controle sobre aquele(s) diretório(s) e arquivo(s) ou não é, mas queremos que seja.

Usa-se o comando chown para mudar isso.
(ch de change e own de owner)

Supondo que você queira passar para o usuário 'programacao' do grupo 'progressiva', o controle do diretório ou arquivo qualquer, use o comando (você deve ser o root ou administrador para fazer isso):
chown programacao.progressiva /pasta/qualquer

Caso seja um arquivo e/ou queira mudar só usuário e não o grupo:
chown programacao /pasta/do/arquivo/qualquer.txt

Se for um diretório inteiro, você não vai usar esse comando em cada arquivo ou sub-diretório.
Para isso, use a flag '-R', que faz o trabalho (recursivamente) para você:
chown -R programacao.progressiva /pasta/ou/arquivo/qualquer


- Mudando o grupo: o comando chgrp

Já mostramos como alterar as permissões e o dono, mas não o grupo.
Para isso, usamos o comando chgrp (ch de change e grp de group).

Para alterar o grupo antigo do arquivo 'arquivo' para o grupo 'novo_grupo', faça:
chgrp novo_grupo arquivo



-----------------------
PS.1:
Caso tenha problemas, verifique se você é o root ou tem poderes deste (sudo)

PS.2:
Além do modo Octal, existe o modo com letras para mudar permissões.
Mas não mostrarei esse pois usarei o octal em outros artigos, e também porque não gosto do método com letras :)

PS.3:
Case se interesse no modo de letras ou queira informações mais detalhadas sobre permissões, além do link da Wiki que passei, tem o Guia Foca GNU/Linux:
http://www.guiafoca.org/cgs/guia/intermediario/ch-perm.html

3 comentários:

Caamila disse...

Me salvou! Vlq

Caamila disse...

Me salvou!! Vlw demais

Unknown disse...

Aff, excelente!!! Sou cientista da computação e ainda não sabia isso...🤦🏻‍♂️

Veja também: