Home / Destaques / Como Usar o Comando chmod – Alterar Permissões de Arquivos e Pastas

Como Usar o Comando chmod – Alterar Permissões de Arquivos e Pastas

Olá pessoal.

Eu sempre preciso alterar algumas permissões de arquivos ou pastas e as vezes, preciso consultar algumas opções pouco usadas. Por isso resolvi compilar neste artigo, até mesmo para minha própria consulta posterior, os comandos chmod mais usados. Também irei descrever o que são arquivos com permissões especiais, Sticky, Suid e Sgid e como alterar as permissões deles.

Vamos lá?!

Permissões

No Unix e sistemas baseados em Unix, como no Linux, há três modelos de controle de acesso básicos: Read, Write e Execution, ou seja, Leitura, Escrita e Execução.

Veja um exemplo de permissão básica na figura abaixo:

UNIX-file-permissions-rwx-1024x340
O Tipo do Objeto significa que podem ser:
  • d => diretório;
  • b => arquivo de bloco;
  • c => arquivo especial de caractere;
  • p => canal;
  • s => socket;
  • – => arquivo normal.

Já os outros caracteres significam:

  • r => permissão de leitura (read);
  • w => permissão de gravação (write);
  • x => permissão de execução (execution);
  • – => permissão desabilitada.

Explicando um pouco mais:

Leitura (r):
Em arquivos, permite examinar o conteúdo do arquivo.
Em diretórios permite listar conteúdo do diretório.

Escrita (w):
Em arquivos, permite escrever, remover e alterar o arquivo.
Em diretórios, permite criar e remover arquivos dentro do diretório.

Execução (x):
Em arquivos, permite executar um arquivo como um programa.
Em diretório, permite ler e escrever em arquivos dentro do diretório.

Sendo que os três primeiros rwx pertencem ao Dono do arquivo, os outros três rwx pertencem ao Grupo e por fim os últimos três rwx pertencem há outros usuários que não fazem parte do grupo.

Vendo as Permissões de um Arquivo ou Pasta ou Conteúdo de uma Pasta

Aqui vou apenas usar o comando “ll“, na minha pasta chamada /home/cleuber/Scripts.
Obs. “ll” é um atalho para o comando “ls-la“.
Repare na imagem abaixo que eu tenho arquivos dentro desta pasta. Um chamado “findepapaga.sh”, outro “limpeza.sh” e outro “log.txt”. Repare que antes de cada arquivo temos a indicação das permissões dos mesmos, simbolizado pelas letras “rwx”.

permissions

Exemplo do arquivo “limpeza.sh”

Então, no exemplo de análise do arquivo “limpeza.sh”, as propriedades são:

-rwxrwxr-x

Obs. Uma dica minha é dividir cada 3 letras, formando um campo de permissões. Ficaria em sua mente algo do tipo: “rwx/rwx/r-x”, mais fácil não é?

Primeiro símbolo:
Começa com o hífen “-“, então indica que é um arquivo e não um diretório (d),

Primeiro conjunto de letras:
Começa por rwx, então indica que o dono do arquivo possui permissão 7, ou seja, Read, Write, Execute/Leitura, gravação, execução.

Segundo conjunto de letras:
Novamente são rwx, repetindo as permissões do primeiro grupo, agora válidas também para outros usuários do mesmo grupo.

Terceiro conjunto de letras:
Agora observamos que para Outros Usuários, vemos que pe “r-x”, ou seja apenas leitura e execução. Como o w está ausente, outros usuários não poderão alterar o arquivo, apenas ler/listar, e executá-lo.

Exemplo do Arquivo Log.txt

Neste exemplo, o arquivo é:

-rw-rw-r–

Ou seja, “” (arquivo), “rw” (apenas leitura e gravação para o dono), “rw” (apenas leitura e gravação para o grupo), “r” (apenas leitura para outros usuários). Reveja na mesma imagem novamente.

UNIX-file-permissions-rwx-1024x340

Usando o Ambiente Desktop

Existem diversos ambientes desktop para o Linux, e em todos eles, você conta não apenas com a interface gráfica para o usuário ver o Desktop e programas visuais, como também com um grande conjunto de programas pertencentes ao ambiente desktop que você estiver usando.

Um desses programas é o navegador de arquivos. No ambiente Gnome, por exemplo, este aplicativo padrão é o Nautilus, e no KDE, é o Dolphin. E através deles, você pode clicar com o botão direito do mouse e escolher a opção “propriedades” e ver as propriedades de um arquivo ou pasta.

Neste exemplo, usando o Nautilus.

permissions-gtk

permissions1-gtk

