Назад | Перейти на главную страницу

Почему я смог удалить файл, принадлежащий root, в моем домашнем каталоге, не будучи root?

Итак, сегодня я проводил некоторое обслуживание своего сервера и заметил, что смог удалить файл, принадлежащий root, в моем домашнем каталоге.

Мне удалось воспроизвести образец:

[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 20:59 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ sudo touch file-owned-by-root
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-r--r--.  1 root     root        0 Oct  5 21:00 file-owned-by-root
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ rm file-owned-by-root
rm: remove write-protected regular empty file ‘file-owned-by-root’? y
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$

Мой вопрос в том, как я смог удалить файл, принадлежащий root и имеющий разрешения -rw-r--r--, пока я не рут?

Разрешения, контент и все атрибуты являются частью inode. Имя находится в записи каталога. Разрешения не наследуются рекурсивно (кроме случаев, когда вы используете по умолчанию в списках ACL Posix).

Когда вы удаляете файл, вы просто удаляете жесткую ссылку из записи каталога на индексный дескриптор. Когда все жесткие ссылки удалены, а индексный дескриптор не используется, файловая система освободит место. Вам нужно только разрешение на запись в папку, независимо от того, какие разрешения установлены для файла (за исключением неизменяемого разрешения ext). То же самое для пустой папки.

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

Если вы владеете каталогом, вам разрешено делать с ним и его содержимым все, что угодно, в зависимости от разрешений каталога. Таким образом, несмотря на то, что вы не являетесь владельцем файла, вы все равно могли удалить его, поскольку у вас были права на чтение / запись в каталог, в котором находился файл.