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

12
$ touch testfile
$ chmod g+w testfile
$ sudo adduser user2 user1
$ stat -c'%a %A' testfile
664 -rw-rw-r--
$ su user2
Password: 
$ groups
user2 user1
$ rm testfile 
rm: cannot remove `testfile': Permission denied

Чего не хватает?

tshepang
источник

Ответы:

22

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

Сначала это может показаться странным, пока вы не подумаете о том, как работает файловая система. Файл - это просто индекс, а каталог ссылается на индекс. Удаляя его, вы просто удаляете ссылку на индекс этого файла в каталоге. Таким образом, вы меняете каталог, а не файл. У вас может быть жесткая ссылка на этот файл в другом каталоге, и вы все равно сможете удалить его из первого каталога без фактического изменения самого файла, он все равно будет существовать в другом каталоге.

jsbillings
источник
Я получаю 775 drwxrwxr-xза каталог.
чепанг
1
Какова групповая собственность на каталог? Помните, что вторая 7, которую вы упомянули, - это разрешение группы каталога, а не группы вашего пользователя.
Jsbillings
1
ls -ld /path/to/directoryили просто, ls -ld .если вы уже перешли в этот каталог.
Jsbillings
1
по какой-либо причине stat не может найти идентификатор группы 1002. stat ищет идентификатор группы в / etc / group, NIS, LDAP и т. д., и получает ошибку, поэтому вы видите UNKNOWN. Я бы попробовал запустить, getent group 1002чтобы увидеть, если это даст вам более подробную ошибку.
Jsbillings
1
На самом деле, я не нахожу это поведение запутанным вообще. Он идентичен действительному «реальному» каталогу, поэтому его называют «каталогом», а не, например, «папкой», который будет вести себя совершенно иначе. Если я хочу удалить кого-то из моего телефонного справочника, я не иду к ней домой и не убиваю ее, я просто беру ручку и набираю ее номер. IOW: мне нужен доступ для записи в каталог, и нет доступа к ней. В Windows есть папки, в Unix есть каталоги, и они ведут себя как их реальные аналоги. Путаница случается, только если вы их перепутаете.
Йорг Миттаг
0

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

Дэвид Шварц
источник