Como você pode perceber na imagem acima, temos os 3 campos na lateral esquerda: “Proprietário” (ou dono), “Grupo“, e “Outros“. E ao lado uma caixa para você alterar as permissões de cada campo.
Neste caso, o arquivo “limpeza.sh” possui que “-rwx/rwx/r-x” ele foi exibido graficamente com esta imagem acima. A opção “Permitir execução do arquivo como um programa” adiciona a permissão de execução “x” a todos os campos.

No Dolphin

O Dolphin é o navegador de arquivos padrão do KDE, mas você pode instalá-lo facilmente em outros ambientes desktop. Ele fornece uma variedade de recursos e opções avançadas, entre eles o de alteração de permissões de arquivos ou diretórios avançados e especiais (UID, GID, e Sticky/fixo, que irei falar mais abaixo). Muito bom não é?!

dolphon2 dolphin1

Obs. Apesar do Dolphin ser mais completo, é importante você saber como fazer isso via comandos, pois você poderá precisar em algum momento realizar uma alteração talvez sem o ambiente desktop.

No Pantheon Shell

No Pantheon shell, ambiente Desktop criado pelos desenvolvedores do Elementary OS, o navegador de arquivos chama-se Pantheon-Files, e é um fork (derivado) do Nautilus, com algumas opções muito bacanas. E você pode instalá-lo no seu sistema também.

O que eu gosto no Pantheon-Files é que nas propriedades de um arquivo, ele mostra uma caixa que permite que você mude o grupo, você pode mudar as permissões, clicando nas 3 opções dos 3 campos (Proprietário, Grupo e Todos), e ele mostra abaixo como ficaria as permissões no formato das letras “rwx” e no formato octal na caixinha ao lado 750 (no exemplo abaixo). Muito bom não é? Faltou apenas opções para permissões especiais, tal como encontramos no Dolphin.

pantheon-files-perm

O Comando Chmod

O comando chmod é usado para alterar o tipo de permissões do arquivo ou pasta.
Ele pode ser usado com parâmetros em modo Octal ou modo texto.

Modo Octal

Um octal é um número escrito sob a base 8, ou seja, usa 8 símbolos diferentes para ser representado, geralmente, os algarismos arábicos de 0 a 7. O chmod usa um número octal de 3 algarismos como parâmetro para realizar sua função.

A composição do número octal usado é feita analisando sua representação binária. Para representar cada algarismo de um número octal são necessários 3 algarismos binários. Logo o número octal de 3 algarismos usado pelo chmod será representado por um binário de 9. Cada grupo de 3 algarismos binários representa um dos níveis entre usuário (u), grupo (g) e outros (o), e cada um dos 3 algarismos ou bits de cada grupo representa um tipo de permissão entre leitura (r), do Inglês ‘read’, gravação (w), do Inglês ‘write’ e execução (x), do Inglês ‘execute’, onde um ‘1’ indica permissão cedida e um ‘0’, permissão negada.

Exemplo Permissão 755 no arquivo “-rwxr-xr-x”

(com as “barras mentais para ajudar”, ficaria “rwx/r-x/r-x”)

– rwx (leitura, gravação, execução) para o dono.
– r-x (leitura e execução) para o grupo.
– r-x (leitura e execução) para outros usuários.

chmod-infographic-001

Exemplo 750

$ chmod 750 arquivo.txt

No exemplo acima, o número 750 está escrito na forma octal. Sua forma binária seria 111101000. O 7 é a forma octal do binário ‘111’ e representa todas as permissões (leitura, escrita e execução) para o usuário proprietário do arquivo ‘arquivo.txt’. O 5 é a forma octal do binário 101 e representa as permissões de leitura e execução para o grupo, e por fim, o número 0 representa a negação de todas as permissões para outros.

Ou seja:

Nível       user / group / other
Permissão   rwx     r-x     ---
Binário     111     101     000
Octal        7       5       0
Para arquivos (-)
rwx 
000  0  (zero) permissão negada
001  1   permissão de execução
010  2   permissão de gravação
011  3   permissão de gravação e execução
100  4   permissão de leitura
101  5   permissão de leitura e execução
110  6   permissão de leitura e gravação
111  7   soma de todas as permissões
Para diretórios (d)
rwx
000  0  (zero) permissão negada
001  1   permissão para entrar no diretório
010  2   permissão para gravar dentro do diretório
011  3   permissão de entrar e gravar no diretório
100  4   permissão para listar o conteúdo do diretório
101  5   permissão de listar e entrar no diretório
110  6   permissão de listar e gravar no diretório
111  7   soma de todas as permissões

perm_table

Opções

Algumas opções extras estão disponíveis para o chmod se adicionarmos os seguintes parâmetros

-c, --changes             igual verbose, mas reporta apenas quando uma mudança é feita
    --no-preserve-root    não trata '/' especialmente (padrão)
    --preserve-root       falha ao operar recursivamente em '/'
