LINUX.ORG.RU

Запретить remount

 ,


0

4

Есть файловая система, смонтированная в /shared. Я хочу запретить её remount. Хакинг ядра (4.2) приветствуется. Добрался до файла fs/super.c и функции do_remount_sb(), которая и выполняет remount. Но не пойму как внутри неё понять, что идёт remount именно /shared, чтобы вернуть какой-нибудь -EACCESS?

Ответ на: комментарий от post-factum

Чтобы нельзя было перемонтировать, наверное.

anonymous
()

Пользователи не могут ничего перемонтировать, рута ты так не ограничишь.

anonymous
()
Ответ на: комментарий от anonymous

Пользователи не могут ничего перемонтировать, рута ты так не ограничишь.

Если где надо возвращать ошибку, то даже рут не сможет, мне так кааца... По крайней мере это будет гораздо сложнее.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от former_anonymous

А типа рут не сделает патч на твой патч, чтобы все работало как раньше? А то и проще ситуацию предлагаю: вернуть взад непропатченное ведро!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

А типа рут не сделает патч на твой патч, чтобы все работало как раньше? А то и проще ситуацию предлагаю: вернуть взад непропатченное ведро!

Система на squashfs и ядро нельзя поменять в рантайме.

former_anonymous ★★★
() автор топика
Ответ на: комментарий от former_anonymous

И модули запрещены? И как ты ограничил рути писать произвольные области памяти?

anonymous
()
Ответ на: комментарий от former_anonymous

что бы что-то могло запуститься из squashfs этот squashfs должен быть смонтирован. Монтирует squashfs ядро и оно далее продолжает свою работу после монтирования squashfs образа, вот его и можно заменить, ну а squashfs, если нужно перепаковать.

kostik87 ★★★★★
()
Ответ на: комментарий от former_anonymous

Тогда загрузчику (u-boot'у нужен драйвер для этого, уж не знаю умеет ли он это) нужно знать о скваше, иначе, как он узнает, где ядро лежит, чтобы передать управление ему.

Dennis7
()
Ответ на: комментарий от Dennis7

Не бывает такого. Она что ли шифрованная? Да даже если шифрованная — рут что ли не сможет выдернуть ключ и перемонтировать корень в виртуалке или перезагрузившись с флешки?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Dennis7

Тогда загрузчику (u-boot'у нужен драйвер для этого, уж не знаю умеет ли он это) нужно знать о скваше,

Он знает, всё работает.

former_anonymous ★★★
() автор топика
Ответ на: комментарий от former_anonymous

Ещё раз, ни один загрузчик монтировать squashfs и вызывать из него ядро не умеет. Для того, что бы открыть (смонтировать) squashfs должно быть загружено ядро загрузчиком. Это ядро в squashfs находиться не может. Образ ядра может быть, к примеру попросту записан на диск, карту памяти, ну или вообще абстрактно по не которому адресу памяти и загрузчик будет считывать из определённого адреса некоторый блок данных и передавать на этот загруженный блок данных управление.

А затем уже это загруженное ядро смонтирует squashfs и это же ядро продолжит работать. Теоритически можно попробовать реализовать kexec, т.е. стартует первое ядро, монтирует squashfs, загружает образ ядра в память и посредством kexec передаёт ему управление. Всё это нужно поместить в initramfs. Второе ядро заново проинициализирует оборудование и допустим смонтирует squashfs.

В принципе это реализовать возможно, но довольно сложно.

kostik87 ★★★★★
()
Ответ на: комментарий от Sectoid

Пробовал когда-нибудь kexec на ARM'ах или MIPS'ах. Я чего-то такого не наблюдал, даже компилироваться на хотелось. Может быть, я что-то делал не так, поделись опытом.

Dennis7
()
Ответ на: комментарий от kostik87

Ещё раз, ни один загрузчик монтировать squashfs и вызывать из него ядро не умеет.

Мой умеет. Он специально запатчен для этого.

former_anonymous ★★★
() автор топика
Ответ на: комментарий от kostik87

Да я про то же спрашивал, но человек утверждает, что у него все работает... )))

