Обновить
328.16

Linux *

Пишем под *nix

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

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

Время на прочтение15 мин
Количество просмотров7.8K

Пятая часть последней версии руководства по написанию модулей ядра от 2 июля 2022 года. В ней мы разберемся, как в ядре реализована совместная работа процессов и потоков, узнаем, какую роль в этом играет режим ожидания (sleep), рассмотрим возможные способы избежания коллизий и взаимных блокировок, а также познакомимся с назначением и использованием атомарных операций.
Читать дальше →

Разработка «зрелищной» программы. Интерфейс оператора, GUI и маркетинг

Время на прочтение3 мин
Количество просмотров5.2K

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

Читать далее

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

Время на прочтение12 мин
Количество просмотров8.8K

Перед вами очередной фрагмент последней версии руководства по написанию модулей ядра от 2 июля 2022 года. Тема этой части — системные вызовы. В ней вы познакомитесь с этим понятием на примере создания собственной функции для открытия файлов, которая будет подменять собой исходную sys_open, а также следить за конкретным пользователем, информируя нас об открываемых им файлах.
Читать дальше →

Масштабируемая векторная графика. Простой SVG-редактор. Памяти Матса Бенгтссона

Время на прочтение9 мин
Количество просмотров8.3K
imageВсё началось, когда вышла очередная версии TkProE — интегрированной среды разработки программ на tcl/tk. Мне очень пришлось по нраву наличие в ней встроенного графического редактора. Но этот редактор не работает с векторной графикой и отсюда все его недостатки.

В процессе модернизации TkProE я познакомился с проектом tkpaint. Более того какие-то идеи я позаимствовал у него и добавил в графический редактор в TkProE.

Но tkpaint это тоже графический редактор растровой графики со всеми присущими ей недостатками, особенно при работе с изображениями (прозрачность, деформация, градиентная заливка).
Читать дальше →

Оболочка и терминал Unix — это одно и то же?

Время на прочтение18 мин
Количество просмотров23K

Сегодня любой уважающий себя разработчик не только программирует, но и так или иначе эксплуатирует свой код. А значит, с вероятностью 99,99% сталкивается с такой штукой, как «терминал». Хотя чаще это называют «консолью» или «командной строкой». 

А как же правильно? И почему эта штука местами такая странная? Без исследования древних машин, принципов общения с ними и легаси ПО тут никак не разобраться.

Осторожно: very long read!

Как не быть программистом, раскурить eBPF за сутки и начать мониторить DNS

Время на прочтение22 мин
Количество просмотров12K

Представим: сервер может отправлять легитимные запросы, но IP, на которые он будет их слать, неизвестны. В журнале сетевого фильтра видно что запросы таки да, идут. Но не ясно - это как раз легитимные или информация уже утекает к злоумышленникам? Было бы проще если бы был известен домен на который сервер посылает данные. Увы, но PTR не в моде, а securitytrails показывает или ничего, или слишком много по этому IP.

Можно запустить tcpdump. Но кто захочет постоянно смотреть в монитор? А если сервер не один? Есть packetbeat. Это чудовище, которое выжрало процессор на всех серверах. Брр… Не хочу о нём вспоминать. Osquery - неплохой инструмент который многое знает о сетевых подключениях и ничего - о DNS-запросах. Соответствующее предложение было просто закрыто. Zeek - о нём я узнал когда начал искать как отслеживать DNS-запросы. Похоже он неплох, но меня смутило два момента: он следит не только за DNS, а значит ресурсы будут тратиться на работу результат которой мне не нужен (хотя, возможно, в настройках можно выбрать протоколы); а ещё он ничего не знает о том какой процесс послал запрос.

Неужели это всё? Я вроде бы что-то слышал про eBPF…

Читать далее

Восставший из подвала и хлама: Оживляем китайскую нонейм игровую приставку из 2013 года

Время на прочтение6 мин
Количество просмотров7.9K

Всем привет! Когда-то, в юности, родители на ДР подарили мне игровую консоль-планшет на андроиде. Юзал я её несколько месяцев, и по итогу разбил на ней дисплей с психу. Так и отправилась консоль практически на 10 лет в подвал, а сейчас я её нашёл и отремонтировал. Консоль абсолютный noname - на неё нет ни прошивок, ни запчастей, и если кому интересен процесс восстановления подобных старых китайских девайсов - добро пожаловать под кат!

Читать далее

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

Время на прочтение25 мин
Количество просмотров17K

От редакции: Сегодня исполнился 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, а также работу с файлами устройств.
Читать дальше →

Краткий справочник по «всем-всем» командам Linux

Уровень сложностиСредний
Время на прочтение90 мин
Количество просмотров212K