-f, --silent, --quiet     suprimir a maior parte das mensagens de erro
-v, --verbose             mostrar um diagnóstico para cada arquivo processado
    --reference=ARQR      usa modo do arquivo ARQR em vez dos valores de MODO
-R, --recursive           muda arquivos e diretórios recursivamente
    --help                exibe esta ajuda e sai
    --version             mostra informação de versão e sai

Usando Letras

É possível tornar a definição de permissões de um arquivo ou pasta usando letras. Isso pode tornar mais simples do que lembrar-se das permissões em modo octal. Existem muitas combinações de letras e não vou cobrir todas, mas vou dar alguns exemplos.

Quando a modificação se fizer sobre o grupo, por exemplo, faremos assim para adicionar a permissão de escrita:

$ chmod g+w arquivo.txt

Dessa forma o grupo a que pertence este arquivo passa a ter permissão de gravação no mesmo.
É possível também mudar várias permissões para a mesma pasta. Por exemplo:

$ chmod o+rw Documentos

Atribui a outros, de uma vez, as permissões de leitura e escrita sobre a pasta “Documentos”. De forma semelhante é possível mudar permissões de uma só vez para diversas classes de utilizador:

$ chmod ugo-rwx Documentos

Retira todas as permissões, a todas as classes de utilizador, do ficheiro Documentos.

No exemplo, dou permissão de execução em um arquivo chamado script.sh dentro da pasta Documentos dentro de minha pasta home.

$ chmod +x /home/cleuber/Documentos/script.sh

ou apenas usando o indicados da minha home “~/”

$ chmod +x ~/Documentos/script.sh

Exemplo Usando A Opção “-R” (recursiva)

No modo octal:

Vamos usar a opção -R para um resultado recursivo em um diretório, ou seja, vamos atribuir permissão para o diretório /home/cleuber/Documentos, e todo o conteúdo dele, sejam subpastas ou arquivos.

chmod -R 777 ~/Documentos

No exemplo acima demos permissão total (leitura, escrita e gravação = 7), para todos os grupos (dono, grupo, outros = 777), na pasta Documentos nos documentos contidos nele e suas respectivas subpastas que possam existir (-R).

A Mesma coisa no Modo Texto:

chmod -R a=rwx ~/Documentos

Permissões Especiais de Acesso

STICKY

Em arquivos executáveis, a propriedade Sticky faz com que o sistema mantenha uma imagem do programa em memória depois que o programa finalizar. Esta capacidade aumenta o desempenho, pois será feito um cache do programa para a memória e da próxima vez que ele for executado, será carregado mais rápido.

Em diretórios, a propriedade Sticky impede que outros usuários deletem ou renomeiam arquivos dos quais não são donos. Isso normalmente é utilizado para aumentar a segurança, pois o diretório estará em modo append-only (somente incremente). Sendo assim, somente o usuário que é Dono do arquivo, poderá deletar ou renomear os arquivos dentro de um diretório com a propriedade Sticky aplicada.

A permissão especial Sticky pode ser especificada somente no campo outros usuários das permissões de acesso.

Exemplo:

No diretório /tmp, todos os usuários devem ter acesso para que seus programas possam criar os arquivos temporários, mas nenhum pode apagar arquivos dos outros.

Então é interessante aplicar a propriedade Sticky no diretório /tmp.

Comandos:

Aplicando a propriedade Sticky em um arquivo executável utilizando formato octal (1):

# chmod 1750 programa_pesado.sh
# ls -lah programa_pesado.sh
-rwxr-x–T 1 root root 2,9M 2016-05-26 23:51 programa_pesado.sh

Aplicando a propriedade Sticky em um arquivo executável utilizando formato simbólico (t):

# chmod o+t programa_pesado.sh
# ls -lah programa_pesado.sh
-rwxr-x–T 1 root root 2,9M 2016-05-26 23:51 programa_pesado.sh

Aplicando a propriedade Sticky em um diretório utilizando formato simbólico (t):

# chmod o+t /tmp
# ls -lah /tmp
drwxrwxrwt 8 root root 264 2016-05-26 23:22 .

Aplicando a propriedade Sticky em um diretório utilizando formato octal (1):

# chmod 1777 /tmp
# ls -lah /tmp
drwxrwxrwt 8 root root 264 2016-05-26 23:22 .

Retirando Sticky:

# chmod o-t /tmp
# ls -lah /tmp
drwxrwxrwx 8 root root 264 2016-05-26 23:22 .

Procurando Sticky:

Aplicando a propriedade Sticky em um diretório utilizando simbólico (t):

# find /home/roberto/ -perm /o=t
/home/roberto/programa_pesado.sh

Aplicando a propriedade Sticky em um diretório utilizando formato octal (1):

# find /home/roberto/ -perm -1000
/home/roberto/programa_pesado.sh

SUID (SET USER ID)

A propriedade SUID é somente para arquivos executáveis e não tem efeito em diretórios.

