Разрешение пользователю удалять файл, но не чтобы прочитать его [дубликат]

mv предполагает, что поскольку цель не был существующим каталогом, который вы хотели переместить UTMAnalysis.pdf в корневой каталог и назвать его Desktop.

Чтобы исправить эту ошибку, используйте sudo mv /Desktop ~/Desktop/UTMAnalysis.pdf

0
08.10.2016, 16:12
2 ответа

Да, это возможно. Единственное действие записи, необходимое для удаления чего-либо, - это удалить соответствующий индексный дескриптор, которому требуется разрешение на запись в родительский каталог (он определен таким образом в POSIX ).

На самом деле вам не нужно ничего менять в файле. Файл считается удаленным, если его счетчик ссылок равен 0. Счетчик ссылок равен количеству инодов, указывающих на него, плюс количество обработчиков открытых файлов этого файла. Последний будет равен 0, если файл не используется. Итак, как только вы удалите этот 1 индексный дескриптор файла (если других жестких ссылок не существует), он будет удален.

Пример:

Создайте новый каталог и cd в него:

mkdir /tmp/test
cd /tmp/test

Затем станьте root :

sudo su

Обратите внимание, что запись sudo перед следующей командой не будет работать, потому что это действие записи должно выполняться пользователем root . Пользователь, выполняющий echo , на самом деле не имеет значения.

Затем создайте новый файл, измените его права доступа и снова выйдите из корневой оболочки.

echo some content > someFile
chmod 600 someFile
exit

Позвольте вам показать содержимое каталога:

ll

Результат будет таким, только с вашим именем пользователя вместо christoph :

total 12
drwxrwxr-x  2 christoph christoph 4096 Oct  8 14:27 ./
drwxrwxrwt 13 root      root      4096 Oct  8 14:25 ../
-rw-------  1 root      root        13 Oct  8 14:27 someFile

1 последний Строка означает, что на файл указывает только 1 индексный дескриптор. Таким образом, после удаления этой 1 записи файл исчезнет, ​​если он не открыт какими-либо программами (и если это так, он исчезнет после того, как эти программы закрыли его или были завершены). Обычно это так, но не всегда. См. https://en.wikipedia.org/wiki/Hard_link для получения дополнительной информации.

Как видите, у вас нет прав на чтение и запись в этот файл, но у вас есть разрешение на запись в каталог (текущий каталог отмечен точкой (. )). Это означает, что вы можете удалить файл через

rm someFile

, но вас предупредят, что этот файл защищен от записи:

rm: remove write-protected regular file 'someFile'?

Просто введите y для «да» и нажмите Enter.

Затем файл исчез:

$ ll
total 8
drwxrwxr-x  2 christoph christoph 4096 Oct  8 14:27 ./
drwxrwxrwt 13 root      root      4096 Oct  8 14:27 ../
2
28.01.2020, 02:19

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

Таким образом, файл может быть нечитаемым и записываемым, но любой, кто может писать в его родительский каталог, сможет удалить его:

mkdir a
chmod 777 a
touch a/b
chmod 000 a/b

создает файл b в каталоге a , так что никто, кроме root , не может читать или писать b , но любой может удалить b .

(Обратите внимание, что любой может также заменить b .)

2
28.01.2020, 02:19

Теги

Похожие вопросы