Permissões de arquivos e diretórios

Iniciado por jomafras, 31 de Dezembro de 2007, 18:47

tópico anterior - próximo tópico

jomafras

Há muito tempo eu queria fazer um tópico sobre o fstab.
Aproveitei esses últimos dias do ano em que fui obrigado a permanecer em casa e fiz.
Como para entender bem algumas opções (quarta coluna) do fstab tive que pesquisar muito sobre  permissões, acabei acumulando um material bem grande e, quando vi, já tinha transformado tudo em outro tópico.
Espero que seja útil também para a pesquisa do Fórum.


                                         Utilidade da permissão de acesso a arquivos e diretórios


O sistema Linux trabalha com um modo de permissão que protege o sistema de arquivos (File System) de:
1-Acesso indevido de pessoas ou programas não autorizados.
2-Um programa mal intencionado, por exemplo, apagar um arquivo que não deve, enviar arquivos para outra pessoa ou fornecer acesso da rede para que outros usuários invadam o sistema.
3-Usuários iniciantes (ou mal intencionados) instalarem programas enviados por terceiros sem saber para que eles realmente servem e que causem danos irreversíveis em seus arquivos, seu micro ou sua empresa.

Basicamente são essas as utilidades.


                                                        Dono, Grupo, Outros


O sistema Linux define o acesso aos arquivos por donos, grupos e outros usuários:
        Dono   = O proprietário do arquivo ou criador do arquivo.
        Grupo  = Usuários que fazem parte do grupo do proprietário.
        Outros = Não são os proprietários e nem fazem parte do grupo.


                                                     Tipos de permissões.


No Linux existem três tipos de permissão para interagir os acessos a um arquivo/diretório com o usuário:

        r : Permissão de leitura para um arquivo e, permitir listar o conteúdo de um diretório através do comando ls   
          <diretório>.
       w : Permissão de gravação e exclusão para um arquivo/diretório.
       x : Permissão para executar um arquivo, se for um arquivo binário ou um script e, se for um diretório permitir acesso a ele através do comando cd <diretório>.
As permissões Leitura, Escrita e Execução definem o acesso a um arquivo pelo dono, grupo e outros usuários do sistema:

     As 3 letras (rwx) são agrupadas da seguinte forma (total de dez letras ou caracteres) :

     
Exemplo A :
-rwxrwxrwx   aluno  básico  May 08 22:07  teste

Exemplo B :
drwxr--r-- aluno  básico  May 08 22:20  teste

1- O primeiro caractere diz qual é o tipo do objeto .

    Principais tipos :
         - : para arquivo comum
         d : para diretório
    Outros :
     l : para link simbólico 
     b : para dispositivos de bloco (oferecem grandes quantidades de dados de cada vez)
     c : para dispositivo de caracteres (oferecem dados de um caractere de cada vez)   
2- Da segunda à quarta letra diz qual é a permissão de acesso ao dono do arquivo.
3- Da quinta à sétima letra  diz qual é a permissão de acesso ao grupo do arquivo.
4- Da oitava à décima letra  diz qual é a permissão de acesso para os outros usuários.

No exemplo A acima trata-se de um arquivo, ("-" como primeiro caractere).
Da segunda à quarta letra (rwx) é a permissão de acesso ao dono.
Da quinta à sétima letra (rwx) é a permissão do grupo.
Da oitava à décima letra (rwx) é a permissão dos outros usuários.
Nesse exemplo, todos (dono, grupo, outros usuários) tem permissão total (rwx=leitura, gravação, execução) sobre o arquivo. 

No exemplo B trata-se de um diretório, ("d" como primeiro caractere).
Do mesmo modo que em A, da segunda à quarta letra (rwx) corresponde à permisão do dono, da quinta à sétima letra (r--) à permissão do grupo e, da oitava à décima letra (r--) à permissão de acesso para outros usuários.
Como se pode ver o dono tem permissão de leitura, gravação e execução e, o grupo e outros usuários só de leitura.


Outras permissões dos arquivos e subdiretórios desse nosso diretório simbólico (comando ls -l):
                  
Permissões    dono    grupo  tamanho  Atualização   Nome                 Conclusão 

drwxrwxr-x   aluno   básico   1024   May 10 22:07   teste1     diretório,leitura, escrita e, execução para 
                                                                                   dono e grupo e, leitura e execução para  outros usuários.     
