Entendendo permissões de arquivos Linux
TutoriaisSistemas operacionais

Entendendo permissões de arquivos Linux, guia avançado!

Oi pessoal, o artigo de hoje será uma daqueles densos, vamos tocar em um assunto que até alguns administradores de sistema com vários anos experiência ainda tem dificuldades eventualmente, o sistema de permissões de arquivos Linux.

Grande parte da questão, é que você pode ter o controle absoluto de o que, como e em que circunstância um arquivo ou diretório no Linux pode ser acessado, escrito, modificado ou executado. 

Provavelmente você conhece a “versão fácil” de ajustar essas configurações, observando as propriedades de qualquer arquivo pela interface:

persmissçoes

Mas claro, se você estiver em um servidor, sem interface gráfica, trabalhando apenas via linha de comando, a coisa muda de figura. Não só fica um pouco mais complexa, porque afinal, como tudo o que é feito no terminal, você precisa saber o que escrever, como acaba ficando mais poderosa também, pois você pode espeficar detalhadamente o que você deseja.  

Contextualizando permissões de arquivos Linux

Algo importante pra gente “brincar” juntos (vai ser divertido, você vai ver!) é você não ter receio e testar as coisas junto comigo, isso vai facilitar o seu aprendizado. Para isso, vamos criar uma pasta para você entender as persmissões, mas vamos fazer tudo pelo terminal, assim você já vai se familiarizando com o dia a dia de um sysAdmin.   Crie uma pasta no terminal com o nome “estudos’:  

mkdir estudos

Mude para dentro da pasta:

cd estudos 

Vamos criar alguns outros arquivos e pastas, por exemplo:

touch diolinux
touch "eu uso linux" 
mkdir "pasta secreta"
mkdir pasta-comum
Exercícios sobre permissões

Agora que já temos alguns arquivos na nossa pasta, vamos o rodar o comando:

ls -l

Ele nos mostrará várias informações sobre os arquivos dentro desse diretório, incluindo as permissões de cada um deles:

Permissões Linux - entendendo como funciona

Observe que existem várias informações em cada linha, mas vamos nos focar na primeira, e nos primeiros caracteres. Observe que na imagem acima eu adicionei alguns “risquinhos” vermelhos, contando de 3 em 3 caracteres, exceto o primeiro, isso tem um motivo.    Vamos transpor a informação para cá, para fins de comparação, entre o primeiro arquivo comum “diolinux” e o último arquivo, que na verdade é um diretório, chamado “pasta secreta”:   -rw-r–r– 1 dio dio    0 jul 26 14:23  diolinuxdrwxr-xr-x 2 dio dio 4096 jul 26 14:23 ‘pasta secreta’ Observe e compare a diferença entre as duas linhas, certamente você encontrará muitas semelhanças e também diferenças, vamos analisar em blocos coloridos:

rw-r–r– 1 dio dio    0 jul 26 14:23  diolinux
 
O primeiro caractér em preto, indica o tipo do arquivo, seguindo essa tabela:
 

d = diretório
b = arquivo de bloco
c = arquivo especial de caractere
p = canal
l =  link simbólico

s = socket
– = arquivo “normal” ou um arquivo em branco (é esse o caso do exemplo)

A parte em vermelho nos diz quais as permissões do arquivo para “dono, grupo e outros”, mas voltaremos nele mais tarde.

 
O número em laranja nos diz a quantidade de links inode que existe neste arquivo ou diretório. Um sistema Linux identifica os arquivos por seus números de inode, que é uma forma única do sistema de arquivos identificar cada um dos arquivo. Um diretório, é na verdade uma lista de números inode com seus nomes correspondentes. Cada nome de arquivo em um diretório é um link para um inode em particular. Não é algo especialmente útil para o nosso estudo de permissões, mas fica aqui como curiosidade. 🙂
 
O nome “dio” em verde, nos informa o usuário que é dono do arquivo, e o segundo “dio”, em azul claro, nos informa quem é o grupo de usuários que é dono dele, da mesma forma.
 
