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:
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
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:
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:
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.
Dando uma olhada profunda nas permissões
Cada terceto informa respecitivamente as permissões para:
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
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:
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:
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'
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
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
Como curiosidade, olhe as propriedades desse arquivo pela interface e você verá algo assim:
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.