Como removo o subdiretório de outra pessoa do meu diretório?

3

Eu estava compartilhando arquivos com um colega de trabalho em um servidor Linux e ele adicionou alguns arquivos novos. Agora nós movemos os arquivos para outro lugar, então eu gostaria de remover os arquivos antigos. No entanto, quando meu colega de trabalho adicionou seus arquivos, o software que usamos criou novos subdiretórios de propriedade da conta dele, e não consigo encontrar o comando correto para removê-los.

$ ls -a
total 20
drwxrwxr-x 5 markpasc markpasc 4096 Sep 20 09:48 ./
drwxrwxr-x 3 markpasc markpasc 4096 Sep 20 09:48 ../
drwxr-xr-x 2 coworker coworker 4096 Sep 16 14:07 82/
drwxr-xr-x 2 coworker coworker 4096 Sep 16 14:07 c4/

Eu tentei:

$ rm -rf 82
rm: cannot remove '82/b7fc78bc548537f3ea235026b7322fe3bea91f': Permission denied
$ rm -f 82/b7fc78bc548537f3ea235026b7322fe3bea91f
rm: cannot remove '82/b7fc78bc548537f3ea235026b7322fe3bea91f': Permission denied
$ rmdir 82/
rmdir: 82/: Directory not empty
$

Eu sei que normalmente eu posso remover um arquivo que outra pessoa possui no meu diretório:

$ ls -a
total 8
drwxrwxr-x  2 markpasc markpasc 4096 Sep 20 10:13 ./
drwxr-xr-x 24 markpasc markpasc 4096 Sep 20 10:13 ../
-rw-rw-r--  1 someuser someuser    0 Sep 20 10:13 file
$ rm file
rm: remove write-protected regular empty file 'file'? y
$ ls file
ls: file: No such file or directory
$

Existe uma maneira de remover esses diretórios, ou meu colega de trabalho (ou raiz) precisa removê-los?

    
por markpasc 20.09.2010 / 19:19

1 resposta

4

Para remover um diretório, você precisa de duas coisas: acesso de gravação ao diretório pai e que o diretório esteja vazio. Então seu colega de trabalho, ou raiz, tem que cooperar. Esta é uma limitação do modelo de permissão unix.

Para um melhor fluxo de trabalho quando uma árvore de diretórios é gravável por mais de um usuário, você pode usar listas de controle de acesso (se suportadas) ou diretórios setgid.

  • Com as ACLs, conceda acesso de gravação ao diretório a quem quer que seja e defina a ACL padrão para também conceder acesso de gravação, para que os arquivos e subdiretórios recém-criados herdem as permissões desejadas. Os usuários podem substituir esses padrões, mas, desde que cooperem passivamente, as permissões ficarão bem.

    setfacl -m user:coworker:rwx .
    setfacl -d -m user:coworker:rwx .
    
  • Se você não tiver ACLs, poderá conceder acesso de gravação a um grupo e definir o bit setgid no diretório. Isso faz com que arquivos e subdiretórios recém-criados pertençam ao grupo em questão, em vez do grupo padrão do processo de criação. No entanto, ainda cabe aos usuários conceder permissão de gravação de grupo aos novos arquivos e diretórios (isso acontece automaticamente somente se eles tiverem umask 002 ).

    chgrp mygroup .
    chmod g+ws .
    

Você pode estar interessado em esta discussão sobre por que as coisas funcionam dessa maneira .

    
por 20.09.2010 / 23:17