Movendo e excluindo arquivos em pastas setguid

Movendo e excluindo arquivos em pastas setguid

Eu precisava substituir meu arquivo de e-mail por uma versão limpa (todos os e-mails nesta máquina monitoram tarefas cron - portanto, não há razão para não excluir e-mails com mais de 'n' dias).

O arquivo tem permissões de leitura/gravação para minha conta de usuário, sem direitos para qualquer outro usuário ou grupo. A propriedade do grupo é mail group porque o bit setguid está definido em /var/spool/mail.

Eu não era membro do grupo de e-mail.

drwxrwsr-x 2 root mail 4096 2 de setembro 15:17 .
drwxr-xr-x 14 root root 4096 10 de maio 09:27 ..
-rw------- 1 meu usuário email 219722 2 de setembro 04:56 meu usuário

Não consegui mover ou excluir este arquivo até me tornar membro do grupo de e-mail.

Minha pergunta é 'Por quê?'. Por que me tornaria, quem demonstra ter permissão para ler e gravar este arquivo, um membro de um grupo que não me dá permissão para movê-lo e excluí-lo?

Responder1

Isso ocorre porque rm, mv(e similares) envolvem a modificação da estrutura de diretórios e, a menos que você tenha wpermissão de gravação ( ) nesse diretório, você não pode fazer isso.

Isso é irrelevante para a permissão do arquivo relevante; você só precisa de permissão suficiente no diretório pai. Observe que a rmoperação é na verdade a unlink(2)chamada do sistema, que apenas desvinculará o arquivo do mapeamento arquivo-inode do diretório. Enquanto mv-ing dentro do mesmo sistema de arquivos, rename(2)é executado o que mapeará o inode do arquivo no novo diretório.

Então, como você pode ver, tudo isso requer a modificação do diretório pai, independentemente da permissão do próprio arquivo, então você precisa de wpermissão no diretório para renomear/remover/criar novos arquivos.

Agora, quando o bit SETGID é definido em um diretório, todos os arquivos desse diretório pertencerão ao mesmo grupo, o grupo proprietário desse diretório.

No seu caso, /var/spool/mailo diretório pertence a root:mailcom permissão 775, com o bit STDGID definido, o que fará com que todos os arquivos neste diretório pertençam ao mesmo grupo, mail.

Da forma como está, se você deseja renomear/remover, myfilevocê precisa de permissão suficiente no /var/spool/maildiretório, seja ele rootou um membro do mailgrupo, a permissão myfileé irrelevante aqui, conforme explicado anteriormente.

Responder2

Acho que isso ocorre porque quando você move ou exclui um arquivo, as permissões importantes são as permissões do diretório pai. Como mover um arquivo significa criar uma cópia do arquivo e excluir o original, você precisaria da permissão correta no diretório para poder fazer isso. Nesse caso, adicionar seu usuário ao grupo de e-mail lhe daria as permissões necessárias.

informação relacionada