Como funcionam as permissões de arquivos do Linux?
Se você estiver usando o Linux por algum tempo (e até mesmo o OS X), provavelmente terá encontrado um erro de “permissões”. Mas o que exatamente eles são, e por que eles são necessários ou úteis? Vamos dar uma olhada por dentro.
Permissões do usuário
Naquela época, os computadores eram máquinas enormes que eram incrivelmente caras. Para tirar o máximo proveito deles, vários terminais de computador foram conectados, o que permitiu que muitos usuários realizassem seus negócios simultaneamente. O processamento e o armazenamento de dados eram feitos na máquina, enquanto os próprios terminais eram pouco mais que um meio de visualizar e inserir dados. Se você pensar sobre isso, é basicamente como nós acessamos dados na “nuvem”; Veja o sistema Cloud MP3 da Amazon, o Gmail e o Dropbox, e você perceberá que, embora as alterações possam ser feitas localmente, tudo é armazenado remotamente.
(Imagem: Zenith Z-19 terminal "burro"; crédito: ajmexico)
Para que isso funcione, os usuários individuais precisam ter contas. Eles precisam ter uma seção da área de armazenamento alocada a eles e precisam ter permissão para executar comandos e programas. Todos recebem "permissões de usuário" específicas, que ditam o que podem e o que não podem fazer, onde, no sistema, eles têm acesso e não têm acesso e cujos arquivos podem e não podem modificar. Cada usuário também é colocado em vários grupos, que concedem ou restringem acesso adicional.
Acesso a arquivos
Neste mundo maluco para vários usuários, já estabelecemos limites quanto ao que os usuários podem fazer. Mas e o que eles acessam? Bem, todo arquivo tem um conjunto de permissões e um dono. A designação do proprietário, geralmente vinculada quando o arquivo é criado, declara a qual usuário pertence, e somente esse usuário pode alterar suas permissões de acesso.
No mundo do Linux, as permissões são divididas em três categorias: ler, escrever e executar. O acesso "Read" permite visualizar o conteúdo de um arquivo, o acesso "write" permite modificar o conteúdo de um arquivo e "executar" permite executar um conjunto de instruções, como um script ou um programa. Cada uma dessas categorias é aplicada a diferentes classes: usuário, grupo e mundo. "Usuário" significa o proprietário, "grupo" significa qualquer usuário que esteja no mesmo grupo que o proprietário e "mundo" significa qualquer pessoa e todos.
As pastas também podem ser restritas com essas permissões. Você pode, por exemplo, permitir que outras pessoas do seu grupo visualizem diretórios e arquivos em sua pasta pessoal, mas não qualquer pessoa fora do seu grupo. Você provavelmente desejará limitar o acesso de "gravação" somente a você mesmo, a menos que esteja trabalhando em algum tipo de projeto compartilhado. Você também pode criar um diretório compartilhado que permita a qualquer pessoa visualizar e modificar arquivos nessa pasta.
Alterando Permissões no Ubuntu
GUI
Para alterar as permissões de um arquivo que você possui no Ubuntu, clique com o botão direito do mouse no arquivo e vá para "Propriedades".
Você pode alterar se o proprietário, o grupo ou outros podem ler e escrever, somente leitura ou não fazer nada. Você também pode marcar uma caixa para permitir a execução do arquivo, e isso irá habilitá-lo para o proprietário, grupo e outros simultaneamente.
Linha de comando
Você também pode fazer isso através da linha de comando. Vá para um diretório que tenha arquivos e digite o seguinte comando para visualizar todos os arquivos em uma lista:
ls -al
Ao lado de cada arquivo e diretório, você verá uma seção especial que descreve as permissões que ele possui. Se parece com isso:
-rwxrw-r-
o r significa "ler", o W significa "escrever" e x significa "executar". Os diretórios serão iniciados com um "d" em vez de um "-". Você também notará que existem 10 espaços que mantêm o valor. Você pode ignorar o primeiro e, em seguida, há 3 conjuntos de 3. O primeiro conjunto é para o proprietário, o segundo conjunto é para o grupo e o último conjunto é para o mundo.
Para alterar as permissões de um arquivo ou diretório, vamos ver a forma básica do comando chmod.
chmod [class] [operator] [permissão] arquivo
chmod [ugoa] [+ ou -] [rwx] arquivo
Isso pode parecer complicado no começo, mas acredite, é bem fácil. Primeiro, vamos ver as classes:
- u: Isso é para o dono.
- g: Isso é para o grupo.
- o: Isso é para todos os outros.
- a: Isso alterará as permissões de todos os itens acima.
Em seguida, os operadores:
- +: O sinal de adição adicionará as permissões que seguem.
- -: O sinal de menos removerá as permissões que seguem.
Ainda comigo? E a última seção é a mesma de quando verificamos as permissões de um arquivo:
- r: permite acesso de leitura.
- w: permite acesso de gravação.
- x: permite a execução.
Agora vamos juntos. Digamos que temos um arquivo chamado “todo.txt” que possui as seguintes permissões:
-rw-rw-r-
Ou seja, o proprietário e o grupo podem ler e escrever, e o mundo só pode ler. Queremos alterar as permissões para estas:
-rwxr-
Ou seja, o proprietário tem permissões totais e o grupo pode ler. Podemos fazer isso em 3 etapas. Primeiro, adicionaremos a permissão de execução para o usuário.
chmod u + x todo.txt
Em seguida, removeremos a permissão de gravação do grupo.
chmod g-w todo.txt
Por fim, removeremos as permissões de leitura de todos os outros usuários.
chmod o-r todo.txt
Nós também podemos combiná-los em um único comando, assim:
chmod u + x, g-w, o-r todo.txt
Você pode ver que cada seção é separada por vírgulas e não há espaços.
Aqui estão algumas permissões úteis:
- -rwxr-xr-x: o proprietário tem permissões totais, grupo e outros usuários podem ler o conteúdo do arquivo e executar.
- -rwxr-r-: O proprietário tem permissões totais, grupo e outros usuários só podem ler o arquivo (útil se você não se incomodar com os outros que visualizam seus arquivos.
- -rwx-: o proprietário tem permissões completas, todas as outras não têm nenhuma (útil para scripts pessoais).
- -rw-rw--: Proprietário e grupo podem ler e escrever (útil para colaboração com membros do grupo).
- -rw-r-r-: Proprietário pode ler e escrever, grupo e outros usuários só podem ler o arquivo (útil para armazenar arquivos pessoais em uma rede compartilhada).
- -rw--: O proprietário pode ler e escrever, todos os outros não possuem nenhum (útil para armazenar arquivos pessoais).
Existem algumas outras coisas que você pode fazer com chmod - como setuid e setgid - mas elas são um pouco detalhadas e a maioria dos usuários não precisará usá-las de qualquer maneira..
A raiz ou o superusuário e os arquivos do sistema
Hoje em dia, nem sempre executamos sistemas com vários usuários. Por que devemos nos preocupar com permissões??
Bem, o Unix e seus derivados - Linux, OS X, entre outros - também distinguem entre coisas executadas pelo usuário, coisas executadas por um administrador ou com privilégios de administrador, e coisas executadas pelo próprio sistema. Como tal, as coisas que são essenciais para o sistema precisam de privilégios de administrador para serem alterados ou acessados. Dessa forma, você não estraga nada acidentalmente.
No Ubuntu, para fazer alterações nos arquivos do sistema, você usa “sudo” ou “gksudo” para obter o equivalente de privilégios de administrador. Em outras distros, você muda para "root" ou o "superusuário", que efetivamente faz a mesma coisa até você sair.
Lembre-se de que, em ambas as circunstâncias, a alteração das permissões de arquivo pode levar a que os programas não funcionem, alterando involuntariamente a propriedade do arquivo para o usuário raiz (em vez do proprietário) e tornando o sistema menos seguro (concedendo mais permissões). Como tal, é recomendado que você não altere permissões para arquivos - especialmente arquivos de sistema - a menos que seja necessário ou você saiba o que está fazendo.
Permissões de arquivo estão em vigor para fornecer um sistema básico de segurança entre os usuários. Aprender como eles funcionam pode ajudá-lo a configurar o compartilhamento básico em um ambiente multiusuário, proteger arquivos "públicos" e dar a você uma pista de quando algo está errado com a propriedade de arquivos do sistema..
Acha que pode explicar as coisas mais facilmente? Tem uma correção? Quer relembrar os velhos tempos? Faça uma pausa e coloque seus pensamentos nos comentários.