Sim: motivos de compatibilidade que afetam a segurança.
Esta restrição foi deliberadamente não removida, por uma razão relatada fielmente pelo LWN.net. Remover a restrição criaria uma falha de segurança em algumas versões de fusermount
. fusermount
foi melhorado mais cedo adicionando UMOUNT_NOFOLLOW
, e isso o tornou seguro. No entanto, as versões antigas do fusermount
ainda eram bastante difundidas para serem uma preocupação.
Veja Remoção e renomeação do ponto de montagem , LWN.net 2016.
Tanto quanto eu posso dizer a partir do segmento ligado, os patches 1-3 teriam permitido mover um ponto de montagem. E então o patch 4 foi adicionado para proibi-lo: -).
Esta não é uma prova completa. No entanto, sugere que a restrição no patch 4 não foi devida a razões internas de implementação . Eu também acredito que os desenvolvedores do kernel teriam mencionado, se tivessem alguma idéia de que as expectativas do usuário teriam sido quebradas, permitindo que pontos de montagem fossem movidos.
@schily, no entanto, aponta que é algo estranho sobre permitir que os pontos de montagem sejam movidos (ou desvinculados). Parece que foi possível para permitir rename()
de um ponto de montagem. Mas apenas porque foi interpretado como renomeando o arquivo subjacente ao (s) sistema (s) de arquivos montado (s).
Seria uma exceção estranha à regra atual, que rename(oldpath, newpath)
requer que o oldpath e o newpath estejam no mesmo sistema de arquivos. Caso contrário, falhará com o EXDEV. (Na verdade, eles devem ser na mesma montagem do sistema de arquivos ).
Pensei em um pouco de estranheza extra no Linux. Se você definir o "bit imutável" do Linux no arquivo subjacente, acho que o rename () deve ser negado. Mas se você inspecionar o bit imutável no ponto de montagem, você não verá o bit imutável do arquivo subjacente! Eu espero que funcione bem, seria apenas um pouco chato se você tivesse que solucionar o problema.