Чому мені вдалося видалити файл, що належить root, у моєму домашньому каталозі, не будучи root?


40

Тому я раніше робив певне обслуговування на своєму сервері і помітив, що я міг видалити файл, що належить 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--, але я не root?


6
Ви можете видалити запис у каталозі, який вказує на файл, оскільки у вас є доступ для запису до каталогу. Ви не можете обов'язково видалити файл; файл може мати інше жорстке посилання десь в іншому місці.
користувач253751

2
Смішне розширення: ви також можете перейменувати файл або зробити міцні посилання на нього.
Peterh каже відновити Моніку

11
Будь ласка , переглянути свій вибір для загальноприйнятої відповіді, тому що струм один прямо в омані: ви НЕ дозволили зробити що - небудь , щоб він мураха вмісту в ньому на підставі дозволів самого каталогу .
Cthulhu

@Cthulhu Готово! Дякуємо всім за всі коментарі до цього запитання, безумовно, багато корисної інформації тут!
Карл Беннетт

Відповіді:


34

Дозволи, вміст і всі атрибути є частиною inode. Назва знаходиться у записі каталогу. Дозволи не успадковуються рекурсивно (за винятком випадків, коли ви використовуєте за замовчуванням у Posix ACL).

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

Коли ви видаляєте папку, яка не порожня, вам потрібно дозволити на запис папки, яку ви видаляєте, та її батьківського пристрою.


1
Отже, дозволи знаходяться на inode, або дозволи є на посилання на inode, і я просто видаляю це посилання (і, таким чином, видаляється єдине посилання на нього, тож inode припиняє своє існування)?
Карл Беннетт

3
Дозвіл знаходиться на inode. Це легко перевірити, створивши жорстке посилання на файл, змінивши дозволи на нього, а потім перевіривши дозволи на оригінал.
Wouter Verhelst

але скажімо, що в ній є каталог і файл, що належать до root, при цьому каталог знаходиться у каталозі, що належить користувачеві. Ви б тоді не змогли їх видалити, правда?
njzk2

1
Це атрибут, специфічний для ext2, ext3 та ext4. Приклад: sudo touch test_file;sudo chattr +i test_file;rm -f test_fileДив.:man chattr
Мірча Вутковичі

1
Незмінний атрибут захищає файл від будь-яких змін навіть від root.
Мірча Вутковичі

19

Коли ви володієте каталогом, вам дозволяється робити що-небудь з ним і вміст у ньому, виходячи з дозволів каталогу. Тому, незважаючи на те, що не володієте файлом, ви все-таки змогли його видалити, оскільки ви прочитали / записували дозвіл до каталогу, в якому знаходився файл.


46
Не зовсім. Наприклад, ОП не зможе змінити цей кореневий файл. Справа в тому, що видалення файлу не вважається операцією над файлом, а скоріше над каталогом (видалення вказівника на файл), і тому дозволи в каталозі мають значення.
Cthulhu

1
@Cthulhu, щоб ви могли видалити файл, що належить корінню, і створити новий модифікований файл з такою ж назвою після?
KDEx

3
@Morgoroth Так, ви могли, але це вже не той самий файл. Для іншого (можливо, більш очевидного) прикладу, ви б не змогли прочитати файл у вашому каталозі, якби він належав до кореня, і читати його міг лише його власник.
Cthulhu

@inetknght Це слід уточнити. Я розумію, що ви намагаєтесь позначати маніпулювання самими файлами як сутностями, але це не ясно. Наприклад, ви не в змозі змінювати його вміст. І ви не згадуєте атрибути, які можуть козирно дозволити каталог.
Майк S

1
@captcha Це тому, що viфайл зберігає спочатку у тимчасовій копії, потім видаляє оригінальний файл і перейменовує копію в оригінал (або щось подібне).
Cthulhu
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.