Até aqui, é importantíssimo entender que o root é uma coisa e o Dono de diretórios e arquivos é outra; são distintos.
O root está acima do Dono, do Grupo e dos Outros. O root é o cara! E esse cara pode ser qualquer um (que tenha a senha de root)!
Por exemplo, o usuário lebowski é um cara chamado João Muhammad Wang da Silva (na instalação do sistema ele poderia ter colocado o nome do usuário de João, de Muhammad, de Wang, de Silva, etc, mas preferiu colocar o nome de lebowski). E este usuário lebowski, que é o CPF João Muhammad Wang da Silva, é o Dono lebowski de algum diretório e/ou arquivo e pode fazer parte de um Grupo ou pode ser os Outros em relação a algum diretório e/ou arquivo. Quem decide é o root.
Então, a pessoa João Muhammad Wang da Silva como root pode colocar o usuário lebowski (ele mesmo) como Outros em um determinado diretório e/ou arquivo, bem como pode colocar como Dono ou colocar na patota, no Grupo.
O importante é entender que você como root deve abstrair do mundo e a partir daí enxergar você mesmo como um usuário qualquer, ou seja, neste momento você é o root, é o cara; você não é o lebowski, sequer você é o João Muhammad Wang da Silva... você nem é você mesmo: você é o root.
O lebowski, neste momento, é um usuário que o root manipula como quiser e você é o root... pelo menos até deslogar do root e voltar a ser o lebowski com seus poderes limitados, sem poderes de super-vaca.
No
Linux temos R de Read (em Português "Leitura"), W de Write (em Português "Escrita", mas entende-se aqui por Escrita/Gravação) e temos X de Execute (Execução).
Leitura - Concede a capacidade de ler, ou seja, visualizar o conteúdo do arquivo.
Escrita/Gravação - Entende-se aqueles diretórios e arquivos os quais um determinado usuário pode alterar, escrever e gravar no arquivo; concede a capacidade de modificar ou remover o conteúdo do arquivo; é a permissão mais cabulosa das três.
Execução - O usuário com permissões de execução pode executar um arquivo como um programa.
E temos os modos de acesso concernentes às permissões:
Ler
O acesso a um diretório significa que o usuário pode ler o conteúdo. O usuário pode ver os nomes dos arquivos dentro do diretório.
Escrever
Significa que o usuário pode adicionar ou excluir arquivos do diretório e pode modificar o conteúdo de um arquivo.
Executar
A execução de um diretório ou arquivo realmente não faz sentido na forma de acesso ao diretório ou arquivo, então pense nisso como uma permissão de passagem (não passageira, mas de passagem, atravessar).
Por exemplo, um usuário deve ter acesso de execução ao diretório bin para executar o comando ls ou cd.
Então não confunda as permissões de forma geral com as permissões dos modos de acesso, isso reflete-se ao que veremos adiante com chown (change owner) e chmod (change mode).
Porém, antes temos o seguinte esquema:
Neste momento, você, neófito, pode estar se perguntando: "Agora colocaram números no meio da parada?" Mas é simples, é o formato octal (são oito algarismos de 0 a 7). O formato octal é um conjunto de oito números onde cada número define um tipo de acesso diferente.
O hífen (tracinho) indica que uma determinada permissão não está configurada, ou seja, o usuário não tem aquela permissão.
- 0 Sem permissões --- = 0
- 1 Permissão de Execução --x = 1
- 2 Permissão de Escrita -w- = 2
- 3 Permissão de Escrita e Execução: 1 (execute) + 2 (write) = 3 -wx
- 4 Permissão de Leitura r-- = 4
- 5 Permissão de Leitura e Execução: 4 (read) + 1 (execute) = 5 r-x
- 6 Permissão de Leitura e Escrita: 4 (read) + 2 (write) = 6 rw-
- 7 Todas as Permissões: 4 (read) + 2 (write) + 1 (execute) = 7 rwx
- R de Read (Leitura) recebe o valor 4.
- W de Write (Escrever/Gravar) recebe o valor 2.
- X de Execution (Execução) recebe o valor 1.
Recebem esses valores (números) porque foram convencionados, apesar de que isso remonta aos primórdios de bits e bytes, mas não vem ao caso.
Veremos agora a saída do comando ls -l para vermos algumas permissões como exemplo.
# ls -l
total 52
-rw-r--r-- 1 root root 9644 abr 5 02:54 clamav-milter.conf
-rw-r--r-- 1 root root 26117 abr 5 02:54 clamd.conf
-rw-r--r-- 1 root root 5983 abr 5 02:54 freshclam.conf
drwxr-xr-x 12 root root 4096 mar 13 20:34 nftables
-rw-r--r-- 1 root root 0 mar 13 19:14 packages.txt
Vamos analisar a primeira parte da seguinte linha:
drwxr-xr-x 12 root root 4096 mar 13 20:34 nftables
- Tem 10 caracteres no começo da linha (drwxr-xr-x).
- Inicia com "d" que significa que é um diretório, os outros nove são as permissões propriamente ditas, três para cada: Dono, Grupo e Outros. rwx (dono), r-x (grupo) e r-x (outros).
- O hífen, no caso, não é um separador, ele indica quando uma permissão não está configurada e as permissões aparecem em sequência rwx.
Traduzindo para octal:
- rwx é 4+2+1 = 7.
- r-x é 4+1 = 5
- r-x é 4+1 = 5
Em octal a permissão é 755.
Aí você escolhe se quer trabalhar umas vezes com letras (rwx) e outras com números (421).
Esta linha:
-rw-r--r-- 1 root root 5983 abr 5 02:54 freshclam.conf
Tem os 10 caracteres iniciando com um hífen (traço) que estando no início da linha indica se tratar de um arquivo.
Seguindo o esquema r=4, w=2 e x=1 temos os nove caracteres restantes que são as permissões propriamente ditas:
rw- = 4+2 = 6
r-- = 4
r-- = 4
Permissão 644.
Lembrando que muitas vezes um programa ao ser instalado ele muda as permissões padrões do sistema operacional para suas próprias permissões, mas é para isso mesmo que existem os comandos, principalmente como root, para você alterar tudo e bagunçar todo o sistema.
# ls -l
lista as permissões dos diretórios e arquivos.
Caso queira listar um diretório ou arquivo em específico:
# ls -l nome_do_arquivo ou diretorio
Não me deterei em comandos aqui, pois temos que entender a lógica da coisa antes de ser um mero decorador de comandos. Os comandos você memoriza praticando e os manuais estão aí para auxiliar.
Dando um umask -S no mesmo lugar:
# umask -S
u=rwx,g=rx,o=rx
u=usuário=dono, g=grupo e o=outros.
Podemos ver a diferença. A saída do umask refere-se às permissões padrões em relação ao sistema e a saída do ls -l refere-se aos diretórios e arquivos.
Em qualquer lugar (diretório) que você for, a saída do umask -S será sempre a mesma. Vá dando cd /home, cd /usr/src, cd /bin/X11, etc, e dando umask -S e verá que a saída é sempre a mesma.
A saída de ls -l muda de acordo com as permissões de cada diretório e arquivo.
Quando aparecer uma linha assim:
lrwxrwxrwx 1 root root 4 mar 18 17:58 zstdmt -> zstd
O "l" (letra éle) no início dos 10 caracteres indica se tratar de um link simbólico (symlink).
Agora ficou fácil de entender as permissões, a linha aí de cima tem as permissões:
- rwx - Dono;
- rwx - Grupo;
- rwx - Outros.
Permissão 777.
Depois do primeiro caractere à esquerda começam as permissões que são nove caracteres e quando tem hífen nos nove caracteres indica que tal permissão (r, w ou x) não está setada.
No primeiro caractere:
- d -> indica que é um diretório;
- hífen(-) -> indica que é um arquivo;
- l -> indica que é um link simbólico.
Vamos ver o significado de toda a linha:
drwxr-xr-x 12 root root 4096 mar 13 20:34 nftables
- d = tipo do arquivo (é um diretório)
- rwxr-xr-x = permissões de acesso ao diretório ou arquivo ou symlink
- 12 = número total de links para o arquivo ("atalhos") somado com o número de diretórios e arquivos dentro do diretório em questão
- root = usuário proprietário do arquivo
- root = grupo do arquivo
- 4096 = tamanho do arquivo em bytes
- mar = mês da última modificação
- 13 = dia da última modificação
- 20:34 = horário da última modificação
- nftables = nome do arquivo ou diretório
Alterando permissões
# chmod 444 diretorio ou arquivo
ou
sudo chmod 444 diretorio ou arquivo
Podemos aplicar uma permissão recursivamente com o parâmetro "-R" de forma que todo o diretório e subdiretórios e arquivos também recebam esta permissão. Exemplo:
# chmod -R 750 diretorio ou arquivo
Obs.: A opção -R muda as permissões de TODOS os diretórios e arquivos que estão dentro do diretório.
Por exemplo:
# chmod -R 777 nftables
mudará as permissões de TODOS os diretórios e arquivos incluindo os arquivos dentro dos diretórios dentro de nftables, TUDO ficará com as permissões 777. Use com cuidado.
Alterando o dono
Sintaxe:
chown [opções] [novo_proprietário] [:novo_grupo] nomes_arquivos
Alterar o dono do diretório ou arquivo para o usuário lebowski
# chown lebowski diretorio ou arquivo
Alterar o usuário (dono) e o grupo do diretório ou arquivo para dono lebowski e grupo patota:
# chown lebowski:patota nome_do_diretorio ou nome_do_arquivo
Vamos ver um pouco mais na realidade:
# adduser lebowski www-data
# cd /var/www
# chown -Rv www-data:www-data /var/www/
# chmod -Rv g+rw /var/www/
O comando adduser foi usado para colocar o usuário lebowski no grupo www-data, a patota do Apache.
Depois o root entrou (cd, change directory) no diretório /var/www.
O comando chown (change owner) atribuiu os arquivos contidos em /var/www para o usuário e grupo www-data, ou seja, colocou o usuário www-data como dono e colocou o /var/www no grupo www-data.
E atribuiu recursivamente (-R) e verbosamente (v dá informações na saída do comando).
Pode ter um usuário e um grupo com o mesmo nome, mas não pode ter dois usuários com o mesmo nome e nem dois grupos com o mesmo nome.
- chown define quem é o proprietário do arquivo ou diretório.
- chmod define quem tem permissão de fazer outras coisas dentro do arquivo ou diretório.
O comando chmod (change mode) adicionou permissões de leitura (r) e escrita (w) aos arquivos para os grupos a que pertencem, no caso www-data.
Percebam que pode ter mais de uma sintaxe:
# chmod g+rw diretorio ou arquivo
# chmod 755 diretorio ou arquivo
- g+rw acrescenta essas permissões, caso não tenham.
- g-rx tira essas permissões, caso tenham.
- g=x elimina todas as permissões que tem no grupo e deixa com somente permissão de execução (x).
A mesma coisa com:
Lembrando:
- u = Usuário/Dono;
- g = Grupo;
- o = Outros.