Предположим, что у Вас есть разрешение записать в файл, но не удалить его.
О каких правах мы говорим?
Считать и записать права?
Для записи в существующий файл, Вы должны записать полномочия для того файла.
Для удаления файла, Вы должны записать разрешение для папки, которая содержит тот файл.
Ответ Florian не совсем завершен в моей системе: Я должен и записать и выполнить разрешение на каталоге для удаления файла в нем.
Демонстрационная сессия:
Я выполняю хорошо закаленный Debian с ext4 файловой системой. Я создаю каталог с файлом в нем и затем изменяю каталог и полномочия файла, прежде чем я попытаюсь удалить файл.
Файловая система ext4:
testuser@www:~$ df -T .
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/sda3 ext4 152326340 44429904 100196624 31% /
Давайте создадим каталог и файл в нем:
testuser@www:~$ mkdir d
testuser@www:~$ ls -ld d
drwxr-xr-x 2 testuser testuser 4096 May 21 16:19 d
testuser@www:~$ echo kjhkjh > d/f
testuser@www:~$ ls -l d/f
-rw-r--r-- 1 testuser testuser 7 May 21 16:19 d/f
Ожидаемый: не Может изменить каталог файла без разрешения записи на нем:
testuser@www:~$ chmod 100 d && ls -ld d
d--x------ 2 testuser testuser 4096 May 21 16:19 d
testuser@www:~$ rm d/f
rm: cannot remove 'd/f': Permission denied
Неожиданный: не Может измениться каталог файла без выполняют разрешение на нем:
testuser@www:~$ chmod 200 d && ls -ld d
d-w------- 2 testuser testuser 4096 May 21 16:19 d
testuser@www:~$ rm d/f
rm: cannot remove 'd/f': Permission denied
Я должен и записать и выполнить разрешение на нем:
testuser@www:~$ chmod 300 d && ls -ld d
d-wx------ 2 testuser testuser 4096 May 21 16:19 d
testuser@www:~$ rm d/f
Как в стороне: Когда файл (но не каталог) защищается от записи rm
просит разрешение перед удалением. В конце концов, удаление файла можно считать экстремальной формой записи в него. Нет никакого различия в потерянных данных между echo -n "" > d/f
и rm d/f
в общем падеже, что нет никакого другого hardlink в файл.
testuser@www:~$ !echo
echo kjhkjh > d/f
testuser@www:~$ chmod 700 d && ls -ld d
drwx------ 2 testuser testuser 4096 May 21 16:21 d
testuser@www:~$ chmod 000 d/f && ls -l d/f
---------- 1 testuser testuser 7 May 21 16:21 d/f
testuser@www:~$ rm d/f
rm: remove write-protected regular file 'd/f'? y
testuser@www:~$ ls -l d
total 0
testuser@www:~$