Я хотел бы заблокировать системный вызов mount, когда кто-то хочет перемонтировать /system
в режиме чтения-записи. Это означает, что я хотел бы не допустить выполнения следующего: mount -o remount,rw /system
. Есть ли у кого-нибудь идея, где мне нужно посмотреть, чтобы изменить код в ядре? Я пытался посмотреть, /fs/namespace.c
где находятся некоторые функции, связанные с mount, но я не совсем уверен.
решение1
Вы можете использовать что-то вроде SELinux или seccomp
, но учитывая, что полные привилегии root позволяют изменять любые разделы без их монтирования и делать другие отвратительные вещи, возможно, даже загружать модули ядра, чтобы обойти ограничения, это может быть не так уж и тривиально. По крайней мере, вам понадобится всеобъемлющий набор правил, который блокирует все обычные дыры.
Изменение mount
двоичного файла или библиотеки C не является решением, поскольку гораздо проще вызвать системный вызов напрямую, не обращаясь к готовому двоичному файлу или даже библиотеке.
SELinux и обычные средства изоляции и защиты изначально затруднят проникновение в систему с правами root, что может быть полезно и по другим причинам.
Также возникает вопрос о том, что у вас есть в этой точке монтирования? Если это что-то, относящееся только к этой системе, то имеет ли значение, может ли кто-то это изменить? Если они получат полный административный доступ к машине, они могут испортить все остальное, оставить за собой бэкдоры и, вероятно, по крайней мере уничтожить рассматриваемый раздел. Если вы не ожидаете необходимости его изменять и просто хотите предотвратить потерю содержимого, было бы проще поместить его в хранилище только для чтения. И сделать резервные копии.
Если файловая система там используется несколькими системами, она, вероятно, смонтирована по сети. В этом случае предотвращение записи в нее лучше сделать на стороне сервера, поэтому неважно, попытается ли ядро сделать монтирование для чтения и записи, это все равно не сработает.