Artigos

Prompt do Linux: Definindo permissões de arquivo

Estamos iniciando uma série de artigos sobre Linux intitulada “Prompt do Linux”, onde serão abordadas questões úteis para quem quer aprender a trabalhar com o shell do sistema (aquela tela preta com umas letrinhas brancas, que muita gente odeia).

Fato é que, mesmo com as constantes melhorias aplicadas às interfaces gráficas em geral, há muitas coisas que ainda só podem ser feitas, ou são mais práticas de se fazer, no shell. Isto aplica-se especialmente a ambientes corporativos (empresas), pois não é prática comum instalar camadas gráficas (KDE, Gnome, etc.) em um servidor.

Introdução feita, vamos ao que interessa? Hoje o tema é: Definindo permissões de arquivo.

Conceito

As permissões de arquivos e diretórios no Linux são bastante simplórias se comparadas com as várias possibilidades que um Windows com sistema de arquivos NTFS oferece. Claro que já existe há algum tempo o recurso de ACLs para o Linux – e, diga-se de passagem, funciona muito bem -, mas mesmo ele não possui tantas opções. Ainda assim, muita coisa pode ser feita, e é difícil encontrar uma situação onde os recursos oferecidos não atendam à demanda.

Podemos definir a permissão para três objetos: o proprietário do arquivo, o grupo de acesso, e para outros (os demais usuários que não pertençam aos outros dois objetos). Para cada um destes objetos, três modalidades de acesso podem ser definidas: o acesso à leitura (r), à gravação (w) e à execução (x). A permissão de execução funciona assim: para diretórios, define se o usuário pode acessá-lo; para arquivos, torna o mesmo executável, isto é, como se fosse um EXE ou BAT no Windows. Isto é comum porque, no Linux, quando escrevemos um script, precisamos dar permissão de execução nele para que possamos rodá-lo.

Para ficar mais fácil entender, vamos usar o comando ls -la em um arquivo de exemplo para verificarmos suas permissões (note que o comando é o que vem após o “$”):

$ ls -la lista.txt
-rw-r--r-- 1 root grupo 7624 2007-08-31 12:15 lista.txt

O primeiro caracter geralmente indica “d” para diretório, e “-” para arquivos. Os próximos três (rw-) indicam que o proprietário (root) tem permissão de leitura (r) e gravação (w), mas não tem de execução (-). Os outros três indicam que o grupo (grupo) tem permissão de leitura, mas não tem nem gravação, nem execução. Por fim, os três últimos indicam que os demais usuários podem ler, mas não podem gravar nem executar o arquivo.

Outras três permissões interessantes, que são chamados de Bits Especiais, são:
SUID: aplicado a arquivos, executa-o com as permissões de seu proprietário. Por exemplo, se o proprietário for o root e você aplicar o SUID, um usuário comum poderá executar este arquivo (desde que haja permissão de execução), e ele rodará com permissões de root.
SGID: aplicado a diretórios, faz com que os arquivos criados dentro dele tenham o mesmo grupo de acesso do próprio diretório. Útil em pastas compartilhadas.
Sticky: aplicado a diretórios, faz com que apenas o root e o proprietário possam renomear ou apagar os arquivos contidos nele.

Alterando as permissões

O comando usado é o chmod. Há duas maneiras de trabalhar: usando letras, e através de números octais.

No método das letras, u indica proprietário (user), g indica grupo (group), o indica outros (others) e a se refere a todos estes (all). O símbolo “+” acrescenta permissões às já existentes, “-” retira uma permissão, e “=” substitui. As letras das permissões são as usadas acima (r, w, x), além de “s” para SUID e SGID, e “t” para Sticky. Exemplos (use ls -la após cada comando para conferir a alteração):

– Acrescentar permissão de gravação para o proprietário no arquivo “lista.txt”:
$ chmod u+w lista.txt
– Retirar permissão de execução para o grupo:
$ chmod g-x lista.txt
– Substituir as permissões para outros por Leitura e Execução
$ chmod o=rx lista.txt
– Definindo permissões para mais de um objeto ao mesmo tempo:
$ chmod g-w,a+x lista.txt
– Definindo o bit SUID:
$ chmod u+s lista.txt
– Definindo o bit SGID numa pasta:
$ chmod g+s pasta/
– Definindo o bit Sticky numa pasta:
$ chmod +t pasta/

Opcionalmente, você pode usar o parâmetro “-R” no chmod para que ele atue recursivamente, isto é, percorrendo todos os arquivos e pastas a partir da pasta informada:
$ chmod -R a+x pasta/

Pelo método dos números octais, há quatro números. O primeiro indica os bits SUID (4), SGID (2), Sticky (1), e “0” quando nenhum destes será aplicado. O segundo é a permissão do proprietário, o terceiro é a permissão do grupo, e o quarto é a permissão dos demais. Para estes três, os números que representam as permissões são:

0 – Nenhuma permissão
1 – Executar
2 – Gravar
3 – Gravar e executar
4 – Ler
5 – Ler e executar
6 – Ler e gravar
7 – Ler, gravar e executar

Exemplos:

– Sem bits especiais, RWX para proprietário, RX para grupo, nenhuma para outros, no arquivo “lista.txt”:
$ chmod 0750 lista.txt
– SGID, RWX para proprietário, RWX para grupos, RX para outros, na pasta “pasta”:
$ chmod 2775 pasta/

Alterando o proprietário e o grupo

Para alterar o proprietário de um arquivo ou pasta, use o comando chown, como abaixo:
$ chown daniel lista.txt
Agora, o usuário “daniel” é o proprietário do arquivo “lista.txt”. Note que somente o root e o proprietário atual podem alterar para um novo proprietário. Você pode usar o parâmetro “-R” para aplicar as alterações recursivamente numa pasta.

Para alterar o grupo, o princípio é o mesmo, só que com o comando chgrp, como abaixo:
$ chgrp meugrupo lista.txt
Agora, o grupo “meugrupo” é o grupo de acesso do arquivo “lista.txt”. Note que somente o root e o proprietário podem alterar para um novo grupo. Você pode usar o parâmetro “-R” para aplicar as alterações recursivamente numa pasta.

Procure definir bem as permissões de pastas compartilhadas e outras que julgar importantes, para evitar acessos e modificações não autorizadas. Mas cuidado, você pode fazer o seu sistema parar de funcionar se alterar permissões sem saber o que está fazendo!

Tags: Linux, Software

Você também vai gostar

Leia também!