Dennis7
()
Ответ на: комментарий от former_anonymous

Ты уверен? В таком случае, как я описал у тебя изначально не из squashfs загружается одно ядро, затем оно монтирует squashfs, затем посредством kexec из смонтированного squashfs загружается новое ядро и ему передаётся управление.

Только при такой схеме слишком много но.

kostik87 ★★★★★
()
Ответ на: комментарий от Dennis7

Пробовал когда-нибудь kexec на ARM'ах или MIPS'ах. Я чего-то такого не наблюдал, даже компилироваться на хотелось. Может быть, я что-то делал не так, поделись опытом.

Я не пробовал, но точно знаю, что kexec'ом проламывали стоковую прошивку Motorola Droid3/4 с целью установки CM. Детали думаю можно нагуглить.

Sectoid ★★★★★
()
Ответ на: комментарий от former_anonymous

kexec забанен в первую очередь. Господа, может вернёмся к do_remount_sb()?

А загрузка модулей тоже забанена ;) ?

Sectoid ★★★★★
()
Ответ на: комментарий от Sectoid

А, погоди, помню у гнусмаса был проект, что если «первое» ядро «падает», то потом подгружается «второе», но оно заглохло, из-за особенностей процов snapdragon. Далее вся разработка пошла в trust zones.

Dennis7
()
Ответ на: комментарий от kostik87

Ты уверен?

Да, уверен. Именно потому что загрузичк запатчен он умеет читать со squashfs раздела

как я описал у тебя изначально не из squashfs загружается одно ядро

Нет. Загрузчик грузит initrd, который находится на squashfs, который в свою очередь уже маунтит squashfs как /

former_anonymous ★★★
() автор топика
Ответ на: комментарий от kostik87

Брешешь

А в чём проблема? У меня не U-Boot, как могло показаться, но автор squashfs оценил запил squashfs в U-Boot на месяц. Были бы руки.

former_anonymous ★★★
() автор топика
Ответ на: комментарий от former_anonymous

Так загрузчик должен уметь распаковывать скваш, это же просто тупо архив, сжатый, допустим тем же zip или lzma, и ему (загрузчику) нужен адрес, куда передавать управление,на распакованное ядро. Далее, ему пофиг, что будет происходить.

Dennis7
()

Не работаешь ли ты в конторе по выпуску тивоизированных решений на линупсе?

Chaser_Andrey ★★★★★
()

Одна и та же ФС может быть примонтирована к нескольким точкам. Перемонтирование влияет на все, поэтому та функция может и не знать, через какой путь её дёрнули. Ну, можно найти список всех точек монтирования, пройтись по нему и найти там ФС с правильным номером. Если в твоём shared какая-то ФС, которой больше нигде нет, можно её драйвер отучить делать то, что ты хочешь запретить даже руту.

А вообще выше правильно говорят, запретить что-либо руту сложно. Умаешься выискивать все «дырки» и запатчивать их. А потом мержить такой патч с апстримом, когда обновить захочется.

const86 ★★★★★
()
Ответ на: комментарий от Sectoid

А загрузка модулей тоже забанена ;) ?

Это сложный вопрос. Фактически - да.

А по делу, я правильно понимаю, что имея dentry я не могу получить полный путь, т.к. путь будет вплоть до корня монтирования? Тогда получается, что единственный способ - это как-то перебрать все vfsmounts и сравнить с запрашиваемым путём? Вопрос как. Спасибо.

former_anonymous ★★★
() автор топика
Ответ на: комментарий от former_anonymous

Это сложный вопрос. Фактически - да.

«фактически» это как именно?

с запрашиваемым путём

ты зациклен на пути. что мешает руту использовать другой путь для монтирования?

Sectoid ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.