1

Некоторое время назад я узнал из этого, что когда-то существовал способ почти навсегда отключить возможность даже корня изменять неизменяемые флаги и флаги только для добавления (lcap CAP_LINUX_IMMUTABLE) или выполнять необработанные операции чтения / записи (lcap CAP_SYS_RAWIO) , Я хотел попробовать это, но поскольку с тех пор системный ограничивающий набор возможностей был удален, я исправил ядро Linux таким образом, что команды, требующие любую возможность, всегда отклоняются. Таким образом, я предположил, что это сделает dd бесполезным как способ обойти и отключить эти ограничения, поскольку lcap CAP_SYS_RAWIO "запрещает root для записи на сырой диск или сырую память".

Чтобы увидеть, были ли мои модификации успешными, я запустил sudo dd if=/dev/sda of=mbr.img bs=512 count=1 . Операция прошла успешно, поэтому я предположил, что это разрешено, потому что это была только операция чтения. Итак, я запустил sudo dd if=/dev/null of=/dev/sda bs=512 count=1 , но, к моему ужасу, это тоже оказалось успешным. Я проверил, пропустил ли я какое-либо тестирование кода для CAP_SYS_RAWIO в ядре Linux, обнаружил, что сделал, изменил его по мере необходимости, перестроил, переустановил и снова попробовал. Еще раз: sudo dd if=/dev/null of=/dev/sda bs=512 count=1 успешно выполнено.

Мне любопытно узнать, если dd не требует CAP_SYS_RAWIO или он не считается «необработанным вводом / выводом», на случай, если я не пропустил больше ничего.

1 ответ1

1

man 7 capabilities перечисляют вещи, которыми управляет CAP_SYS_RAWIO , и чтение и запись файлов блочных устройств не входит в их число. dd выполняет свою работу, используя обычные системные вызовы read и write ; он имеет необычные функции для выбора размера входного и выходного буферов и преобразования данных при копировании, но на самом деле он не делает ничего особенного для самого ввода / вывода.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .