Привілейований доступ до файлів і каталогів насправді визначається можливостями, а не лише наявністю rootчи ні. На практиці, rootяк правило, є всі можливі можливості, але бувають ситуації, коли всі / багато з них можуть бути відкинуті, або деякі передані іншим користувачам (їхні процеси).
Якщо коротко, ви вже описали, як перевірки контролю доступу працюють на привілейований процес. Ось як різні можливості насправді впливають на це:
Основна можливість тут полягаєCAP_DAC_OVERRIDE в тому , що процес, який має в ньому, може "обходити читання, запис файлів і виконання перевірок файлів". Це включає читання та запис у будь-які файли, а також читання, запис та доступ до каталогів.
Насправді це не стосується виконання файлів, які не позначені як виконувані. Про це йдеться в коментаріgeneric_permission ( fs/namei.c) перед тим, як перевірити доступ до файлів
Читання / запис ЦАПів завжди можна замінити. Виконані DAC-адреси перезаписуються, коли є щонайменше один біт exec.
І код перевіряє наявність принаймні одного xбіта, якщо ви намагаєтеся виконати файл. Я підозрюю, що це лише зручна функція, щоб запобігти випадковому запуску випадкових файлів даних та отримання помилок або незвичайних результатів.
У будь-якому випадку, якщо ви можете змінити дозволи, ви можете просто зробити виконувану копію та запустити її. (Хоча це може змінити теорію для встановлених файлів процесу, здатних змінити права доступу до файлів ( CAP_DAC_OVERRIDE), але не мали інших пов'язаних можливостей ( CAP_FSETID/ CAP_FOWNER/ CAP_SETUID). Але, маючи CAP_DAC_OVERRIDEможливість редагування /etc/shadowта подібних матеріалів, це приблизно однаково просто мати повний доступ до кореня.)
Є також CAP_DAC_READ_SEARCHможливість, яка дозволяє читати будь-які файли та отримувати доступ до будь-яких каталогів, але не виконувати та записувати їх; і CAP_FOWNERце дозволяє процесу робити речі, які зазвичай зарезервовані лише для власника файлу, як-от зміна бітів дозволу та групи файлів.
Переосмислення липкого біта в каталогах згадується лише під CAP_FOWNER, тому, здається, цього CAP_DAC_OVERRIDEбуло б недостатньо, щоб ігнорувати це. (Це дасть вам дозвіл на написання, але зазвичай у клейких каталогах у вас це все-таки є і +tобмежує.)
(Я думаю, що тут спеціальні пристрої вважаються "файлами". Принаймні, generic_permission()є лише перевірка типу каталогів, але я не перевіряв поза цим ".)
Звичайно, все ж є ситуації, коли навіть можливості не допоможуть вам змінити файли:
- деякі файли
/procі /sys, оскільки вони насправді не фактичні файли
- SELinux та інші модулі захисту, які можуть обмежувати root
chattrнезмінні +iта додавати лише +aпрапори на ext2 / ext3 / ext4, обидва вони зупиняють навіть root, а також запобігають перейменуванню файлів тощо.
- мережевих файлових систем, де сервер може здійснювати власний контроль доступу, наприклад,
root_squashв NFS карти нікому не кореняться
- FUSE, який, я думаю, міг би зробити все, що завгодно
- кріплення лише для читання
- пристрої лише для читання
capabilities(7)головній сторінці - розгляньте можливість подання звіту про помилку!