As permissões desempenham um papel fundamental nos PCs Linux, e também em servidores VPS. O comando chmod permite configurar quem pode visualizar, modificar ou executar arquivos. Além disso, também acessar diretórios ou listar seu conteúdo.
Até mesmo para acessar um site hospedado na internet, precisamos que o servidor nos conceda permissões em suas regras para isso. Este artigo é um guia completo para aplicar permissões no Linux usando o comando chmod.
Ao criarmos diretórios e arquivos no Linux, determinadas permissões são vinculadas automaticamente pelo sistema operacional. Nem sempre essas permissões definidas por padrão pelo Linux são permissões que um site, sistema ou aplicação precisa.
Então, para liberarmos ou restringirmos acesso e deixarmos o ambiente web mais seguro, nós devemos mudar o nível de permissão dos diretórios e arquivos.
Porém, antes de sairmos alterando algo, devemos compreender quais são as permissões e como elas são representadas.
Conteúdo
Desvendando as permissões no Linux
Existem dois modos de nós gerenciarmos as permissões. Em um deles, chamado de modo simbólico ou UGO (User, Group, Others), utilizamos os símbolos (+) ou (-) para adicionarmos ou removermos permissão e as letras (U),(G) e (O) e no outro modo utilizamos alguns números, no que é conhecido como modo octal.
Nas distribuições Linux, as permissões são distribuídas nestes três grupos: O criador do arquivo é classificado como o usuário dono do arquivo, o grupo dono do arquivo, que pode ter um ou mais usuários e por último, a propriedade outros usuários, que concede permissão aos usuários que não se enquadram nas duas primeiras classificações.
E em cada um destes grupos podemos ter permissão de escrita (identificada pela letra w, write), execução (x, execute) e leitura (representada pela letra r, read).
O que cada tipo de permissão chmod concede
Leitura (r): Concede ao usuário apenas visualizar o conteúdo que estiver em um diretório.
Escrita (w): Permite ao usuário alterar o conteúdo presente em diretórios e arquivos.
Execução (x): É o que nos permite acessar diretórios e executar comandos via terminal. O comando chmod +x permite executar arquivos no Linux. Além disso, é também o tipo de permissão que permite aos navegadores carregarem o conteúdo gráfico (design e layout) de um site hospedado no servidor.
Certo, agora que conhecemos as permissões e o que cada uma faz, precisamos um modo de descobrir quais estão em uso em um arquivo.
Descobrindo quais permissões estão em uso
Para descobrirmos as permissões de um conteúdo, antes de tudo precisamos ir ao local em que o conteúdo está.
Então, com a ajuda do comando cd nós iremos navegar até o caminho em que está o arquivo.
$ cd /var/www/html/
Saída:
Agora, nós vamos exibir o conteúdo que está no diretório e para isso, usaremos o comando ls (list):
Saída:
Porém, as permissões por enquanto não aparecem. A listagem em que o ls retornou foi apenas uma lista comum. Para que os arquivos sejam listados com suas respectivas permissões, é preciso indicar ao ls que a listagem precisa ser de forma longa, para isso, acrescenta-se o parâmetro (-l) ao comando.
$ ls -l
Saída:
Dessa forma, conseguimos obter informações adicionais. Mas, como o foco aqui é sobre permissões, iremos nos atentar somente à primeira coluna.
Divisão das permissões com chmod no Linux
Distribuída em dez carácteres, a primeira coluna sempre começa com um (-) indicando que o objeto é um arquivo ou diretório (d) e até mesmo link simbólico (l).
Os demais carácteres são divididos respectivamente entre as permissões do usuário proprietário, grupo proprietário e por fim, outros usuários.
Quando não há um nível de permissão definido, o caractere representativo é o (-). Do contrário, é exibida a letra que corresponde à permissão.
Diante disso, já é possível dizermos quais são as permissões do exemplo acima. Começando pelo usuário proprietário, ele possui permissão total setadas (rwx), já o grupo proprietário possui poder de leitura e escrita (r-w), por fim, outros usuários estão com poder de leitura (r).
Como alterar as permissões no Linux usando chmod
Para que qualquer usuário possa visualizar todos os elementos do site é preciso que as permissões de diretórios e arquivos sejam organizadas.
Para tanto, utilizamos a ferramenta chamada chmod no Linux, pois, desejamos que propriedade outros usuários passem a ter permissão de leitura (r) na raíz do site.
Sendo assim, no terminal do Linux executamos o seguinte comando:
$ sudo chmod o=r site/
Saída:
Agora, listando o conteúdo através do comando ls -l veremos que ocorreram mudanças na organização das permissões.
Saída:
Enfim, permissão aplicada! Mas, haverá ainda uma surpresa se a página for aberta via navegador, com certeza irá nos retornar o aviso de Forbidden.
Como nós vinculamos a permissão para leitura ao grupo outros usuários, somente ela não é suficiente para que a página carregue por completo.
É preciso que também haja permissão de execução (x).
Se anteriormente nós já alteramos a permissão para leitura na propriedade outros, agora, basta permitir a execução com a seguinte sintaxe:
$ sudo chmod o+x site/
Saída:
Se formos acessar o site mais uma vez pelo navegador com certeza haverá o carregamento da página.
A página carregou, porém, ainda está faltando algo em seu design. As imagens não carregaram, vamos analisar o porquê.
Nós precisaremos verificar se o conteúdo possui permissão suficiente para que sejam carregados no navegador.
Então, vamos listar de forma detalhada o conteúdo que está dentro do diretório /site. Para isso, iremos utilizar o já conhecido ls -l:
$ ls -l site/
Saída:
Como podemos observar, o conteúdo tem apenas conceção de leitura na propriedade outros usuários. Como vimos antes, essa permissão é insuficiente para carregar tudo o que precisamos no navegador.
Para solucionarmos o cenário, vamos mudar a permissão do conteúdo, acrescentando o poder de executar para eles.
Recursividade no chmod
Como agora temos subdiretórios e outros arquivos dentro do diretório /site, o jeito mais rápido e fácil para ajustar a permissão é utilizar o comando chmod juntamente com um parâmetro auxiliar.
Neste caso, o parâmetro mais adequado é o -R (Recursive). Este parâmetro faz uma “checagem” geral do que está em /site e aplica a permissão desejada em subdiretórios e arquivos contidos dentro do diretório em questão.
$ sudo chmod -R o=rx site/
Saída:
Então, com o auxílio do ls, vamos validar se a alteração de fato aconteceu:
Saída:
Agora, vamos confirmar se o site está carregando com todo seu conteúdo, via navegador:
finalmente! O site está acessível com todo seu conteúdo.
Até aqui alteramos as permissões do conteúdo somente na propriedade outros usuários (o).
Mas, o que eu faço se eu precisar alterar as permissões para o proprietário e o grupo proprietário dos arquivos?
Como alterar as permissões para usuário e grupo dono com chmod
Dando início ao exercício prático, nós iremos criar um arquivo qualquer em um lugar qualquer no Linux.
$ sudo vim exemplo.txt
Saída:
Se nós executarmos o comando ls -l, veremos que este arquivo possui permissões que já foram definidas quando nós o criamos.
Agora, nós precisamos indicar ao chmod que inclua permissão de execução para o usuário dono do arquivo, aqui representado pela letra (u), além da permissão de leitura que ele já tem.
Então, nós podemos dizer ao chmod que para o usuário dono (u), seja adicionada (+) a permissão de execução (x) ao arquivo exemplo.txt
$ sudo chmod u+x exemplo.txt
Saída:
E se caso nós quisermos remover a alguma permissão específica, como faremos?
Neste exemplo, com chmod vamos remover a permissão de escrita do grupo dono, representado pela letra (g), com a seguinte sintaxe:
$ sudo chmod g-w exemplo.txt
Saída:
Acima, rodando o ls -l vemos a saída de como a permissão estava antes e a saída de como a permissão ficou após removermos a permissão de escrita do grupo dono.
E como nós podemos fazer se quisermos alterar a permissão para o usuário dono, grupo dono e outros em apenas um comando, como faremos?
Para exercitar essa resposta, vamos retirar a permissão de escrita do usuário dono do arquivo (u-w), adicionar a permissão de escrita e execução para o grupo dono (g+wx) e para os demais usuários teremos somente execução (o=x):
$ sudo chmod u-w,g+wx,o=x exemplo.txt
Saída:
Perfeito! Em apenas uma linha de comando alteramos todas as permissões que precisávamos.
Apesar de ser bem intuitivo, este modo de alteração nos faz digitar vários caracteres para mudarmos tudo que queremos.
Porém, há um jeito um pouco diferente de fazermos a mesma coisa.
Neste caso, estamos falando do modo octal, em que se faz uso de alguns números para alterarmos as permissões.
CHMOD 755, 777 e outras opções no modo octal
No chmod, o modo octal possui este nome devido a fazer uso de caracteres numéricos entre 0 e 7. O uso de octais é comum a usuários avançados. Trata-se de um modo mais avançado, normalmente usado em servidores VPS.
Neste outro artigo, explicamos em detalhes como configurar permissões em modo octal: chmod 755, 777 e outras opções no modo octal.
Outras opções disponíveis no comando chmod
Parâmetro -c (changes)
Ele é semelhante ao parâmetro -v, ou seja, o parâmetro -c serve para retornar o resultado apenas quando a mudança é feita.
Exemplo:
$ sudo chmod -c 755 exemplo.txt
Saída:
Parâmetro -v (verbose)
Exibe um diagnóstico de saída para cada arquivo processado após cada permissão aplicada.
Exemplo:
Rodar a mesma permissão para todo o conteúdo que existir em um diretório:
$ sudo chmod -v 644 *
Saída:
Parâmetro ‘-f’ (silent)
Quando utilizado, este parâmetro é responsável por eliminar grande parte das mensagens de erro que possam vir a ocorrer.
Por exemplo, quando o usuário administrador não possui privilégios para modificar permissões, ao usar o parâmetro -f o aviso de falta de poder para executar a operação não irá aparecer na tela.
Portanto, precisamos ter cautela ao conceder permissões aos usuários que não pertencem ao grupo dono, ou aos que não são donos dos arquivos e diretórios. Pois, conforme for a permissão que configurarmos, os usuários indesejados conseguirão obter acesso ao conteúdo do sistema. Conseguindo além de visualizar, também alterar até mesmo excluí-los.
Em suma, agora que você conhece um pouco mais sobre permissões e a importâncias para a segurança do ambiente, com certeza está mais preparado e confiante para deixar suas aplicações com as devidas permissões. O comando chmod é similar ao comando chown, que serve para alterar o dono de um arquivo ou pasta.