HeroBrine1st 88 Опубликовано: 9 декабря, 2017 (изменено) Я думаю, что любой из вас пытался сделать права доступа к определенным файлам. У некоторых это получалось - например разработчик opensecurity со своей secureos, но она тоже взламывается. Не думаю, что кому-то это удалось, поэтому встречайте Module Kernel. Это еще сырое ядро, и даже неспособное открывать какие-либо программы, поэтому я прошу подкинуть идей насчет некоторых компонентов и sandbox-окружения (ибо я удаляю все компоненты из окружения и добавляю их в System Calling Interface, а это ведь код). Код можно посмотреть тут https://github.com/HeroBrine1st/Module-Kernel . За лишние do-end не ругайтесь: это для удобства чтения кода в моем редакторе, ведь можно сделать вот так: И можно будет получить быстрый доступ к определенному куску кода. Установить это ядро можно поверх openos. Вот установщик (по быстрому сляпал, поэтому использую установщик ECS): https://github.com/HeroBrine1st/Module-Kernel/blob/master/v1.0/installer.lua. Вместе с моим кодом есть еще два файла, которые я выдрал из openos - buffer.lua и serialization.lua. Оба нужны для SCI. Первый для сокетов, а второй - для чтения и записи прав доступа. Список того, что есть: Демоны - слушают все события в системе и обрабатывают их. На форуме выкладывали методику построения резидентных программ, а это тоже самое, но в виде файла. Что бы создать демона, просто сделайте, что бы он вернул при запуске 3 параметра - свое имя, функцию старта (можно поставить хоть пустышку в виде function() end, но главное - не nil и ничего другого, кроме function) и функцию, которая будет запускаться при каждом событии в системе с первым параметром - таблица с событием (touch, key_down и подобное). Если файл демона есть в папке /daemons/ - он подключится сам, никаких действий с вашей стороны больше не потребуется. Базовая система модулей - kernel.loadModule(name:string). работает почти как require, но загружает модули из /module/?.lua. Недописанная библиотека безопасных обращений к модулям и прав доступа к файловой системе. UPD: драйвера. Подробнее ниже. Один скриншот запущенного ядра. Белая полоска внизу - поле для ввода текста. Все основные идеи я воплотил, и они почти закончились, поэтому подкиньте, пожалуйста, идей. P.s. думаю, что документация не нужна, поскольку в коде все и так понятно. P.s.s. ниже - в комментариях Изменено 12 декабря, 2017 пользователем HeroBrine1st 5 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
FelixBanan 8 Опубликовано: 9 декабря, 2017 Это мода пошла у ECS тырить установщик? Я его тоже тырил Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st Автор темы 88 Опубликовано: 9 декабря, 2017 Это мода пошла у ECS тырить установщик? Я его тоже тырил Нет, он сам его выложил в общее использование на этом же форуме Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 542 Опубликовано: 9 декабря, 2017 https://github.com/HeroBrine1st/Module-Kernel/blob/8345d4c0bfb50bb243d8cc9b18862d095a13455e/v1.0/module/SCI.lua#L208 Отступы.... О святой процессор и святой код, рефакторинг! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st Автор темы 88 Опубликовано: 12 декабря, 2017 (изменено) Сделал систему драйверов. Теперь все, что находится в drivers, загружается и что они возвратят, добавляется в SCI.device[имяфайла]. Появилась новая функция - SCI.device.installDriver(path: string, name: string, SUkeyOrRequest:boolean or string): boolean or nil, string Как нетрудно догадаться из названия, она устанавливает драйвер. Path - путь до исходного файла, name - название драйвера (он установится в /drivers/[name]), SUkeyOrRequest - ключ суперпользователя или запросить разрешение пользователя. В SCI.lua надо подменить функцию requestOfInstallDriver, поскольку она всегда возвращает false (сделано, что бы 1. не было большой уязвимости (поставлю true - будет уязвимость) 2. взяв за основу мое ядро, можно будет быстро вставить окошко запроса, не стирая мой код). в нее надо поставить окошко запроса. Либо так и оставить. Изменено 12 декабря, 2017 пользователем HeroBrine1st Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st Автор темы 88 Опубликовано: 12 декабря, 2017 (изменено) Теперь более подробно о ключе суперпользователя, о котором я умалчивал. (В init.lua переменная называется superuserkey, ес че) Он требуется для некоторых операций, опасных для системы. Тот же SCI.io.filesystem имеет 2 основных функции - getFileObject и list. Обе обращаются к разрешениям, в которых прописано, что может пользователь, а что суперпользователь. По умолчанию оба могут все, однако можно с помощью setPermission можно ограничить доступ даже суперпользователю (однако что бы изменить разрешения, нужен тот самый ключик). Ключик этот размером в 128 символов, что бы его невозможно было пробрутить. Уязвимости возможно есть, я пока не искал. Но самую большую уязвимость (getFileObject) я прикрыл с помощью псевдо-ООП (если я сделаю метатаблицу, то в итоге object.permissions можно будет подменить. очевидная уязвимость, о которой многие, не посмотрев кода, могут догадываться). Это основная причина отсутствия ООП в этой функции. Второстепенная - я банально не знал, что надо хранить метатаблицу в локальном окружении библиотеки, а подключать уже в функции. В планах сделать файл hosts и его обработку. Изменено 12 декабря, 2017 пользователем HeroBrine1st Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 12 декабря, 2017 Сделал систему драйверов.А зачем нужны драйверы? В настоящих системах, использующих разношерстное оборудование, назначение драйверов понятно. А в OpenOS они зачем нужны? Какое такое разнообразие протоколов приводится к единому стандарту? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st Автор темы 88 Опубликовано: 12 декабря, 2017 (изменено) А зачем нужны драйверы? В настоящих системах, использующих разношерстное оборудование, назначение драйверов понятно. А в OpenOS они зачем нужны? Какое такое разнообразие протоколов приводится к единому стандарту? Из-за того, что мне приходится для каждого нового компонента писать код, драйвера позволяют вместе с программой устанавливать пакеты этих самых драйверов, позволяющих этой и остальным программам использовать новый компонент. + Я не собираюсь давать свободный доступ к библиотеке component. Изменено 12 декабря, 2017 пользователем HeroBrine1st Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st Автор темы 88 Опубликовано: 12 декабря, 2017 Сделал документацию по некоторым функциям. https://github.com/HeroBrine1st/Module-Kernel/wiki Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ALeXeR 67 Опубликовано: 18 декабря, 2017 Ну наконец-то))) Хоть что-то полезное в отличии от всяких гуишечек))) зачетно)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st Автор темы 88 Опубликовано: 19 декабря, 2017 Дописал документацию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st Автор темы 88 Опубликовано: 13 января, 2019 Перенесите эту тему в чулан пожалуйста) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ArtHacker 38 Опубликовано: 25 октября, 2019 В 13.01.2019 в 20:50, HeroBrine1st сказал: Перенесите эту тему в чулан пожалуйста) НИИИИИИИИИИИИИТ. Делай дальше плз Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
HeroBrine1st Автор темы 88 Опубликовано: 8 ноября, 2019 В 25.10.2019 в 16:48, ArtHacker сказал: Делай дальше То, что я написал (совершенно не помню зачем, но я что-то хотел на этом сделать), совершенно не то, что должен делать, если решил создать защищенное ядро системы. Что бы его сделать, нужно создать собственную файловую систему (что бы работать с флагами и правами файлов, а так же получить хорошее шифрование накопителя), а дальше будет куда проще. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах