████ ██ ████████ ████████ ██████████
░██░██ ░██░██░░░░░ ░██░░░░░ ░░░░░██░░░
░██░░██ ░██░██ ██ ██ ██████ ██ ██ ██████████ ░██ ░██
░██ ░░██ ░██░███████ ░██ ░██░░██░░█░██ ░██░░██░░██░░██░███████ ░██
░██ ░░██░██░██░░░░ ░██ ░██ ░██ ░ ░██ ░██ ░██ ░██ ░██░██░░░░ ░██
░██ ░░████░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██░██ ░██
░██ ░░███░████████░░██████░███ ░░██████ ███ ░██ ░██░████████ ░██
░░ ░░░ ░░░░░░░░ ░░░░░░ ░░░ ░░░░░░ ░░░ ░░ ░░ ░░░░░░░░ ░░
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.
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)
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*
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.
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.
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:
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.
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.
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 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.
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.