Diretórios imutáveis no Linux

3

Estou procurando entender como um diretório com o conjunto de bits imutáveis se comporta no Linux. É simples com arquivos, mas a natureza dos diretórios tendo dois lados para si mesmos - os próprios diretórios e seu conteúdo - torna-o mais confuso. Digamos que eu tenha um diretório com esta aparência:

${ROOT}/
    build/
    config/
    src/
    Makefile
    README

Os bits imutáveis podem ser usados de forma a tornar ${ROOT} , ${ROOT}/build , ${ROOT}/config , ${ROOT}/src , ${ROOT}/Makefile e ${ROOT}/README somente leitura (ou seja, permissões, proprietários , atributos estendidos e nomes não podem ser alterados nem arquivos / diretórios podem ser excluídos ou adicionados) EXCETO esses arquivos e diretórios que podem ser livremente adicionados, removidos e modificados em ${ROOT}/build e ${ROOT}/config ? Eu imagino que isso poderia ser alcançado executando chattr -R +i ${ROOT}; chattr -R -i ${ROOT}/build ${ROOT}/config ou chattr -R +i ${ROOT}; chattr -R -i ${ROOT}/build/* ${ROOT}/config/* , mas o comportamento dos diretórios nessa frente é ambíguo para mim. Um caso de uso potencial para isso seria se um administrador quiser deixar o código-fonte, o makefile, o README e a estrutura de diretório de nível superior deste projeto inalteráveis por outros usuários, enquanto ainda permite que eles construam nele.

    
por Melab 13.09.2016 / 06:18

1 resposta

2

Para fins de controle de acesso, o conteúdo de um diretório são os nomes de arquivo contidos nele. Para adicionar, excluir ou renomear arquivos, é necessário o acesso de gravação ao diretório. (E para listar os nomes dos arquivos, é necessário acesso de leitura.) Além disso, há o bit adesivo ( +t ) para os diretórios, que limita ainda mais a remoção do arquivo ao proprietário do arquivo e ao proprietário do diretório. IOW, ele impede a remoção de arquivos pertencentes a outros, mesmo que você tenha acesso de gravação ao diretório e possa modificar seu conteúdo.

Quanto às permissões, apenas o proprietário pode alterá-las, e o proprietário de um arquivo só pode ser alterado por root. Acho que a edição de atributos estendidos está vinculada ao acesso de gravação, então você não pode proibir isso separadamente.

Quanto aos seus requisitos, se eu entendi corretamente, você deseja permitir a criação de arquivos dentro de ${ROOT}/build e ${ROOT}/config , mas não em outros diretórios em ${ROOT} . Isso seria feito simplesmente por:

chmod a+rX -R ${ROOT}
chmod o-w -R ${ROOT}
chmod o+w -R ${ROOT}/build ${ROOT}/config
# chmod +t -R ${ROOT}/build ${ROOT}/config

Não há realmente necessidade de usar o bit imutável aqui, é específico do sistema de arquivos e limita todos os usuários igualmente, incluindo o proprietário e o root.

No entanto, se as compilações ocorrerem dentro de ${ROOT}/build , ainda há o problema de vários usuários não conseguirem trabalhar sem atropelar os arquivos uns dos outros. Para trabalhar contra isso, você poderia modificar o sistema de compilação para suportar a criação de compilações em diretórios de saída arbitrários ou apenas permitir que cada usuário faça sua própria cópia da árvore de origem e a compile em seus diretórios iniciais.

    
por 13.09.2016 / 20:21