Como funcionam as permissões de arquivo?

37

Você pode explicar brevemente os principais conceitos e ferramentas de linha de comando usadas para gerenciar permissões de arquivo?

guillermooo
fonte

Respostas:

23

Cada arquivo tem direitos para três categorias diferentes:

  • o proprietário do arquivo,
  • o grupo associado ao arquivo e
  • todo mundo.

Direitos significa o direito de ler o arquivo, o direito de gravar no arquivo ou o direito de executar o arquivo no caso de um script ou programa.

Na CLI, você pode

  • mude o proprietário com chown, por exemplochown guillermooo
  • mude o grupo com chgrp, por exemplochgrp root
  • altere os direitos com chmod, por exemplo chmod u+w filename.ext(adiciona permissão de gravação para o proprietário do arquivo filename.ext)

Se você quiser saber mais sobre cada uma dessas ferramentas, abra um terminal e digite man [tool], por exemplo man chmod.

ParanoiaPuppy
fonte
8
É um pouco mais complicado com diretórios - é necessária permissão de execução para acessar o conteúdo do diretório. Isso significa (por exemplo) para ler ou gravar um arquivo, você precisa executar o acesso ao diretório que o contém, bem como as permissões apropriadas no próprio arquivo. Isso quase nunca aparece, mas é por isso que é mal documentado / entendido!
precisa saber é o seguinte
Hã. Você está certo. Vou editá-lo amanhã, quando estiver com menos sono.
ParanoiaPuppy
1
chown guillermooonão deveria ser assim chown guillermooo filename?
Zeynel
32

Aviso: Alterar permissões de arquivos e diretórios é potencialmente prejudicial e pode inutilizar o sistema. Quando executado recursivamente como root no caminho errado, podemos chegar a um ponto em que precisaremos reinstalar o Ubuntu. Portanto, é uma boa idéia não alterar as permissões fora dos diretórios HOME, e executar os comandos recursivamente, pois o root deve ser evitado sempre que possível.

Permissões de arquivo

O Ubuntu herdou o conceito de permissões do Unix quando, para arquivos ou diretórios, há três tarefas que podemos permitir ou negar:

  • O arquivo / diretório r (leitura) pode ser aberto para acesso de leitura.
  • O arquivo / diretório w (gravação) pode ser aberto para acesso de gravação / edição.
  • O arquivo x (execute) pode ser executado à medida que um programa / diretório pode ser percorrido.

( Percorrer um diretório significa essencialmente usá-lo como parte de um nome de caminho. Consulte https://unix.stackexchange.com/a/13891 ou https://unix.stackexchange.com/questions/21251 para obter mais explicações.)

Além disso, temos três casos sobre os quais concedemos uma permissão:

  • u (usuário) o proprietário de um arquivo recebe qualquer uma das permissões.
  • O grupo g (grupo) ao qual o arquivo pertence recebe uma permissão.
  • o (outros) todos os outros recebem permissão.

Agora, para obter a combinação desses itens, usamos um sistema binário em que cada bit define uma permissão. Isso pode ser melhor mostrado na tabela a seguir

    Permission | Binary | Octal  | User  | Group | Other |
    ======================================================
      r        |  100   |   4    |       |       |       |
      w        |  010   |   2    |       |       |       |
      x        |  001   |   1    |       |       |       |
    =======================================================
    Number

Agora, se quisermos, por exemplo

a) o proprietário de um arquivo (= user) tem r ead, w rito, e e x ecute permissão,
b) grupo concedida do arquivo r ead e e x permissões ecute, e
c) todos os outros só deve ter r acesso ead.

A permissão do arquivo resultante será:

 u   g   o
rwx r-x r--

Para obter isso nos números octais, por exemplo. para o chmodcomando ou quando precisamos entender uma mensagem de erro, precisamos preencher a tabela acima, como abaixo:

    Permission | Binary | Octal  | User  | Group | Other |
    ======================================================
      r        |  100   |   4    |   4   |   4   |   4   |
      w        |  010   |   2    |   2   |   0   |   0   |
      x        |  001   |   1    |   1   |   1   |   0   |
    ======================================================
    Numbers add to                   7       5       4     

Cada número de permissão precisa ser adicionado para resumir para um usuário (4 + 2 + 1 = 7), grupo (4 + 0 + 1 = 5) e outro (4 + 0 + 0 = 4). O número resultante é então:

 u   g   o
 7   5   4

Agora temos duas opções para alterar os bits de permissão com chmod:

chmod u+rwx g+rx o+r filename

ou muito mais simples com

chmod 751 filename

Ambos os comandos farão o mesmo.

A permissão padrão de um arquivo recém-criado em nossa casa será 664 (-rw-rw-r--).

Se queremos que os arquivos sejam executáveis ​​como programas, teremos que mudar essa permissão.

  • Observe que também precisaremos alterar a permissão do diretório em que este executável pode estar. Somente se os bits executável do arquivo e do diretório estiverem definidos, poderemos executar esse arquivo como um programa.

  • Ao copiar um arquivo para nossa casa, ele perde suas permissões, que serão substituídas por nossas próprias permissões padrão (a menos que copiemos usando opções avançadas, por exemplo, uma opção de arquivamento).

  • Observe também que o arquivo pode herdar sua permissão do ponto de montagem, resp. opções de montagem. Isso é importante ao montar unidades formatadas para Windows que não suportam permissões Unix.

Usuários e Grupos

Logo percebemos que isso era apenas metade da história. Também precisamos resolver os pertences. Para fazer isso, cada arquivo ou pasta possui um proprietário definido e uma associação de grupo definida.

Cada vez que criamos um arquivo, seremos o proprietário de um arquivo e o grupo do arquivo também seremos nós. Com ls -lpodemos ver permissões, propriedade e grupo como visto no seguinte exemplo de saída:

-rw-rw-r--  1 takkat takkat    4096 Sep 12 20:25 test
  • Só é permitido alterar permissões, grupos ou propriedade de um arquivo que é nosso.

Se não somos o proprietário do arquivo, obteremos um Permission deniederro. Somente o root pode alterar isso para todos os arquivos. É por isso que precisamos usar sudoao editar a permissão de arquivos que não são nossos. Existem dois comandos internos para fazer isso chownpara usuários e chgrpgrupos.

Para alterar a propriedade de um arquivo de alguém para takkatnós, podemos emitir este comando:

sudo chown takkat testfile

Para alterar o grupo de um arquivo para takkatemitir

sudo chgrp takkat testfile

Leia as páginas de manual dos comandos para obter mais detalhes e opções. Há também este guia mais elaborado e recomendado para leitura adicional:

Encontre também algumas perguntas relacionadas aqui:

Takkat
fonte