Sistemas unix antigos permitiam que qualquer usuário colocasse seus próprios arquivos em qualquer destino. A maioria não faz mais, porque isso criou alguns problemas de segurança:
-
Se houver cotas de uso de disco no lugar, o usuário A poderia armazenar arquivos sob despesa do usuário, colocando-os em um diretório privado. O usuário B nunca saberia, exceto comparando o uso de disco visível com suas cotas e não teria como encontrar o ladrão de cotas.
-
Alguns programas privilegiados (definir executáveis ou daemons) supõem que, se um arquivo pertencer a um usuário, esse usuário aprovou o conteúdo. Se o usuário A pudesse enviar um arquivo para o usuário B, A poderia induzir o programa privilegiado a aceitar quaisquer dados. (Este é um projeto inseguro de qualquer maneira, porque mesmo que A tenha realmente escrito o arquivo, A pode não tê-lo aprovado para essa finalidade específica; mas tais programas existem, e proibir chowns reduz os riscos.)
-
Um chown de um usuário não-root não pode ser desfeito. Mente, é um risco que você pode viver (e de fato há outras coisas que você pode fazer em um sistema de arquivos unix que só pode ser desfeito se algum outro usuário cooperar).
Até onde eu sei, é impossível mudar a propriedade de um arquivo na maioria dos sistemas unix modernos sem a cooperação do root. Raiz poderia executar o chown ou dar a A ou B a permissão para fazê-lo via sudo, mas isso requer uma intervenção de raiz mais direcionada do que normalmente é desejável.
Se as ACLs estiverem ativadas, como você observou, isso dá a maior parte dos efeitos práticos do chowning.
Se o fluxo de trabalho realmente exigir que A seja o proprietário em algum momento e B seja o proprietário em algum outro ponto, há outras opções que você pode explorar.
-
B pode usar o fakeroot para executar um programa e fazê-lo acreditar que ele está sendo executado como root, o que permite uma chown simulado que existe apenas na memória do fakeroot (
fakeroot sh -c 'chown B file; su B -c program'
). -
Você pode jogar truques com o FUSE. Por exemplo, bindfs permite criar uma visão de uma árvore de diretórios onde os arquivos têm um proprietário diferente (
mkdir view_for_B; bindfs -u B actual_directory view_for_B
).