Tendo trabalhado com Linux há anos e me encontrando com algum tempo livre, decidi revisar alguns conceitos básicos. Então, reli as coisas sobre permissões (sem verificar o código-fonte) e seus casos especiais para pastas, e criei uma nova maneira (pelo menos para mim ...) de pensar em permissões de pasta (para um usuário específico / group / others): imagino uma pasta como uma tabela com duas colunas, assim:
filename | inode
foo | 111
bar | 222
A permissão de leitura significa que você pode ler (e listar) a coluna esquerda da tabela, a permissão de gravação corresponde à adição e remoção de entradas na tabela e a permissão de execução corresponde à capacidade de converter do nome do arquivo para o inode; ou seja, você pode acessar o conteúdo da pasta.
Fiz algumas experiências e todos os resultados são consistentes com essa "visão de mundo" minha, mas uma conclusão parece inevitável: que uma pasta com permissões d-w-------
é totalmente inútil. Elaboração: você não pode listar seu conteúdo, não pode ler nenhum arquivo que você conheça (porque não pode traduzir nomes em inodes), não pode remover ou renomear ou adicionar arquivos, porque novamente isso implicaria tradução , e você nem pode adicionar links físicos (porque, suponho, isso significaria adicionar um nome e um número de inode, o que significa que você conheceria os dois, o que, por sua vez, suponha que viola o objetivo de desabilitar a permissão de execução) . E, claro, se não são arquivos dentro de uma tal pasta, então você não pode excluir essa pasta também, porque você não pode excluir seu conteúdo.
Então ... eu gostaria de fazer duas perguntas:
- Esta analogia minha está correta ou é um grande erro?
- Independentemente da resposta anterior, existe alguma situação em que é apropriado ter uma pasta com permissões conforme descrito?
mkdir foo ; chmod 200 foo ; touch foo/bar
eu chego touch: cannot touch ‘foo/bar’: Permission denied
. Isso acontece mesmo se foo / bar já existir. Estou testando no bash (Arch Linux).