Cada arquivo no Linux é “propriedade” de alguém, ou de um usuário em particular. Normalmente o dono do arquivo (owner) é o criador do arquivo, mas graças ao sistema de permissões, você pode criar situações onde o usuário que criou o arquivo não é dono dele, dando a propriedade para outra pessoa ou usuário.
 
O dono do arquivo ou diretório também pode pertencer a um determinado grupo, nesse caso o arquivo é associado a todos os usuários que fazem parte de um determinado grupo. No nosso exemplo, o nome do criador e proprietário do arquivo e nome do grupo são o mesmo, “dio”.
 
Em azul escuro temos o valor em “bytes” do espaço em disco ocupado pelo arquivo ou diretório. Nesse caso, não chega nem a um, por isso do número zero.
 
A próxima informação nos diz a data de criação do arquivo ou diretório em questão.
 
Por último, temos o nome do arquivo.
 

Dando uma olhada profunda nas permissões

Vamos “dar um zoom” na parte vermelha da saída do nosso terminal, que nos informa os seguintes dados:
 
rw-r–r–
 
Podemos contrastar com a informação do arquivo da última linha, que ao contrário do primeiro da lista, que é um arquivo simples, é uma pasta, ou diretório, como você preferir chamar:
 
rwxr-xr-x
 
Até mesmo essa informação deve ser fragmenta em grupos de 3, pegando o segundo exemplo, pois há maior diversidade de opções, temos: rwx    r-x    r-x

Cada terceto informa respecitivamente as permissões para:

dono  grupo e outros

Onde:  

  • r = read (ler)
  • w = write (escrever)
  • x = execute (executar)
  • – = não tem permissão

Sabendo disso, observando o nosso exemplo, podemos dizer que:  

  • O dono do arquivo tem permissões de ler, escrever e executar este arquivo (rwx);
  • O grupo de usuários ao qual o arquivo pertence tem permissões de leitura, não tem permissões de escrita, mas pode executar o arquivo (r-x);
  • Outros usuários poderão ler o arquivo, não poderão escrever nele, e podem executá-lo(r-x).  

Se voltarmos ao primeiro exemplo: rw-r–r–  

Temos:  

  • O dono pode ler, escrever, mas não pode executar;
  • O grupo pode ler, não pode escrever e nem executar;
  • Outros usuários podem ler, mas não podem escrever e nem executar;  

Alterando o acesso e permissões de arquivos Linux e suas muitas opções

Agora que você já entendeu como ler as permissões dos arquivos Linux, você pode querer mudá-las, para permitir ou bloquear o uso de certas pessoas ou usuários. Para isso, temos dois comandos no Linux:  

chmod: Chamado de “change mode”, serve para mudar as permissões de um arquivo ou diretório.

chown: Chamado de “change owner”, serve para mudar o dono de um arquivo ou diretório.   Por exemplo, se eu quiser modificar o nosso arquivo de exemplo “diolinux” para que o usuário, dono do arquivo,  tenha a permissão de execução nele, posso usar o comando:

chmod 754 diolinux
Mudando permissões

Observe a leitura do arquivo original na imagem acima com o “ls -l”, mudando as permissões com o comando acima, e fazendo a leitura novamente. Veja como o X foi adicionado ao arquivo na coluna do usuário, mas foi também adicionado à coluna de grupos, já que nesse caso, uma coisa afeta a outra.  

Por acaso, eu tenho a intuição de que você deu uma coçada na cabeça agora, não foi? Acertei? 😀

De onde saiu esse “754” do inferno? 

Eu vou te explicar como isso funciona, fique tranquilo.  

Entendendo a numeração das permissões

Você já deve ter ouvido falar que a computação moderna se trata, lá no fundo, de número binários, certo? Uns e zeros, aquela coisa toda, não é?  

Pois então, imagine que as colunas de read, write e exec são “interruptores”, com valor um(1), elas fazem algo, com valor zero(0), elas deixam de fazer, por exemplo:  

rwx    r-x r– 111    101 100

Agora a brincadeira fica interessante, converta os números binários para decimais e veja que “111”, no exemplo, é igual a 7, “101” é 5, “100” é “4” e assim por diante. Você pode brincar numa dessas calculadoras online se quiser.   

No fim, temos um número finito de combinações que gera-nos essa tabela:  

Tabela de permissões CHMOD Linux

