Dado um usuário não root "joshua", como root, criei um arquivo chamado "foo" no diretório inicial do joshua (/ home / johsua /); fica assim:
-rw-r--r-- 1 root root 0 12-19 21:00 foo
e exclua-o como joshua, eu posso excluí-lo com sucesso.
Eu esperaria que joshua não tenha permissão suficiente para excluí-lo. É algum tipo de 'herança de permissões'? Minha plataforma é o Debian 5.0.7.
sudo
ou com outro escalonamento de privilégios. Você provavelmente ignorou alguma coisa.Respostas:
O usuário não excluiu o arquivo, o sistema o fez. O usuário apenas removeu o arquivo de seu próprio diretório. O sistema excluiu o arquivo porque sua contagem de referência caiu para zero. Por acaso, o usuário que remove o arquivo do diretório reduziu sua contagem de referência para zero. (Se o arquivo tiver sido vinculado a outro diretório ou se um identificador tiver sido aberto, ele não será excluído.)
O sistema exclui arquivos automaticamente quando a contagem de referência cai para zero. O proprietário do arquivo não importa. Existem várias maneiras de alguém que não seja o proprietário de um arquivo reduzir a contagem de referência para zero.
A remoção de um arquivo de um diretório (chamado de 'desvinculação') é uma operação no diretório. Desvincular um arquivo reduz sua contagem de referências.
Da mesma forma, um usuário que não seja o proprietário pode fechar o último identificador em um arquivo que não esteja vinculado a nenhum diretório. Fechar esse identificador excluiria o arquivo também, pois novamente a contagem de referência cairia para zero.
fonte
rm
comando atrapalha um pouco as águas, porquerm
é uma abreviação de "remove", e os usuários são treinados para pensarrm
como uma operação "delete". Muitos usuários usamrm
todos os dias sem ter consciência de que a operação realmente executada é um "desvincular", não uma "excluir". Como resultado, não deve ser realmente surpreendente que muitos usuários achem esse comportamento surpreendente quando o encontrarem pela primeira vez.rm
comando de fato remove um arquivo ou diretório de um diretório. É pior no Windows, onde o comando é chamadodel
, porque costumava excluir um arquivo, mas em máquinas Windows modernas (desde o NT4), também é uma operação de desvinculação.Primeiro palpite: para excluir um arquivo, você precisa de permissões de gravação na pasta que o contém. Então tente / home / johsua / foo / bar, dê 755 para foo e 644 para bar.
fonte