Мне нужно было заменить файл моей почты очищенной версией (вся почта на этом компьютере отслеживает задания 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
Я думаю, это потому, что когда вы перемещаете или удаляете файл, важными разрешениями являются разрешения родительского каталога. Поскольку перемещение файла означает создание копии файла и удаление оригинала, вам понадобятся соответствующие разрешения для каталога, чтобы иметь возможность сделать это. В этом случае добавление вашего пользователя в почтовую группу даст вам эти необходимые разрешения.