Logo, o número que você vai digitar logo após o “chmod” é referente ao tipo de de permissão que você quer dar, se você quer que todos tenham permissão pra tudo, por exemplo, o comando seria:

chmod 777 nome_do_arquivo

Esse comando só pode ser executado dessa forma, se você for o dono do arquivo obviamente. Quando se trata de mudar permissões de pastas, é necessário acrescentar um parâmetro para que as permissõe sejam acrescentadas recursivamente a todos os elementos dentro dela, a menos que você realmente queira mudar a permissão do diretório, mas não dos arquivos dentro dele:

chmod -R 777 nome_da_pasta

Aqui mais uma tabela que pode ser útil:

Esquema de permissões Linux

Claramente, 666 não é o número da besta, é simplesmente o universo te dizendo que você pode ler e escrever, mas não executar nada. 😮  

Você também pode usar o “chmod” para acrescentar um remover alguma permissão ao arquivo, ao invés de mudar todas as configurações. Como por exemplo aplicar permissões para todos os usuários assim:

chmod +x 'eu uso linux'
Configurando permissões

Esse parâmetro “+x” acrescenta o “x” de “executable” em “dono”, “grupo” e “outros” ao mesmo tempo, conforme você pode ver na imagem acima, onde fizemos o processo no arquivo ‘eu uso linux’, que por identificação visual, mudou de cor no Bash do Ubuntu, indicando que agora ele é um executável também, ficando em verde.  

Assim como usamos o “+x” para torná-lo executável, podemos usar “+w” para escrita e “+r” minúsculo, para leitura em todos ao mesmo tempo.  

Por via das dúvidas, roda um:

chmod man

Para ver o manual do comando.

Esse é o jeito “old scholl” de fazer as coisas, talvez porque lembrar de números seja mais fácil(?), mas na verdade, o “chmod” suporta letras também, de forma ainda mais direta do que quando usamo o “+x” ou “+w” ou o que for.

Por exemplo:

Quem é: u, g, o, a (para user, group, other, all)
O que será feito: +, -, = (para adicionar, remover, setar exatamente)
Onde estará:  r, w, x (para read, write, execute)   Numa linha de comando, o “chmod 777 diolinux” que fizemos seria:

chmod ugo+rwx diolinux
configurando permissões de arquivos

Eu sei, eu sei, “chamando o ugo”, também não consigo evitar o pensamento. A minha quinta série interna saúda a sua. 😀

Mudando o dono do arquivo ou diretório 

Para mudar o dono do arquivo você precisa ser o Root, que é dono da porra toda de tudo. E você faz isso usando o comando chown.  

Existe um padrão de sintaxe para esse comando, que é:

chown dono:grupo arquivo/pasta

Para ver os grupos disponíveis, manda um:

cat /etc/group

Se quiser ver odernadinho, pode ser:

cut -d: -f1 /etc/group | sort

Dessa forma fica óbvio como proceder para fazer uma mudança de propriedade ou de grupo:

sudo chown root:root diolinux 
configuração de mudança de usuário

Como curiosidade, olhe as propriedades desse arquivo pela interface e você verá algo assim:  

Configuração de permissões de pasta

Como temos uma persmissão 777 nesse arquivo, mesmo ele pertecendo agora ao Root, nosso usuário normal pode, pode exemplo,  editar ele. Mas e se fizermos isso?

sudo chmod 750 diolinux

Precisamos do sudo agora porque o arquivo não é mais nosso e sim do Root, então precisamos executar o comando como super usuário. Tente abrir o arquivo com o seu usuário normal e você verá que agora você não consegui mais editar e salvar ele, mesmo tendo sido você o original criador! Muito legal! 🙂  

Por fim, espero que o artigo seja digno de um favorito no seu navegador, agora você pode apagar a sua pasta de estudos. Se tiver alguma dúvida sobre permissões de arquivos Linux, consulte o nosso fórum, ele é um lugar muito legal para compartilhar conhecimentos.  

Até a próxima!


Viu algum erro ou gostaria de adicionar alguma sugestão a essa matéria? Colabore, clique aqui.

Diolinux Ofertas - Aproveite os melhores descontos em diversos produtos!