3

Я делился файлами с коллегой на сервере Linux, и он добавил несколько новых файлов. Теперь мы переместили файлы куда-то еще, поэтому я хотел бы удалить старые файлы. Однако, когда мой коллега добавил свои файлы, используемое нами программное обеспечение создало новые подкаталоги, принадлежащие его учетной записи, и я не могу найти совершенно правильную команду для их удаления.

$ 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/

Я старался:

$ 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
$

Я знаю, что обычно я могу удалить файл, принадлежащий кому-то еще, из моего каталога:

$ 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
$

Есть ли способ удалить эти каталоги самостоятельно, или мой коллега (или root) должен удалить их?

1 ответ1

4

Чтобы удалить каталог, вам нужны две вещи: доступ на запись в родительский каталог и чтобы этот каталог был пустым. Таким образом, ваш коллега, или root, должен сотрудничать. Это ограничение модели разрешений Unix.

Для улучшения рабочего процесса, когда дерево каталогов доступно для записи нескольким пользователям, вы можете использовать списки контроля доступа (если они поддерживаются) или каталоги setgid.

  • С помощью списков ACL предоставьте доступ на запись к каталогу тому, кто его должен иметь, и установите ACL по умолчанию, чтобы также предоставить доступ на запись, чтобы вновь созданные файлы и подкаталоги наследовали нужные разрешения. Пользователи могут переопределить эти значения по умолчанию, но до тех пор, пока они будут пассивно взаимодействовать, разрешения будут в порядке.

    setfacl -m user:coworker:rwx .
    setfacl -d -m user:coworker:rwx .
    
  • Если у вас нет ACL, вы можете предоставить доступ на запись для группы и установить бит setgid в каталоге. Это приводит к тому, что вновь созданные файлы и подкаталоги принадлежат рассматриваемой группе, а не группе по умолчанию в процессе создания. Тем не менее, пользователи по-прежнему должны давать групповым разрешениям на запись новые файлы и каталоги (это происходит автоматически, только если у них есть umask 002).

    chgrp mygroup .
    chmod g+ws .
    

Вы можете быть заинтересованы в этой теме о том, почему все так работает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .