O proprietário de um diretório pode alterar o conteúdo do diretório da maneira que quiser. Mesmo que haja um arquivo no diretório que não seja permitido ao proprietário do diretório gravar, o proprietário do diretório poderá remover esse arquivo e criar um novo arquivo com o mesmo nome.
Mais geralmente, se você tiver permissão de gravação em um diretório, poderá remover e criar arquivos nesse diretório. Assim, você pode alterar os arquivos nesse diretório, não escrevendo para eles se não tiver permissão de gravação no arquivo, mas excluindo o arquivo existente e criando um novo arquivo com o mesmo nome.
Se você possui um diretório parent
e ele contém um subdiretório child
de propriedade de root e você não tem permissão de gravação em child
, não é possível modificar arquivos em child
. No entanto, você pode renomear child
e criar um novo subdiretório chamado child
, que será de sua propriedade e, portanto, poderá conter o que você quiser.
É por isso que verificações de segurança que verificam o controle de arquivos (por exemplo, as verificações de integridade que o OpenSSH faz em arquivos de chaves privadas) verificam toda a cadeia de diretórios até a raiz. Da mesma forma, se você der a um usuário sudo direitos para executar um arquivo, todo o caminho para o arquivo deve ser controlado por root. Por exemplo, não conceda a um usuário sudo direitos para executar um programa que esteja em seu diretório pessoal. (Por outro lado, um programa raiz setuid em qualquer lugar é bom, porque o setuid é anexado ao próprio arquivo, não ao seu caminho.) Qualquer um que controle qualquer etapa intermediária no caminho do diretório pode substituir seu próprio conteúdo, não editando arquivo, mas renomeando um diretório no ponto no caminho.