Обновить
256K+

Linux *

Пишем под *nix

347,17
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Пособие по программированию модулей ядра Linux. Ч.1

Время на прочтение19 мин
Охват и читатели63K

Перед вами последняя версия пособия по программированию модулей ядра Linux, вышедшего 2 июля 2022 года. Пособие большое, поэтому материал будет разбит на серию статей. В первой части мы разберём, что такое модули ядра, рассмотрим необходимые подготовительные этапы для их создания и в завершении по традиции напишем первый простейший модуль «Hello world», попутно разобрав вопросы лицензирования, передачу аргументов командной строки и прочие нюансы. Это пособие вы можете смело воспроизводить и изменять в соответствии с условиями Open Software License v 3.0.
Читать дальше →

Есть ещё выдающиеся программисты, кроме Торвальдса, Беллара и Дина? Знакомьтесь — Джастин Танни

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели49K
Программистам не дают Нобелевские премии. Хотя некоторые заслуживают. В нашей отрасли есть настоящие герои с выдающимися достижениями. Эти люди не строят карьеру, перепрыгивая с одной должности на другую, прокачивая зарплату. Создаётся впечатление, что им карьера вообще не важна. В силу высокого интеллекта, врождённой любознательности и особого характера эти люди не способны выполнять скучные, рядовые задания. Только интересные или важные. И только по своей воле, не по указанию сверху.

На Хабре рассказывали про «чак норрисов» от программирования, таких как Линус Торвальдс, Фабрис Беллар и Джефф Дин. Конечно, есть и другие феноменальные таланты, их много. Зачастую эти люди далеки от публичности, никогда не давали интервью и известны только по никам. Но их объединяет одно — выдающиеся индивидуальные разработки, которые разрывают шаблон и выделяются из общей массы.

Мы собирали этот список несколько лет. Начнём с последних строчек своебразного хит-парада… Знакомьтесь — Джастин Танни (Justine Tunney), хакерша и гений системного программирования.
Читать дальше →

Эскалация привилегий при помощи polkit: как заполучить root-доступ в Linux, воспользовавшись семилетним багом

Время на прочтение14 мин
Охват и читатели20K

polkit – это системный сервис, по умолчанию устанавливаемый во многих дистрибутивах Linux. Он используется демоном systemd, поэтому в любом дистрибутиве Linux, где применяется system, также используется polkit. Автор этой статьи, входя в состав a GitHub Security Lab, работает над улучшением безопасности опенсорсного софта; он ищет уязвимости и докладывает о них. Именно он однажды нашел уязвимость в polkit, позволяющую злоумышленнику увеличить его привилегии. Раскрытие уязвимости было скоординировано с командой по поддержке polkit, а также с командой по обеспечению безопасности в компании Red Hat. О раскрытии этой уязвимости было объявлено публично, патч для нее был выпущен 3 июня 2021 года, и ей был присвоен код CVE-2021-3560.

Эта уязвимость позволяет непривилегированному пользователю, работающему на локальном ПК, получить root-доступ к командной оболочке системы. Такой эксплойт несложно осуществить при помощи нескольких стандартных инструментов командной строки, как показано в этом коротком видео. В данном посте будет объяснено, как устроен этот эксплойт, а также показано, где именно в исходном коде находится этот баг.

История уязвимости CVE-2021-3560 и какие дистрибутивы она затронула

Рассматриваемый баг достаточно старый. Он вкрался в код более восьми лет назад в коммите bfa5036 и впервые мог использоваться в версии 0.113 программы polkit. Однако, во многих популярных дистрибутивах Linux эта уязвимая версия не использовалась до относительно недавнего времени.

Немного специфической историей этот баг обладает в Debian и его производных (например, в Ubuntu), так как Debian использует форк polkit, в котором есть своя особенная схема нумерации версий. В форке Debian этот баг появился в коммите f81d021 и впервые попал в дистрибутив в версии 0.105-26. В стабильном релизе Debian 10 (“buster”) используется версия 0.105-25, таким образом, уязвимости в нем нет. Но некоторые производные Debian, в том числе, Ubuntu, основаны на нестабильной версии Debian, а она уязвима.

Читать далее

