Решил написать статью по следам курса, который я делал в прошлом семестре в институте. Конечно, тут я опишу лишь самые главные основы и максимально все упрощу. Постараюсь дать немного теоритической информации, но в основном больше ссылок, картинок и практики.
Итак, речь пойдет о написании firewall в среде Linux. Всю статью я поделю на несколько частей. То, что вы читаете сейчас – первая часть, она поделена еще на три части. Некоторые темы хорошо известны и задокументированы, поэтому я постараюсь отдельно давать минимум теории по ним и отдельно практику. Чтобы всем было интересно. А также ссылки для углубления (часто это будут английские статьи).
2.1 — Введение во вторую часть. Смотрим на сеть и протоколы. Wireshark. 2.2 — Таблицы Firewall. Transport Layer. Структуры TCP, UDP. Расширяем Firewall. 2.3 — Расширяем функциональность. Обрабатываем данные в user space. libnetfilter_queue. 2.4 — Бонус. Изучаем реальную Buffer Overflow атаку и предотвращаем с помощью нашего Firewall'а.
2.1 — Введение во вторую часть. Смотрим на сеть и протоколы. Wireshark. 2.2 — Таблицы Firewall. Transport Layer. Структуры TCP, UDP. Расширяем Firewall. 2.3 — Расширяем функциональность. Обрабатываем данные в user space. libnetfilter_queue. 2.4 — Бонус. Изучаем реальную Buffer Overflow атаку и предотвращаем с помощью нашего Firewall'а.
Начиная с версии ядра 4.6-r1 нам стал доступен новый интерфейс для взаимодействия с подсистемой ядра gpio. Теперь существует три официальных способа работы с gpio и получения от них прерываний. Нет смысла углубляться в потребности для данной подсистемы, для малой части это суровые будни, для другой части веселое хобби, и для всех вместе в ядре была предоставлена новая возможность взаимодействия.
Заметка носит популярный характер, так как основных преимуществ, которые шли в комплекте с нововведением, а именно упрощение работы с gpio в контексте ядра касаться не будем.
Данная статья посвящена разработке GPIO (General-Purpose Input/Output) модуля ядра Linux. Как и в предыдущей статье мы реализуем базовую структуру GPIO драйвера с поддержкой прерываний (IRQ: Interrupt Request).
В этой статье я решил сделать небольшое отступление от общей линии повествования и зарулю на дорогу Linux. За то непродолжительное время, что я работаю с Zynq 7000, в тематических чатах я видел много вопросов насчет того, как запустить Linux на отладке. Я в общем-то, недолго думая, сел проштудировал документацию, примеры и завёл его своими руками под ту плату, что у меня есть в распоряжении. После этого я решил обобщить свои знания по этому вопросу и описать процедуру сборки, подготовки загрузочного образа Linux, который включает в себя U-boot, Device Tree Source, RootFS, и само ядро Linux. В дополнение к этому, я решил немного усложнить задачу и выяснил, как можно поморгать светодиодом подключенным к PL-части устройства из пространства пользователя Linux.
Обо всём этом я написал в этой статье. Всем интересующимся - добро пожаловать под кат.
Одной из многих запоминающихся строк знаменитого произведения Дугласа Адамса "Путеводитель для путешествующих по галактике автостопом" было обвинение, выдвинутое, вероятно, сторонниками "Энциклопедии Галактики", в том, что "Путеводитель автостопом" был "неравномерно отредактирован" и "содержит много отрывков, которые просто показались его редакторам хорошей идеей в то время". С небольшими изменениями, например, заменой "отредактировали" на "рецензировали", это описание кажется очень подходящим для ядра Linux и, несомненно, для многих других программ, открытых или закрытых, свободных или несвободных. Рецензирование в лучшем случае является "неравномерным".
От редакции: Сегодня исполнился 31 год с момента первого анонсирования Linux. Именно в этот день, 25 августа 1991 года Линус Торвальдс разместил в новостях Usenet comp.os.minix соообщение следующего характера:
Привет всем тем, кто использует миникс — Я делаю (свободную) операционную систему (это только хобби, не столь большое и профессиональное, как GNU) для 386(486)AT клонов. Эта система пишется с апреля и скоро будет готова. Я хочу получить любой отзыв, касающийся вещей, которые нравятся/не нравятся людям в миникс, так как моя ОС похожа на неё (такое же устройство файловой системы (по практическим соображениям), среди прочего).
В настоящее время я портировал bash (1.08) и gcc (1.40), и, похоже, эти программы работают. Это значит, что я получу что-то практичное в ближайшие несколько месяцев, и я хочу узнать, какие возможности хотят большинство людей. Любые предложения принимаются, но я не обещаю, что я осуществлю их:-)
Линус (torvalds@kruuna.helsinki.fi)
PS. Да — в ней нет кода миникс, и будет мультипотоковая ФС. Система НЕПЕРЕНОСИМА (использует команды Intel 386 и т. д.) и, вероятно, будет поддерживать только жесткие диски AT, так как это всё, что у меня есть 🙁
Ну а мы — в этот интересный день, можем только пожелать, чтобы труды по переводу этого руководства были для вас полезны.
Продолжаем серию статей по созданию модулей ядра. В текущей части мы разберем работу с файловой системой /proc, взаимодействие с модулями при помощи sysfs, а также работу с файлами устройств.
Перед вами очередной фрагмент последней версии руководства по написанию модулей ядра от 2 июля 2022 года. Тема этой части — системные вызовы. В ней вы познакомитесь с этим понятием на примере создания собственной функции для открытия файлов, которая будет подменять собой исходную sys_open, а также следить за конкретным пользователем, информируя нас об открываемых им файлах.