Привилегированный доступ к файлам и каталогам на самом деле определяется возможностями, а не просто существованием root
или нет. На практике root
обычно имеет все возможные возможности, но есть ситуации, когда все / многие из них могут быть отброшены, или некоторые могут быть переданы другим пользователям (их процессам).
Вкратце, вы уже описали, как проверки контроля доступа работают для привилегированного процесса. Вот как на это влияют различные возможности:
Основная возможность здесь -CAP_DAC_OVERRIDE
это процесс, который может «обходить проверку прав чтения, записи и выполнения файлов». Это включает в себя чтение и запись в любые файлы, а также чтение, запись и доступ к каталогам.
На самом деле это не относится к исполняемым файлам, которые не помечены как исполняемые. Комментарий вgeneric_permission
( fs/namei.c
), до проверки прав доступа к файлам, говорит , что
ЦАПы чтения / записи всегда могут быть переопределены. Исполняемые ЦАПы могут быть переопределены, когда установлен хотя бы один бит exec.
И код проверяет, что установлен хотя бы один x
бит, если вы пытаетесь выполнить файл. Я подозреваю, что это только удобная функция, предотвращающая случайный запуск случайных файлов данных и получение ошибок или странных результатов.
В любом случае, если вы можете переопределить разрешения, вы можете просто сделать исполняемую копию и запустить ее. (Хотя в теории это может иметь значение для файлов setuid процесса, он мог переопределять права доступа к файлам ( CAP_DAC_OVERRIDE
), но не имел других связанных возможностей ( CAP_FSETID
/ CAP_FOWNER
/ CAP_SETUID
). Но с CAP_DAC_OVERRIDE
возможностью редактирования /etc/shadow
и тому подобного, поэтому он примерно равен в любом случае просто иметь полный root-доступ.)
Также есть 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 сопоставляет root никому
- ПРЕДОХРАНИТЕЛЬ, который, я полагаю, мог сделать что угодно
- монтируемые только для чтения
- устройства только для чтения
capabilities(7)
справочной странице - рассмотрите возможность сообщения об ошибке!