Периодически меня на начальном курсе просят дать "список всех-всех команд с кратким описанием что делает"... Ну прям "всех-всех". И ведь если искать в интернете "такие" справочники существуют - либо про "20-30 команд, но самых важных", либо с неточностями и устаревшей информацией. Так что предлагаю вашему вниманию свою версию такого "краткого" справочника (на 300, 515, 612, 716, 842, 1005,... 1260 команд) с ссылками на wiki-описание и на cheat.sh-примеры наиболее важных команд.

Справочник по всем-всем командам LINUX

Особенности национальной киберзащиты ОС: избранные доклады OS DAY-2022

Время на прочтение7 мин
Количество просмотров3.8K

Безопасность операционных систем — основная тема девятой конференции OS DAY, которая прошла в июне в «Золотых мозгах», как называют в народе здание Президиума РАН. Говорили о средствах защиты информации внутри российских ОС, делились секретами создания надежных программных сред. Это редкий шанс узнать подробности о киберзащите сложного ПО из первых рук. Мы побывали на конференции, выбрали пару интересных на наш взгляд докладов и хотим поделиться тезисами.



Конференция включала несколько секций, где за два дня выступило больше 30 человек, круглый стол и выставку технологий. Там можно было подойти и пообщаться с разработчиками российских операционных систем и средств защиты информации. Говорили в основном о защите ОС на базе Linux.


На российском рынке ПО прослеживается тенденция к разработке своих, отечественных решений для госсектора. Это непростая задача, которая требует чуть ли не параноидального внимания к кибербезопасности. Тем интереснее узнать, как ее решают. Не каждый день разработчики операционной системы раскрывают секреты, по косточкам разбирают особенности архитектуры и дают советы по безопасной разработке.

Читать дальше →

Право на ремонт и решение проблемы одноразовых технологий от Purism

Время на прочтение8 мин
Количество просмотров4.6K

Возьмите любое электронное устройство, лежащее у вас дома, и представьте, что оставляете его в кладовке или подвале на 70 лет. Кто-то находит устройство после 70 лет забвения: оно вышло уже давно из строя, а некоторые компоненты вообще не подлежат восстановлению. Смогут ли будущие потомки это исправить? Сегодня устройства проектируются дешёвыми, недолговечными и одноразовыми. Предполагается, что если они сломаются, единственное оптимальное решение — выбросить и купить новое. Ремонтопригодность и долговечность для производителей невыгодны. Фактически, этот менталитет «используй и выбрось» способствует массовому электронному загрязнению. Общий объём электронных отходов во всем мире в 2021 году, по оценкам, достиг рекордных 57,4 млн тонн, то есть больше, чем вес Великой Китайской стены.

Возможность ремонтировать вещи, которыми мы владеем, имеет решающее значение для продления их срока службы. В октябре 2021 года американская Библиотека Конгресса одобрила поправки к Закону об авторском праве в цифровую эпоху (DMCA), которые предоставляют людям право доступа к своим потребительским устройствам в целях диагностики, ремонта и обслуживания. Это часть общей инициативы по расширению так называемого «права на ремонт» на национальном уровне в США (аналогичные усилия предпринимаются и в ЕС).


Читать дальше →

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

Время на прочтение19 мин
Количество просмотров17K

Продолжение последней версии руководства по написанию модулей ядра от 2 июля 2022. В первой половине текущей части мы подробнее разберём структуру и принцип действия модулей, узнаем, чем отличается пространство пользователя от пространства ядра, а также немного поговорим об использовании памяти. Вторая же половина будет посвящена одному из типов модулей — драйверам устройств, основы работы с которыми мы также подробно рассмотрим.
Читать дальше →

Пишем конфигурацию для Neovim

Время на прочтение13 мин
Количество просмотров55K

Привет, сегодня будет писать конфигурацию для терминального редактора Neovim на чистом Lua. Мы не будем использовать VimScript от слова совсем. Я расскажу в чем плюсы создания таких конфигураций, как соблюдать KISS (Keep It Stupid Simple) все время дополняя такие конфигурации, а также расскажу про полезные плагины для веб-разработки и не только.

Бегом под кат!

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

История одного перехода с gcc на clang

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


На прошлой неделе, после нескольких месяцев разработки, вышла очередная версия языка программирования NewLang. Одной из технических особенностей данного релиза является переход на использования компилятора clang вместо gcc.

Данная статья описывает причины смены компилятора, некоторые особенности этого процесса, проблемы, которые приходилось решать и итоговые выводы.

Автор надеется, что эта информация может оказаться полезной и позволит сэкономить кучу времени, если заранее знать некоторые подводные камни, а так же положительные стороны от перехода на clang.
Читать дальше →

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

Время на прочтение19 мин
Количество просмотров50K

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

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

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

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

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

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

Время на прочтение14 мин
Количество просмотров14K

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 мин
Количество просмотров1.9K

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

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

Читать далее

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

Время на прочтение25 мин
Количество просмотров30K

В этой статье мы рассмотрим как устроен драйвер сетевого адаптера для 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 мин
Количество просмотров12K

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

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

Вклад авторов