Permissões: chmod, chown, umask

03/12/2025


(Texto produzido por voidx).

As permissões nos Sistemas Operacionais do tipo *NIX são extremamente interessantes. Elas tornam coisas como vírus extremamente raras, pois cada usuário tem seu próprio "espaço" e permissões.

Vamos usar o Debian como exemplo:

Para o usuário executar certos comandos é necessário fazer parte de grupos como: sudo, wheel, video, storage, network, audio, etc A lista de grupos disponíveis fica no arquivo /etc/groups., e a de usuários em /etc/passwd Também é possível ver os usuários que fazem parte desses grupos.

O comando chmod(change-mode) usa base octal(0 - 7)

Existem 3 tipos de permissões

R - read; W - write; X - execute: Ler, Escrever, Executar

Podemos ver essas permissões usando o comando ls com o argumento -l

Exemplo 1.1:

$ ls -l session.appimage 
-rwxr-xr-x 1 voidx voidx 159394919 nov 19 15:13 session.appimage*

Usuário, Grupo, Outros

Ao fim de cada rwx alternamos entre "grupos":

O usuário tem todas as permissões Aqueles que fazem parte do grupo possuem permissões de grupo Os "outros" se referem a qualquer outro usuário do sistema que não faça parte do mesmo grupo.

No Exemplo 1.1 vemos o nome de usuário voidx duas vezes, isso significa que o arquivo pertence ao usuário voidx e ao grupo voidx(grupo do usuário).

OBS: Quando estiver listando um diretório será possível ver um "d" entre as permissões, isto apenas indica que é um diretório. Ou seja, é um arquivo que contém outros arquivos dentro dele.


Usando chmod e entendendo as permissões

Quando queremos dar permissão de execução a um arquivo usamos: chmod +x nome_do_arquivo

Isso permite que nós executemos o arquivo. Mas esta permissão é dada a todos(usuário, grupo, outros). Se quisermos dar permissão apenas ao usuário precisamos usar:

chmod u+x nome_do_arquivo
# Ou então
chmod +744nome_do_arquivo # Usando o sistema octal

O u é de usuário, o x de execução, e por fim o arquivo. Temos também g para grupos, e o para outros.

Se quisermos dar permissão de execução para todos então devemos usar:

chown ugo+x

Também podem remover as permissões, apenas mudando o + por -:

chmod go-wx

Assim removemos as permissões de escrita e execução do grupo e outros.

Usando o sistema octal

Você já deve ter visto alguém escrever:

chmod 755 nome_do_arquivo

Aqui está sendo empregado o sistema octal, que é bastante conveniente para representar números que são múltiplos de 2, 4, 8... Cada número representa um byte de permissão, que definimos para um arquivo. Sendo eles:

    • Nenhuma permissão
    • x - Execução
    • w - Escrita
    • wx - Escrita e Execução
    • r - Leitura
    • rx - Leitura e Execução
    • rw - Leitura e Escrita
    • rwx - Todas as permissões

OBS: Para realizar a soma, use os primitivos 1(x), 2(w), 4(r).

Se prestar atenção o suficiente vai notar que basta somar as permissões e encontrará o número necessário para a tarefa. Se quisermos apenas Leitura e Escrita somamos 4 (r) + 2 (w) e teremos o 6(rw)

O comando chmod 755 está na verdade dizendo para darmos permissão total ao usuário; leitura e execução para o grupo e outros.

Curiosidade: experimente remover todas as permissões de um arquivo.

Atenção: Um diretório sem permissão de execução é um diretório que não pode ser aberto.

Chown

Todo arquivo e diretório pertence a um usuário e grupo. Ser parte do mesmo grupo ao qual um arquivo pertence pode te permitir ler ou editar arquivos pertencentes aquele grupo. Mas geralmente as permissões de grupo são limitadas a leitura e execução.

O comando chown(change owner) muda o dono, e se for provido, o grupo ao qual aquele arquivo/diretório pertence. Como mencionei antes os grupos estão listados em /etc/groups, e os usuário estão em /etc/passwd. A utilidade deste comando é imensurável, uma vez que podemos precisar mudar a posse de um arquivo para que este tenha efeito ou possa ser editado por outro usuário ou membro de grupo.

Como usar o comando
chown [nome_do_usuario]:[nome_do_grupo] nome_do_arquivo

Você pode omitir o " : " e "[nome_do_grupo]", mas precisa ao menos fornecer um usuário para que o comando seja executado corretamente, de outra forma terá um erro. Por questões de segurança você não pode "dar" um arquivo para o root ou outro usuário. O que coloca chown na lista de comandos que pertencem ao superusuário(root).


Diretórios e Permissões

Diretórios são arquivos que contém arquivos dentro de si mesmos, desta forma podemos ver eles como uma lista de arquivos com o endereço de cada arquivo apontando para aquele diretório(arquivo) e fazendo uma diferenciação entre os arquivos no sistema de arquivos que possuem o mesmo nome, mas não estão no mesmo diretório.

Quando usamos chmod e chown, nós apenas mudamos a permissão e posse do arquivo de forma individual. Imagine que uma pasta pertence ao usuário root, mas dentro dela todos os arquivos pertencem a outro usuário. Sim isto é possível e costuma acontecer muito quando você instala coisas que encontra no Github e acaba sujando seu sistema de arquivos.

Para ambos chmod e chown podemos usar a opção -R para que recursivamente tudo dentro daquele diretório tenha suas permissões modificadas ou posses transferidas.

chmod -R 755 diretorio # Permissão modificada de forma recursiva
chown -R root:root diretorio # Posse modificada de forma recursiva

PS: Se o diretório pertencer ao usuário root ele pode ser removido caso esteja vazio, do contrário apenas o usuário root pode entrar e modificar o conteúdo do diretório.

PPS: O diretório do root(/) está em /root.


Umask

Imagine que você está criando vários arquivos e não quer ficar dizendo quais tipos de permissões o arquivo irá ter ao ser criado. Às vezes queremos criar arquivos com permissão total para o usuário, leitura para o grupo e outros, mas não queremos fazer isso toda vez que criarmos um novo arquivo. Ou apenas queremos facilitar o compartilhamento do arquivo em um sistema com vários usuários.

umask usa um esquema que facilita bastante a vida do usuário. Ao configurar sua umask, você é capaz de pré-configurar as permissões dos arquivos criados.

umask 0022
touch arquivo.txt

Estamos empregando o sistema octal novamente, mas desta vez realizamos uma subtração. O 0 significa RWX, o que seria o nosso 7, enquanto o 2 é o valor que será subtraído do 0(7). Ou seja, nosso 0022 é igual a 7755. Mas por que nós temos 4 dígitos ao invés de 3? Bom, o primeiro dígito a esquerda representa um modo especial, o qual não abordaremos ainda.

Apenas entenda por agora que se você usar o umask 0022, seus arquivos serão criados com permissões rwx-rx-rx Mas nenhum arquivo pode ser criado com imediata permissão de execução(ao menos não de forma segura), então o x na verdade não existe naturalmente.

É muito comum colocar o comando umask no .bashrc ou .bash_profile, assim temos uma configuração persistente.


Tags: linux, shell