Nas permissões básicas, o usuário que executou o programa é dono do processo. Mas em arquivo executável com a propriedade SUID aplicada, o programa rodará com o ID do dono do arquivo, não com o ID do usuário que executou o programa.

Normalmente o usuário dono do programa executável é também dono do processo sendo executado. Ou seja, quando um arquivo/programa executável tem o controle de acesso SUID, ele é executado como se ele estivesse iniciado pelo dono do arquivo/programa.

A permissão de acesso especial SUID pode aparecer somente no campo Dono.

Exemplo:
Um exemplo para arquivo executável com a propriedade SUID é o arquivo /usr/bin/passwd. Ou seja, quando executamos o comando passwd com qualquer usuário normal, o processo é executado com ID do usuário root (como se o usuário root tivesse executado o comando passwd), pois somente o usuário root tem permissão para alterar o arquivo /etc/passwd.

# ls -lah /usr/bin/passwd
-rwsr-xr-x 1 root root 27K 2016-05-26 10:37 /usr/bin/passwd

Comandos:

Aplicando SUID:

Aplicando a propriedade SUID em um arquivo executável utilizando formato simbólico (s):

# chmod u+s programa.sh
# ls -lah programa.sh

-rwsr-xr-x 1 root roberto 0 2016-05-26 22:57 programa.sh

Aplicando a propriedade SUID em um arquivo executável utilizando formato octal (4):

# chmod 4750 programa.sh
# ls -lah programa.sh

-rwsr-x— 1 root roberto 0 2016-05-26 22:57 programa.sh

Retirando SUID:

# chmod u-s programa.sh
# ls -lah programa.sh

-rwxr-x— 1 root roberto 0 2016-05-26 22:57 programa.sh

Procurando SUID:

Procurando a propriedade SUID em um arquivo executável utilizando formato simbólico (s):

# find /home/roberto -perm u=s
/home/roberto/programa.sh

Procurando a propriedade SUID em um arquivo executável utilizando formato octal (4):

# find /home/roberto -perm -4000
/home/roberto/programa.sh

SGID (SET GROUP ID)

A propriedade SGID tem a mesma função que o SUID para arquivos executáveis. Mas a propriedade SGID tem um efeito especial para os diretórios.

Quando SGID é aplicado em um diretório, os novos arquivos que são criados dentro do diretório assumem o mesmo ID de Grupo do diretório com a propriedade SGID aplicado.

A permissão de acesso especial SGID pode aparecer somente no campo Grupo.

Exemplo:

Se no diretório /home/roberto tem o grupo casa e tem o SGID habilitado, então todos os arquivos dentro do diretório /home/roberto serão criados com o grupo casa.

Este é um importante atributo para uma equipe, assumindo que todos os arquivos compartilhados devem ter o mesmo grupo.

Comandos:

Aplicando SGID:

Aplicando a propriedade SGID em um diretório executável utilizando formato simbólico (s):

# chmod g+s /home/equipe
# ls -lah /home/equipe
drwxr-sr-x 2 roberto equipe 48 2016-05-26 23:21 .

Aplicando a propriedade SGID em um diretório executável utilizando formato octal (2):

# chmod 2750 /home/equipe
# ls -lah /home/equipe
drwxr-s— 2 roberto equipe 48 2016-05-26 23:21 .

Retirando SGID:

# chmod g-s /home/equipe
# ls -lah /home/equipe
drwxr-xr-x 2 roberto equipe 48 2016-05-26 23:21 .

Procurando SGID:

Procurando a propriedade SGID em um diretório executável utilizando formato simbólico (s):

# find /home -perm /g=s
/home/equipe

Procurando a propriedade SUID em um diretório executável utilizando formato octal (2):

# find /home -perm -2000
/home/equipe

 

Conclusão

Espero ter coberto a maioria das possibilidades de alteração de permissões neste artigo, que pode ser uma útil fonte de pesquisa para quando nós precisarmos realizar algum desses procedimentos.

Abraços!

Fontes:
wikipediatutonicsvivaolinux

About Cleuber

Cleuber Silva Hashimoto. Administrador

2 comments

  1. Olá, obrigado pelo esclarecimento, realmente um comando que usamos todos os dias, mas mal sabemos de suas funções.
    Eu gostaria de saber, não sei se essa dúvida poderia pertencer a esse artigo, como podemos atribuir vários grupos de usuários a um diretório, ex:
    /home/arquivo
    que tem como dono root, e grupo Financeiro.
    Quero nesse caso, que outros grupos possam acessar, mas não quero deixar as propriedades do diretório como 777, e sim 770.
    Não sei se ficou claro minha ideia.

Leave a Reply

x

Check Also

Elementary OS 6 Odin Lançado – Confira as Novidades

Desenvolver um sistema operacional não é ...