Миграция SAP HCM в Yandex Cloud: зачем и как мы это делали и причем тут сертификация по ФЗ “О персональных данных”

Время на прочтение7 мин
Охват и читатели2.1K

Сегодня в российском ИТ-сообществе хорошо знакомы с Федеральным Законом ФЗ-152. Этот документ регулирует обработку персональных данных и предъявляет к системам, которые работают с ними, ряд жестких требований. Будем честны —  закон не только защищает данные, но и серьезно осложняет использование зарубежных сервисов, ряд из которых пока сложно заменить отечественными аналогами в настоящий момент. SAP HCM одна из таких систем.

Ещё в 2014-м году мы поставили амбициозную задачу перенести все системы SAP в облако при построении гибридной инфраструктуры хранения данных. В 2020-м мы смогли её реализовать. С одной стороны, это позволяло обновить наше собственное технологическое ядро, планировать ресурсы и управлять бизнесом realtime. С другой — исключить риск роста расходов на инфраструктуру и поддержку SAP, как для нашей компании, так и для клиентов. В этом посте несколько слов об опыте миграции SAP HCM в Yandex Cloud, причинах выбранных решений и некоторых юридических нюансах.

Читать далее

Разработка драйвера сетевого адаптера для Linux. Часть 1

Время на прочтение25 мин
Охват и читатели36K

В этой статье мы рассмотрим как устроен драйвер сетевого адаптера для Linux.

Cтатью разделим на две части.

В первой части рассмотрим общую структуру сетевого адаптера, узнаем какие компоненты входят в его состав, что такое MAC и PHY, разберемся как подготовить адаптер к работе, сконфигурировать, и как в итоге получать сетевые пакеты.

Хотя при разработке драйверов необходимо использовать стандартные ядерные фреймворки, такие как clock, reset, libphy и пр., поначалу мы будем работать с адаптером напрямую через регистры состояния и управления. Это позволит нам детально разобраться с аппаратной частью.

Во второй части статьи приведем драйвер к нормальному виду, с использованием стандартных фреймворков и описанием того, что надо указать в Device Tree, и рассмотрим как передавать сетевые пакеты.

Нам нужна макетная плата с сетевым адаптером, на которую можно поставить Linux. Возьмем Orange Pi Zero на платформе Allwinner H2+. В состав платформы входят четыре процессорных ядра Cortex-A7, поддерживается ОЗУ стандартов LPDDR2, LPDDR3, DDR3, широкий спектр соединений и интерфейсов, в том числе сетевой адаптер, для которого мы будем разрабатывать драйвер. Подробное описание платформы тут, документация на платформу Allwinner H3 Datasheet.

Читать далее

Новое, старое, улучшенное и поддержка китайских процессоров: что собой представляет ядро Linux 5.19

Время на прочтение5 мин
Охват и читатели13K

Прошло совсем немного времени со времени релиза 5.18, и Линус Торвальдс представил новый — 5.19. Как всегда, исправлений огромное количество — свыше 16 000 от 2190 разработчиков. В прошлом релизе было примерно столько же, так что в мире Linux, можно сказать стабильность.

Объем патча составил 90 МБ, при этом изменены в разной степени почти 14 000 файлов. Добавлено 1,14 млн строк кода, удалено при этом 349 177 тыс. Что касается фокуса изменений, то активнее всего велась работа с драйверами устройств, это около 39% всех изменений, еще около 21% — обновление кода, связанное с различными аппаратными архитектурами. Ну и уже меньше изменений, связанных с сетевым стеком, файловыми системами и внутренними подсистемами. Под катом подробности о главных новшествах и апдейтах.
Читать дальше →

Библиотека вывода с использованием escape-последовательностей

Время на прочтение9 мин
Охват и читатели6K

Osmanip – это библиотека C++, предоставляющая полезные механизмы для работы с управляющими последовательностями ANSI и настройки потока вывода программ. С помощью этих механизмов вы можете оформлять выводимые строки различными цветами и стилями, изменять расположение курсора в терминале и регулировать прочие компоненты вроде индикаторов выполнения и графики. Весь этот функционал будет очень полезен для придания желаемого вида общему потоку вывода программы или для выполнения операций с курсором.
Читать дальше →

Пишем наш первый модуль для ядра Linux

Время на прочтение14 мин
Охват и читатели24K
image

Пожалуй, ядро Linux сегодня – это самый вездесущий (и по-прежнему недооцененный) программный код. На нем основаны все дистрибутивы Linux (что очевидно), но это далеко не все. Кроме того, на ядре Linux работает огромная масса встроенного ПО практически везде. У вас есть микроволновка? Вероятно, она работает на ядре Linux. Посудомоечная машина? Тоже. Вы состоятельный человек и приобрели автомобиль Tesla? Может быть, вы найдете в ней какие-то баги и исправите их, в таком случае, можете отправить патч им на Github, где лежит код для модели S и модели X. Электронная начинка МКС, благодаря которой станция не падает на Землю смертельно опасным и разрушительным огненным болидом — конечно же, тоже работает под Linux. Ядро легковесно. Наверное, именно поэтому оно так хорошо работает в условиях низкой гравитации.
Читать дальше →

Что такое Linux? Статья-шпаргалка для новичков

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели116K

Что такое Linux?


Салют! Это статья — попытка систематизировать некие базовые знания об Linux’ах, которая может быть полезна для продвинутых пользователей, разработчиков и админов Windows, которые еще не имели (или имели крайне небольшой и отрывочный) опыт работы с Linux системами и не знают, с чего начать, однако хотят попробовать — сами, или по причине производственной необходимости. Каждый пункт содержит не исчёрпывающие сведения, а лишь отправные пункты для дальнейшего изучения (гуглежа) материала.

Содержание:

  1. Linux Kernel aka Ядро
  2. GNU Core Utilities (coreutils)
  3. Bash — интерпретатор командной строки
  4. Системы управления пакетами и пакетные менеджеры
  5. Init systems — системы инициализации
  6. systemd
  7. Ваш первый вход на сервер
  8. Управляем пользователями
  9. Сети
  10. FHS — Filesystem Hierarchy Standard — навигация в файловых системах Linux
  11. Window system / display server — сервер экранов
  12. Полезные ссылки и список литературы для изучения


Если интересно — прыгайте под кат
one root to rule them all

Запуск MFC-приложения на не-x86 архитектуре нативно при помощи Winelib и подключение к нему плагина на Qt

Время на прочтение5 мин
Охват и читатели4.1K

Занимался я недавно портированием одного старого win32 MFC MDI приложения, до сих пор разрабатываемого с использованием Microsoft Visual Studio 6.0 (среда разработки 1998 года выпуска), на Linux. При чем необходимо было, чтобы под Linux собирался нативный бинарник в формате ELF из исходников. Взгляд упал на проект Wine, позволяющий запускать бинарники Windows (формат PE - Portable Executable). Один из компонентов Wine - библиотека Winelib - является прослойкой (враппером) между вызовами win32 и вызовами библиотек Linux. С помощью Winelib можно под Linux собирать win32 приложения из исходников. В составе Winelib есть десятки врапперов стандартных библиотек Windows. Но вот незадача. Враппера для MFC (Microsoft Foundation Classes) нет. В итоге прослойку между классами MFC и вызовами win32, пригодную для компиляции с использованием Winelib, пришлось готовить самому. Далее будет описан путь к решению задачи, а также компромиссы, на которые пришлось пойти по ходу реализации.

Читать далее

Сети на Linux: все ещё достойны

Время на прочтение3 мин
Охват и читатели13K

Есть ли в эпоху повального использования облачных сервисов место для сетевого инженера в штате? Казалось бы, информационные системы настолько продвинулись, что «лишнюю» ставку можно убрать, а зарплатный фонд распределить между другими сотрудниками. Или сетевики всё же нужны?

Алексей Учакин, спикер Слёрма по направлению «Сети для DevOps», поделился своим мнением и ответил на насущный вопрос: «Быть или не быть профессии сетевого инженера».

Читать далее

Установка MongoDB в условиях санкций через прокси

Время на прочтение4 мин
Охват и читатели28K

В нынешней ситуации многие сервисы блокируют доступ из РФ, я покажу как можно обойти этот запрет с помощью ProxyChains и Tor на примере MongoDB.

Читать далее

