Pular para o conteúdo
Todos os conceitos

Permissões de arquivo

Cada arquivo diz quem pode ler, alterar e executar, separando o dono, o grupo e todo o resto.

No Linux, todo arquivo tem um dono, um grupo e nove permissões. O ls -l mostra tudo na primeira coluna:

$ ls -l
-rwxr-xr-x 1 ana sitio  120 Oct 20 08:00 ordenha
-rw-r----- 1 ana sitio   80 Oct 20 08:00 contas.txt
drwxr-xr-x 2 ana sitio 4096 Oct 20 08:00 fotos

Leia -rwxr-xr-x assim:

  • o primeiro caractere é o tipo: - arquivo comum, d pasta (directory), l atalho (link);
  • depois vêm três trios, sempre na ordem dono, grupo e outros (todo o resto);
  • em cada trio, r (read) é ler, w (write) é alterar e x (execute) é rodar como programa; um - no lugar quer dizer que aquela permissão falta.

Então ordenha (rwx r-x r-x): o dono lê, altera e roda; o grupo e os outros leem e rodam. E contas.txt (rw- r-- ---): a dona, ana, lê e altera, quem é do grupo sitio só lê, e o resto não lê nada. Em pasta, o x tem outro sentido: é poder entrar nela com cd.

-rw-r----- 1 ana sitio 80 Oct 20 08:00 contas.txt - r w - r - - - - - tipo dono grupo outros arquivo comum lê e altera só lê nada r w x - ler alterar rodar falta
Em -rw-r-----, o primeiro caractere diz que é um arquivo comum; o trio do dono, rw-, deixa ler e alterar; o do grupo, r--, só ler; e o dos outros, ---, nada.

Três consequências práticas:

  • A extensão não faz um programa. backup.sh sem x não roda (dá Permission denied); um arquivo sem extensão e com x roda. Para rodar um programa da pasta atual, escreva ./ordenha (o ./ quer dizer "este aqui, desta pasta"). Leia antes com cat: rodar script baixado sem ler é como assinar papel sem ler.
  • O chmod muda as permissões. chmod +x backup.sh liga o x; chmod 600 contas.txt deixa só o dono ler e alterar. Nos números, cada trio soma r=4, w=2 e x=1: 600 é rw-------, 755 é rwxr-xr-x.
  • Segredo que todos leem é falha. Uma senha num arquivo rw-r--r-- está aberta para qualquer usuário da máquina. Procurar esse tipo de arquivo é um dos primeiros passos de quem invade um servidor, e de quem faz auditoria nele.

Para não ler uma lista longa no olho, o find filtra por permissão: find . -type f -perm -u+x acha os arquivos que o dono pode executar, e find . -type f -perm 600 acha os que têm exatamente rw-------.

Em Python, stat.filemode(os.stat("contas.txt").st_mode) devolve a mesma string -rw-r-----.

Uma pegadinha: no WSL, arquivos extraídos dentro de /mnt/c (o disco do Windows) aparecem todos como rwxrwxrwx, porque o Windows não guarda essas permissões. Extraia na sua pasta do Linux (cd ~), ou veja as permissões direto no pacote com tar -tvzf pacote.tar.gz.

Aparece nestes desafios