drwx------   aluno   básico   1024   May 10 21:50   teste2     diretório,leitura, escrita e execução para o
                                                                                   dono e, nenhuma permissão para o grupo e
                                                                                   outros usuários.
-rw-rw----   aluno   básico   4585   May 10 22:07   teste3     arquivo, leitura e escrita para dono e grupo
                                                                                   e, nenhuma permissão para outros usuários.
-rw-rw-r--   aluno   básico   5258   Apr 23 12:26   teste4      arquivo, leitura e escrita para dono e grupo
                                                                                   e, escrita para outros usuários.
-rwxrwsr--   aluno   básico   4785   Nov 15 10:50   teste7     arquivo, leitura, escrita e, execução para
                                                                                   dono e grupo, escrita para outros usuários.

O usuário root não tem nenhuma restrição de acesso ao sistema.
As permissões de acesso (leitura, gravação, execução) para donos, grupos e outros usuários são independentes.
Isso que dizer que mesmo que você seja o dono do arquivo e definir o acesso do dono (através do comando chmod) como somente leitura (r) mas o acesso dos outros usuários como leitura e gravação (rw), você somente poderá ler este arquivo mas os outros usuários poderão ler e gravar.




                                                              Permissões especiais.


1-SUID - com esta permissão, o usuário executa o arquivo ou acessa o diretório como se fosse o dono.
2-SGID - com esta permissão, o usuário executa o arquivo ou acessa o diretório como se fosse membro do grupo ao qual pertence o arquivo/diretório.
3-sticky bit - o usuário pode criar/alterar/deletar (apenas) os seus próprios arquivos no diretório que possui esta permissão, mesmo que não seja o dono do diretório e nem membro do grupo ao qual o diretório pertence. Quando o sticky bit é usado em um arquivo, significa que este arquivo é compartilhado por vários usuários.
Maiores detalhes sobre essas permissões podem ser encontradas nos links de consulta disponibilizados aqui no tópico.



                                        Definir (mudar) permissões de acesso a um arquivo ou diretório.


                                                                1- chmod (modo literal)

Dar e negar acesso a um arquivo ao Dono, Grupo, e a Outros usuários do sistema pelo modo literal é a maneira mais fácil de se entender, usa-se as letras :
                      u : (User) Proprietário do arquivo;
                      g : (group) Usuários que fazem parte do grupo do proprietário.
                      o : (Others) Outros usuários (não é o dono e nem faz parte do grupo).
                      a : (All) Todos. 
                      e, os símbolos :
                      + : Adicionar permissão.
                      - : Remover permissão.
                      = : Igualar permissão.

Exemplos :

chmod a+rwx arquivo.sh = Dá controle total (+rwx) sobre o arquivo para o Dono, Grupo, e os outros
                                     usuários do sistema (a).

chmod g-rw arquivo.sh = Remove o acesso (-) à leitura e escrita (rw) aos usuários do grupo (g).

chmod o-r teste.txt = Retira (-) a permissão de leitura (r) do arquivo teste.txt para os outros
                             usuários (o), que não são donos e não pertencem ao grupo do arquivo teste.txt.

chmod uo+x teste.txt = Inclui (+) a permissão de execução (x) do arquivo teste.txt para o dono e
                                outros usuários do arquivo(uo).

chmod a+x teste.txt = Inclui (+) a permissão de execução (x) do arquivo teste.txt para o dono,
                                 grupo e outros usuários (a).

chmod a=rw teste.txt = Define a permissão de todos os usuários exatamente (=) para leitura e
                                  gravação (rw) do arquivo teste.txt.

Aplicando SUID no modo literal :  chmod u+s programa.sh
                                             -rwsr-xr-x


                                                            2- chmod (modo octal)

Pela tabela :
                             
Valor Octal          Significado

        0      nenhuma permissão de acesso
        1       permissão de execução (x)
        2       permissão de gravação (w)
        3      permissão de gravação e execução(wx)
        4      permissão de leitura (r)
        5       permissão de leitura e execução (rx)
        6      permissão de leitura e gravação (rw)
        7      permissão de leitura, gravação e execução (rwx)

Nenhuma permissão, use 0.
Somente permissão de execução, use 1.
Somente permissão de gravação, use 2.
Permissão de execução/gravação, use 3 (equivale a 1+2 / Executar+Gravar).
Somente a permissão de leitura, use 4.
Permissão de leitura/execução, use 5 (equivale a 1+4 / Executar+Ler).
Permissão de leitura/gravação, use 6 (equivale a 2+4 / Gravar+Ler).
Permissão de leitura/gravação/execução, use 7 (equivale a 1+2+4) / Executar+Gravar+Ler).


