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,dpasta (directory),latalho (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 ex(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.
Três consequências práticas:
- A extensão não faz um programa.
backup.shsemxnão roda (dá Permission denied); um arquivo sem extensão e comxroda. Para rodar um programa da pasta atual, escreva./ordenha(o./quer dizer "este aqui, desta pasta"). Leia antes comcat: rodar script baixado sem ler é como assinar papel sem ler. - O
chmodmuda as permissões.chmod +x backup.shliga ox;chmod 600 contas.txtdeixa só o dono ler e alterar. Nos números, cada trio somar=4,w=2 ex=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.