Перемещение и удаление файлов в папках setguid

Перемещение и удаление файлов в папках setguid

Мне нужно было заменить файл моей почты очищенной версией (вся почта на этом компьютере отслеживает задания cron, поэтому нет причин не удалять почту старше 'n' дней).

Файл имеет разрешения на чтение/запись для моей учетной записи пользователя, без прав для любого другого пользователя или группы. Его групповое владение — mail group, поскольку бит setguid установлен на /var/spool/mail.

Я не был членом почтовой группы.

drwxrwsr-x 2 root mail 4096 2 сен 15:17 .
drwxr-xr-x 14 root root 4096 10 мая 09:27 ..
-rw------- 1 myuser mail 219722 2 сен 04:56 myuser

Я не мог переместить или удалить этот файл, пока не стал участником почтовой группы.

У меня вопрос: «Почему?». Почему, делая меня, у которого есть разрешение и на чтение, и на запись этого файла, членом группы, у которой нет ни того, ни другого, я получу разрешение на его перемещение и удаление?

решение1

Это связано с тем , что rm, mv(и подобные) подразумевают изменение структуры каталогов, и если у вас нет wразрешения на запись ( ) в этот каталог, вы не сможете этого сделать.

Это не имеет значения для разрешения соответствующего файла, вам нужно только достаточное разрешение на родительский каталог. Обратите внимание, что операция rmна самом деле является unlink(2)системным вызовом, который просто отсоединит файл от сопоставления файла-инод каталога. При выполнении mv-ing в той же файловой системе rename(2)выполняется , который сопоставит инод файла с новым каталогом.

Как видите, все это требует изменения родительского каталога, независимо от собственных разрешений файла, поэтому вам необходимо wразрешение на каталог для переименования/удаления/создания новых файлов.

Теперь, когда для каталога установлен бит SETGID, все файлы в этом каталоге будут принадлежать одной и той же группе — группе владельцев этого каталога.

В вашем случае /var/spool/mailвладельцем каталога является группа root:mailс правами доступа 775и установленным битом STDGID, в результате чего все файлы в этом каталоге будут принадлежать одной и той же группе, mail.

Таким образом, если вы хотите переименовать/удалить, myfileвам необходимо иметь достаточные права доступа к /var/spool/mailкаталогу, либо быть root, либо быть членом группы mail, разрешение на myfileздесь не имеет значения, как объяснялось ранее.

решение2

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

Связанный контент