Перейти к публикации
Форум - ComputerCraft
HeroBrine1st

Module Kernel - модульное ядро с правами доступа

Рекомендованные сообщения

Я думаю, что любой из вас пытался сделать права доступа к определенным файлам.

У некоторых это получалось - например разработчик opensecurity со своей secureos, но она тоже взламывается.

Не думаю, что кому-то это удалось, поэтому встречайте Module Kernel.

 

Это еще сырое ядро, и даже неспособное открывать какие-либо программы, поэтому я прошу подкинуть идей насчет некоторых компонентов и sandbox-окружения (ибо я удаляю все компоненты из окружения и добавляю их в System Calling Interface, а это ведь код).

Код можно посмотреть тут https://github.com/HeroBrine1st/Module-Kernel . За лишние do-end не ругайтесь: это для удобства чтения кода в моем редакторе, ведь можно сделать вот так:

 E85YdwCrSlSuAdN0dFPx8w.png

И можно будет получить быстрый доступ к определенному куску кода.

Установить это ядро можно поверх 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: драйвера. Подробнее ниже.

 

Один скриншот запущенного ядра. Белая полоска внизу - поле для ввода текста.

 

EGujp4z6Q9WaRZKb8OrbZQ.png

 

Все основные идеи я воплотил, и они почти закончились, поэтому подкиньте, пожалуйста, идей.

 

P.s. думаю, что документация не нужна, поскольку в коде все и так понятно.

P.s.s. ниже - в комментариях

Изменено пользователем HeroBrine1st
  • Like 5

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это мода пошла у ECS тырить установщик? :D Я его тоже тырил

Нет, он сам его выложил в общее использование на этом же форуме

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

https://github.com/HeroBrine1st/Module-Kernel/blob/8345d4c0bfb50bb243d8cc9b18862d095a13455e/v1.0/module/SCI.lua#L208

Отступы....

О святой процессор и святой код, рефакторинг!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сделал систему драйверов. Теперь все, что находится в 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. взяв за основу мое ядро, можно будет быстро вставить окошко запроса, не стирая мой код). в нее надо поставить окошко запроса. Либо так и оставить. 

Изменено пользователем HeroBrine1st

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Теперь более подробно о ключе суперпользователя, о котором я умалчивал.

(В init.lua переменная называется superuserkey, ес че)

Он требуется для некоторых операций, опасных для системы.

Тот же SCI.io.filesystem имеет 2 основных функции - getFileObject и list. Обе обращаются к разрешениям, в которых прописано, что может пользователь, а что суперпользователь. По умолчанию оба могут все, однако можно с помощью setPermission можно ограничить доступ даже суперпользователю (однако что бы изменить разрешения, нужен тот самый ключик).

Ключик этот размером в 128 символов, что бы его невозможно было пробрутить. Уязвимости возможно есть, я пока не искал.

 

Но самую большую уязвимость (getFileObject) я прикрыл с помощью псевдо-ООП (если я сделаю метатаблицу, то в итоге object.permissions можно будет подменить. очевидная уязвимость, о которой многие, не посмотрев кода, могут догадываться). Это основная причина отсутствия ООП в этой функции. Второстепенная - я банально не знал, что надо хранить метатаблицу в локальном окружении библиотеки, а подключать уже в функции.

 

В планах сделать файл hosts и его обработку.

Изменено пользователем HeroBrine1st

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сделал систему драйверов.

А зачем нужны драйверы? В настоящих системах, использующих разношерстное оборудование, назначение драйверов понятно. А в OpenOS они зачем нужны? Какое такое разнообразие протоколов приводится к единому стандарту?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А зачем нужны драйверы? В настоящих системах, использующих разношерстное оборудование, назначение драйверов понятно. А в OpenOS они зачем нужны? Какое такое разнообразие протоколов приводится к единому стандарту?

Из-за того, что мне приходится для каждого нового компонента писать код, драйвера позволяют вместе с программой устанавливать пакеты этих самых драйверов, позволяющих этой и остальным программам использовать новый компонент.

+ Я не собираюсь давать свободный доступ к библиотеке component.

Изменено пользователем HeroBrine1st

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну наконец-то))) Хоть что-то полезное в отличии от всяких гуишечек))) зачетно))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×