
У меня возникли проблемы с поиском информации о том, что на самом деле означают разрешения для блочных устройств. Что означает разрешение на чтение для блочных устройств? Означает ли это, что я не могу делать что-то вроде hexdump? А как насчет разрешения на запись? Или выполнения?
И, кроме того, что если у вас есть разрешение на монтирование на устройстве, то вы даете пользователю разрешение sudo на монтирование только этого конкретного устройства, но не разрешения r,w или x на устройстве. Что тогда произойдет?
решение1
Для простых случаев (когда вы обращаетесь к устройству как к файлу) это так, как написал @Jasen:
- Разрешение на чтение позволяет выполнять чтение с устройства (создание дампа, работа
fsck
в режиме только для чтения и т. д.) - Разрешение на запись позволяет производить запись на устройство (перезапись изображением и т. д.)
- Оба разрешения необходимы для запуска
fsck
,tune2fs
, и т.д., которые должны читатьиизменить файловую систему. - Разрешение на выполнение игнорируется. Если вы попытаетесь выполнить файл устройства, вы получите сообщение «Отказано в доступе», даже если блочное устройство содержит допустимый исполняемый код.
Если вы root, то обычно получаете CAP_DAC_READ_SEARCH
иCAP_DAC_OVERRIDE
возможности, что означает, что флаги разрешений полностью игнорируются.
Дляioctl-выводыэто сложнее:
Чтобы выполнить ioctl, вам необходимо иметь возможностьоткрытьфайл, а это значит, что вам как минимум необходимо разрешение на чтение или запись.
Все остальное зависит от драйвера. Некоторые драйверы устройств проверяют только возможности вроде CAP_SYS_RAWIO
или CAP_SYS_ADMIN
, некоторые используют разрешение на чтение для «безвредных» ioctl, которые только предоставляют информацию, и разрешение на чтение и запись для других ioctl. Драйвер устройства может использовать разрешение на выполнение для проверки разрешения ioctl, но я не знаю ни одного драйвера, который бы это делал.
Дляустанавливатьэто легче:
Системный mount
вызов проверяет только две вещи:
- Вам нужно уметьдостигатьфайл устройства. Это означает, что все каталоги на пути к файлу устройства должны иметь как минимум установленный бит разрешения на выполнение (или у вас должна быть такая
CAP_DAC_READ_SEARCH
возможность). - Вам необходимо иметь
CAP_SYS_ADMIN
возможность (которую вы, опять же, обычно получаете, будучи пользователем root)
Биты разрешений самого файла устройства полностью игнорируются при монтировании и никак не влияют на доступ к смонтированной файловой системе.
С использованиемсудозапускает исполняемую программу как root со всеми доступными возможностями, что означает, что все проверки прав доступа игнорируются, и, как написал @Jasen в комментарии, /bin/mount
обычно это setuid-root, который заставляет ее всегда получать все доступные возможности, поэтому биты прав доступа не оказывают никакого влияния на mount
большинство дистрибутивов Linuxи другие юниксоидные операционные системы.
РЕДАКТИРОВАТЬ:части о возможностях специфичны для Linux. Другие операционные системы unixoid, такие как BSD или OSX, не разделяют особые возможности root на возможности, поэтому, когда упоминаются возможности, вам просто нужно быть root. Судя по доступным страницам руководства, проверки mount
похожи на специфичные для Linux проверки, которые я описал. Похоже, нет ОС, которая проверяет биты разрешений при монтировании.
решение2
read позволяет читать (например, hexdump), write позволяет записывать (например, записывать изображение на устройство) в сочетании это означает, что вы можете использовать такой инструмент, как «hexedit», для просмотра и изменения содержимого.
Я не знаю, что позволяет x (возможно, он позволяет ioctl?)
поскольку разрешения означают, brwx______
что только владелец (как правило root
) может делать эти вещи.