Linux, Unix, безопасность: open source-проект FreeIPA как Enterprise-решение

Время на прочтение9 мин
Охват и читатели48K

Привет, Хабр! Меня зовут Александр Копылов. Я руководитель направления, участник профсообщества Сбера DWH/BigData.

Сегодня предлагаю обсудить интересное решение из сферы инфобеза для высоконагруженных проектов. Огромное их количество, помимо технических возможностей и разнообразных фич, требует правильного подхода к безопасности. Одно из оптимальных решений ― FreeIPA, о нём и поговорим под катом.

Читать далее

Ближайшие события

Flutter на Python

Время на прочтение3 мин
Охват и читатели54K


Приветствую вас, дорогие любители и знатоки Python! Знали ли вы, что можно разрабатывать кросплатформенные приложения, используя всю мощь и выразительность своего любимого змеиного языка в связке с ныне популярным фреймворком Flutter? Оказывается, такая возможность есть! Всех заинтересовавшихся прошу под кат за деталями.
Читать дальше →

Предотвращаем утечки памяти в Go, ч. 2. Особенности рантайма

Время на прочтение13 мин
Охват и читатели21K

Мы продолжаем наш рассказ о причинах повышенного потребления памяти в языке Go. В предыдущей статье мы детально разобрали ошибки бизнес-логики приложения, которые могут привести к утечкам памяти. Сегодня же сосредоточимся на особенностях рантайма языка Go.

Читать далее

Миниатюрное десктопное GUI приложение на PHP — 2 МБ хватит для всех

Время на прочтение6 мин
Охват и читатели19K

Я часто заморачиваюсь на тему минимизации размера своих GUI приложений. Прошлая моя статья была про Nuklear. Но сейчас захотелось более современных технологий. Чтоб HTML5, CSS3 и PHP. Чтоб приложение ни от чего не зависело, т.е. построено по принципу "всё включено". И чтоб конечный размер приложения не превысил 2 МБ. Получится ли?

В Linux я часто пользуюсь утилитой df. Мне её очень не хватает в Windows, а искать аналоги лень. Так что было сделано волевое решение сделать свою, на РНР 5, с бутстрапом и JQuery.

Читать далее

Домашний CICD: Docker, Jenkins и Nexus3

Время на прочтение7 мин
Охват и читатели39K

Практика CI/CD широко распространена в современном мире и представить ручной деплой у FAANG с их бесчисленными ежедневными изменениями просто невозможно. То же будет справедливо и для продуктовых компаний: десятки ручных деплоев в день вытянуть можно, но это потребует колоссальных ресурсов.

Освоить эту практику можно дома, в среде, где что-то сломать не страшно, ведь всегда можно начать все с самого начала. В этом гайде рассмотрим как развернуть и настроить Jenkins в Docker, как создать агентов для сборки, а еще запушим образ в приватный Nexus.

Настроить CI/CD этому господину

Python GUI. Обзор Hero Animation в библиотеке KivyMD

Время на прочтение5 мин
Охват и читатели8.9K

Приветствую вас, дорогие любители и знатоки Python! Сегодня как всегда будем делать обзор библиотеки для кроссплатформенной разработки, которая реализует набор виджетов в стиле Google Material Design для фреймворка Kivy — KivyMD. В этой статье рассмотрим пример создания и управления Hero анимациями, которые недавно были добавлены в библиотеку KivyMD.
Читать дальше →

Как мы себя обманываем, только бы продолжать пользоваться Golang

Время на прочтение21 мин
Охват и читатели85K

За два года с тех пор, как я опубликовал статью I want off Mr Golang's Wild Ride, она вновь и вновь всплывала на Reddit, Lobste.rs, на HackerNews и в других местах.

Всякий раз дискуссия выходит к одним и тем же ответам:

Go!

Как повысить эффективность Bash-скриптов

Время на прочтение10 мин
Охват и читатели16K

Bash-скрипты — эффективное решение для автоматизации рутинных задач, но не всегда самое простое. Объемные сценарии характеризуются низкой производительностью и сложны для чтения. В этой статье мы рассмотрим, как оптимизировать работу, упростить с помощью утилит sed и awk и не совершать очевидных ошибок в написании скриптов. 

Читать далее