Exemplos :
chmod 777 arquivo.sh
Dá controle total sobre o arquivo para o Dono (1+2+4=7), Grupo (1+2+4=7), e outros usuários do sistema (1+2+4=7).

chmod 766 arquivo.sh
Dá acesso total ao dono do arquivo (1+2+4=7), e o acesso leitura e escrita para o grupo (2+4=6) e outros usuários do sistema (2+4=6).

chmod 640 arquivo.sh
Dá acesso de leitura e escrita para o dono do arquivo (2+4=6), para os usuários do grupo o acesso somente a leitura do arquivo (4) e para os outros usuários do sistema nega qualquer tipo de acesso ao arquivo (0).

chmod 764 teste
Nesse exemplo o dono tem permissão de acesso total (1+2+4=7), o grupo leitura e gravação (2+4=6) e, os outro usuários, só leitura (4).

chmod 751 teste
Permissão total para o dono (1+2+4=7), leitura e execução para o grupo (1+4=5) e, somente execução para os outros usuários.

Atenção:
chmod 40 teste
O exemplo acima define a permissão de acesso dos outros usuários (0) como nenhuma, e define a permissão de acesso do grupo (4) como somente leitura (r).

chmod 64 teste.txt
Define permissão de leitura (4) para os outros usuários do sistema e permissão de leitura e gravação (2+4=6) para os usuários do mesmo grupo do arquivo teste.txt.

Os dois últimos exemplos com apenas dois números são para explicar que deve-se ler da direita para esquerda e que a permissão de acesso do dono do arquivo não foi modificada.

Finalizando : para aplicar a permissão SUID : (só no campo Dono) :
              a) modo literal :  chmod u+s programa.sh (s minúsculo)
                                     -rwsr-xr-x (s depois)
              b) modo octal :   chmod 4750 programa.sh (número 4)
                                     -rwsr-x---
Para mais detalhes consultar os links disponibilados no tópico.


O comando chmod tem também as opções :

-v, --verbose = Mostra os arquivos enquanto são alterados.
-f, --supress = Não mostra mensagens de erro durante a execução do programa.
-c, --changes = Mostra somente arquivos que forem alterados.
-R, --recursive = Altera dono e grupo de arquivos no diretório atual e sub-diretórios.


                                                                  3- umask

A umask (user mask) são 3 números que definem as permissões iniciais do dono, grupo e outros usuários que o arquivo/diretório receberá quando for criado ou copiado.
Quando criamos um arquivo ou diretório, os mesmos já vem com uma permissão padrão, para evitar que outros usuários e membros de outros grupos possam modificar os arquivos criados por você.
Para saber qual máscara de arquivo que seu sistema esta usando, bastar digitar o comando umask sem parâmetros.
O valor padrão da umask na maioria das distribuições atuais é 022.
Digitando umask o terminal me retornou o resultado 0022.

                                       Sigificado do número

                        0 : Indica apenas que é o valor de uma umask.
                        0 : Dá acesso total ao arquivo criado pelo usuário.
                        2 : Dá acesso de Leitura e execução do arquivo, no caso de um diretório permite que este seja
                            acessado através do comando \"cd <diretório>\", ao grupo.
                        2 : Os mesmos direitos acima, só que para os outros usuários do sistema.

Por padrão,

     as permissões iniciais de um arquivo são 666 (leitura e gravação para todo e qualquer usuário do sistema);
     as permissões iniciais de um diretório são 777 (leitura, gravação e acesso para todo e qualquer usuário do sistema).

Quando um usuário cria um arquivo (ou diretório), o sistema associa a este arquivo (diretório) as permissões padrão menos o valor do umask.
Para alterar o valor de umask, basta incluir o novo valor após o comando umask. Por exemplo, o comando
    umask 002
define que, por padrão, novos arquivos terão permissão 664 (666-002), enquanto novos diretórios terão permissão 775 (777-002).

    umask 000
arquivos por padrão terão permissão 666 (666-000) e, diretórios permissão 777 (777-000).



                                          Mudando o dono  e o grupo de um arquivo/diretório

Usa-se o comando chown

chown aluno teste.txt - Muda o dono do arquivo teste.txt para aluno.


chown aluno.users teste.txt - Muda o dono do arquivo teste.txt para aluno e seu grupo para users.

opções
-v, --verbose = Mostra os arquivos enquanto são alterados.
-f, --supress = Não mostra mensagens de erro durante a execução do programa.
-c, --changes = Mostra somente arquivos que forem alterados.
-R, --recursive = Altera dono e grupo de arquivos no diretório atual e sub-diretórios.

Suponha, por exemplo, a existência de um diretório de nome aluno. Queremos que este diretório e todo o seu conteúdo passe a pertencer ao usuário josé e ao grupo informática. Podemos, então, digitar o comando :

    chown -Rc josé.informatica aluno

para alterar o dono e o grupo do diretório teste e de todos os arquivos e diretórios que estão hierarquicamente abaixo do diretório teste. Como o argumento -c é usado, será mostrada a lista dos arquivos e diretórios que foram alterados.
É importante observar que este comando pode ser usado para alterar apenas o dono do arquivo, ou seja, você não é obrigado a especificar o nome do grupo no comando.

Para mudar só o grupo de um arquivo/diretório o comando é chgrp com as mesmas opções do chown.



Links consultados :
http://focalinux.cipsga.org.br/guia/iniciante/ch-perm.html
http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=1541&pagina=4
http://renator.wordpress.com/2007/03/20/entendendo-as-permissoes/
http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=1812
http://www.uniriotec.br/~morganna/guia/umask.html
http://www.uniriotec.br/~morganna/guia/permissao.html
http://www.uniriotec.br/~morganna/guia/chmod.html






O Ubuntu sem dúvida é a melhor Distro.
Pesquise primeiro... só depois abra um tópico.
Canal do YouTube - Blog

fabiovalinhos

Parabéns Pintinho, ficou show.

No meu caso, eu sempre usei o sistema octal, acho bem mais fácil. Só que tem um problema, eu esqueço direto que a sequencia é ler, escrever e executar. Sempre imaginava de maneira diferente x,r,w, etc.

Mas nada que um ls -l não faz a gente relembrar.


Valeu.
73
sudo dpkg no seu quadrado ...sudo dpkg no seu quadrado ...
http://www.youtube.com/watch?v=tHmrq0FtczM

jomafras

#2
Valeu Fábio,
Obrigado pelo elogio.
Acho que o modo octal é mesmo o mais usado.
O Ubuntu sem dúvida é a melhor Distro.
Pesquise primeiro... só depois abra um tópico.
Canal do YouTube - Blog

Lucianoredes

Parabéns pela dedicação!!!!!!!
Abraço!

rjbgbo

#4
Super tópico, amigo Pintinho, pena que pouco lembrado, mas de suma importância.
Vc sempre c/ suas grds contribuições.
Parabéns e indo p/ os favoritos
Linux User #440843 | Ubuntu User #11469

jomafras

É isso...alguns tópicos mais antigos vão ficando mais pro fim da lista mesmo mas, sempre tem alguém que encontra, consulta e usa e, é isso que vale.
Abraços...
O Ubuntu sem dúvida é a melhor Distro.
Pesquise primeiro... só depois abra um tópico.
Canal do YouTube - Blog

felipegds

cara!!
nao posso deixar de te agradeçer!
ótimo tópico!!
está sendo muito importante para eu entender melhor as permissoes...
vlw cara!

jomafras

Como eu disse acima, é isso que importa...que o usuário faça bom uso.
Obrigado, felipegds.
O Ubuntu sem dúvida é a melhor Distro.
Pesquise primeiro... só depois abra um tópico.
Canal do YouTube - Blog

Tarcísio_Teles

pintinho,
na moral, mesmo após ter pesquisado antes, visto no Guia Foca Linux, em outros sites/blogs, esse seu tópico muitíssimo bem exemplificado é simplesmente sensacional para nós, iniciantes no Linux, é de muita ajuda sempre. Valeu mesmo, um abraço

Renato Krause

Opa!

Parabéns pelo seu trabalho e dedicação. Esse é o espírito!!!!

;D :D ;) :D ;D ;D :D ;) :D ;D ;D :D ;) :D ;D ;D :D ;) :D ;D

Grande abraço,

jomafras

Obrigado Tarcísio_Teles e Renato Krause.
Pensei que esse tópico estivesse  perdido no tempo.
Ainda bem que continua sendo útil.
O Ubuntu sem dúvida é a melhor Distro.
Pesquise primeiro... só depois abra um tópico.
Canal do YouTube - Blog