Все потоки
Поиск
Написать публикацию
Обновить
232.53

Linux *

Пишем под *nix

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

Флаг EPOLLEXCLUSIVE и проблема неравномерного распределения соединений в Nginx на Linux

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

Совсем недавно, 25 января 2022 года вышел новый релиз Nginx - 1.21.6, в котором исправлена проблема неравномерного распределения входящих соединений между несколькими worker процессами в дефолтной конфигурации на Linux системах. Если конкретнее - use epoll, accept_mutex off, reuseport выключен.

В данной конфигурации при определенном характере нагрузки большинство входящих в Nginx соединений обрабатывается лишь одним worker процессом. 

Насколько я понимаю, эта проблема существует уже более пяти лет и берет начало в версии 1.11.3 (Jul 2016), когда в Nginx по умолчанию отключили accept_mutex, а вместо него стали полагаться на флаг EPOLLEXCLUSIVE, появившийся в ядре Linux 4.5.

Стоит заметить, что проблема балансировки входящих соединений при использовании механизма epoll и флага EPOLLEXCLUSIVE более глобальна и касается не только Nginx, а любых сетевых приложений, работающих по аналогичной схеме.

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

Читать далее

Компания SUSE открыла код NeuVector

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

Компания SUSE объявила о выпуске NeuVector - платформы, обеспечивающей комплексную безопасность контейнеров. Это решение предназначено для выполнения   контейнеризированных приложений в среде нулевого доверия (zero trust). База кода NeuVector уже доступна сообществу на GitHub.

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

Образы контейнеров NeuVector стали открытым ПО и могут быть развернуты на любом кластере Kubernetes. Пользователи SUSE Rancher могут установить их из каталога приложений. В следующих версиях интеграция этих двух продуктов станет еще более плотной. Разработчики NeuVector придерживаются той же стратегии, что и SUSE, и предлагают решение для всех популярных решений для управления контейнерами – SUSE Rancher, Red Hat OpenShift, VMware Tanzu, Google GKE, Amazon EKS, Microsoft Azure AKS и других.

Проект NeuVector позволяет пользователям SUSE Rancher обеспечить требуемый уровень безопасности на протяжении всего жизненного цикла приложения и решать все необходимые для этого задачи: сегментирование сети, мониторинг и анализ трафика, сканирование уязвимостей в контейнерах, управление их конфигурацией и проверка на соответствие требованиям регуляторов, профилирование рисков, обнаружение угроз и реагирование на инциденты ИБ.

Исходный код предварительного релиза SUSE NeuVector опубликован на GitHub:

Для Controller, Enforcer и Scanner

Для Manager

Документация для всех компонентов

Читать далее

IO_URING. Часть 3

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

Всем привет! Симулятор написания echo-server'ов на связи. Сегодня завершающая часть из цикла посвященного io_uring. В этом материале мы поговорим о настройке io_uring, режимах работы и перформансе. Полученные знания используем чтобы улучшить конкурента netpoller'у из предыдущей статьи. 

Читать далее

Sysbox: Изолированный container runtime. Краткий обзор и настройка

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

О Sysbox в 3-х предложениях:

- Sysbox - это "VM-like" контейнеры с возможностью запускать внутри системный софт: Docker, Kubernetes, Systemd, вложенные контейнеры и т.д. 
- Любой софт, работающий на виртуальной машине, должен также работать в контейнере без проблем и с надежной изоляцией.
- Никаких сложных настроек, все настраивается за несколько шагов.

Если тема заинтересовала, то в статье проведем краткий обзор и даже запустим изолированный контейнер на локальной машине.

Читать далее

Как скрестить Коня и Трепетную лань

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

«Бить (Bash) или не бить», - спрашивал один датский принц. Вот и у меня возник аналогичный вопрос, когда у нас в компании появился сервер сборки Bamboo. Как можно в задании Bamboo, выполняющем скрипт Bash или Cmd, написать команды, одновременно понятные интерпретатору командной строки Windows и оболочки Linux?

У нас в компании в качестве скриптового языка планов Bamboo используется кроссплатформенный язык Python. Но для запуска скриптов в Windows и Linux используется разный код.

Команды, понятные Linux, будут обработаны с ошибкой в Windows и наоборот. Что делать в этой ситуации?

Читать далее

Минималистичный универсальный Linux-ПК со странным названием minimum viable computer: что он умеет

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

На днях разработчик по имени Брайан Бенчофф (Brian Benchoff) анонсировал начало работы над проектом, который получил название minimum viable computer или MVC. Это миниатюрный ПК на базе Linux с базовыми возможностями, которые, впрочем, можно использовать для самых разных целей.

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

Разработка графических приложений в WSL2

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

Данная статья будет неким дополнением опубликованной ранее (не мной) статьи. Чтобы не повторять написанное, по ссылке выше есть информация о требованиях к работе wsl2 на windows 10, как его включить, настроить, обновить и запустить графическую среду. В текущей статье я расскажу о том, как вести разработку графических приложений в wsl используя не только visual studio code со спец. плагином, а любую среду разработки.

Читать далее

Keylime — ключ от облака

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

Если ваша организация управляет сотнями или тысячами (а может сотнями тысяч) серверов, как убедиться, что они не взломаны? Вы можете использовать традиционную программную систему обнаружения вторжений (Intrusion Detection System, IDS), но она по-прежнему уязвима для сложных программных атак. Что вам действительно нужно, так это создать аппаратный корень доверия, который можно использовать для проверки самых первых шагов процесса загрузки и распространения этого доверия вверх на каждый уровень вашей системы. Аппаратный модуль Trusted Platform Module (TPM) обеспечивает такую ​​опору для настоящего решения удаленной аттестации.

Keylime, проект песочницы Cloud Native Computing Foundation, предоставляет масштабируемое решение для аттестации измеряемой загрузки, используя TPM и Linux архитектуру измерения целостности (Integrity Measurement Architecture, IMA), чтобы предоставить платформу удаленной аттестации, безопасную доставку полезной нагрузки и структуру отзыва, и дать вам полный контроль над политикой аттестации и устранением атак.
Читать дальше →

Go и плагины

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

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

Примерно год назад передо мной встала задача добавить поддержку плагинов в приложение на Go. Задача стояла не особо остро, и руки до решения дошли только сейчас. Ответ, однако, оказался не столь очевидным, сколь хотелось бы. Идеального решения, как по мне, нет, поэтому попытаюсь максимально объективно рассмотреть все три имеющихся.

Читать далее
Привет, Хабр! Недавно мы провели опрос, чтобы выяснить, что читатели Хабра думают об использовании открытых продуктов в финтехе — строго регулируемой и консервативной отрасли. Вопросы нам помогли составить эксперты компании Osnova, создающей платёжный процессинг на базе Open Source. Мы проанализировали 558 ответов и заметили некоторые закономерности — ими и поделимся в этом посте.
Читать далее

Диагностика виртуальной сети в Linux. BPFTrace и skbtrace в опенсорсе

Время на прочтение9 мин
Количество просмотров6.1K
Привет! Меня зовут Сергей Кляус, и я как разработчик виртуальной сети сопровождаю создателей приложений, размещённых в Yandex.Cloud. При этом диагностические возможности самого облака ограничены: мы не видим метрики пользовательских виртуальных машин, например количество TCP retransmissions, а записывать и анализировать огромные дампы всего сетевого трафика с помощью tcpdump дорого и трудно из-за ограничений безопасности.
К счастью, динамическая трассировка позволяет получить лучшее от двух миров: исполнять произвольный код в момент увеличения метрики, а в самом коде печатать тело пакета. Например, недавно мы диагностировали проблемы с TCP-соединениями у одного из наших managed-сервисов, и оказалось, что теряются на самом деле UDP-пакеты. Гипотеза требовала уточнения, хотя корреляция между ростом метрики и сбоем была поначалу очевидна. В современном Linux динамическая трассировка реализована через eBPF и утилиту BPFTrace, но постепенно мы накопили набор типовых сценариев их использования и сделали обёртку над BPFTrace. Она называется skbtrace и доступна на GitHub. Про неё я и расскажу под катом.
Читать дальше →

Стартуем RISCV Sipeed LicheeRV — Nezha CM C906 без официального SDK

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

Получив свой экземпляр (заказал еще до того как вышел LicheeRV Dock), я конечно же полез за официальной инструкцией к производителю...

В принципе, я никогда не интересовался продуктами вроде Banana Pi или Orange Pi от Allwinner, взглянув на официальное чудо, я понял почему от этих продуктов все так воротят нос:

— Прошивки для не китайцев "заботливо" лежат на MEGA (хочешь качать - плати деньги...)

— Для прошивки карт используется "замечательный" инструмент под названием PhoenixCard (судя по китайским форумам он не слушается даже китайцев), который работает под Windows (что всегда хорошо!)

— Официальный "SDK" обернут вместе c rootfs и разбит на архивы общей суммой >10 Gb (да-да и лежит на MEGA - то есть все равно заплатишь)

— И изюминка - все образы в комплекте расчитаны на карты ёмкостью больше 16 Gib (у наших друзей написано 16 GB - card_needs_≥16GB.txt)

Квест про реверс (он в конечном счете не понадобился) и печальное ковыряние палкой данного продукта жизнедеятельности (то что я собрал с помощью SDK, так и не заработало...) мы опустим, так как, я наконец наткнулся на гайд для Sipeed Nezha от дяди Samuel'a Holland'a спасибо ему за это огромное...

Читать далее

Разработка веб приложений на C/С++

Время на прочтение6 мин
Количество просмотров16K
В этой статье я бы хотел рассказать про создание веб приложений на С/С++ с использованием стека Nginx+fastcgi. Если быть более точным, то статья больше относится к сайтам, то есть к отдаче контента. Есть достаточно старая, но хорошая статья habr.com/ru/post/154187 Хотя тех пор прошло много времени, вышли новые стандарты С++. Я хочу в этой статье описать некоторое логическое продолжение, так как думаю, что тема будет многим интересна.
Читать дальше →

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

МойОфис для частных пользователей вышел на Linux. Изучаем офисные редакторы компании

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

В апреле 2021 года, параллельно с началом государственной программы предустановки российского ПО на умные устройства, МойОфис впервые выпустил бесплатные настольные редакторы документов для частных лиц. Тогда мы делали ставку только на программы для Windows и macOS, так как считали, что именно эти системы преобладают на домашних компьютерах. Но оказалось, значительная часть обычных пользователей нуждается и в версии для Linux. Весь прошлый год наша служба технической поддержки и другие коллеги получали множество просьб о выпуске такого решения.

Встречайте наш новый продукт — «МойОфис Стандартный. Домашняя версия», который подходит для различных операционных систем Linux и полностью совместим с российскими операционными системами Astra Linux и «Альт». Обзор его возможностей — под катом.

Читать далее

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

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

С изучением языков возникает проблема переключения раскладок клавиатуры. Когда два языка все просто, жамкаешь ALT+SHIFT (или что там у вас) и переключаешься на следующий язык. И ты всегда знаешь на какой именно язык переключился. Когда раскладок становится хотя бы 3 это уже вызывает проблемы. Потому что нажать ALT+SHIFT нужно один или несколько раз и непонятно сколько именно, не посмотрев в угол экрана.

Читать далее

Когда TCP быстрее UDP

Время на прочтение6 мин
Количество просмотров50K
Я знаю отличную шутку про UDP, но не факт, что она до вас дойдёт.

Все, кто хоть раз в жизни, по работе открывал файл /etc/services знают, что одни сетевые службы используют транспортный протокол TCP, другие же — UDP. Каждый из них имеет свою область применения. Если надёжность соединения имеет приоритет над скоростью передачи данных, то TCP предпочтительнее. Например, для SMTP, или IMAP больше подходит TCP. Обратное тоже верно там, где важна скорость передачи данных, а потеря дейтаграмм или их порядок не критичны — используют UDP. К их числу относятся SNMP, DNS, VoIP и другие службы.
Читать дальше →

makesure — make с человеческим лицом

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

Многие ли из вас используют всевозможные вспомогательные shell-скрипты в своих проектах? Это также могут быть Python или Perl скрипты. Обычно такие скрипты используются на этапе сборки или для других задач автоматизации проекта.


Примерами таких задач могут служить:


  • вспомогательные скрипты для Git,
  • запуск тестов/линтеров,
  • запуск необходимых докер контейнеров,
  • запуск БД-миграций,
  • собственно, сборка проекта,
  • генерация документации,
  • автоматизация публикации релизов,
  • развертывание и т.д.

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


Make — пожалуй, наиболее известный из подобных инструментов.


Похожий функционал известен разработчикам nodejs и любим ими в виде скриптов в package.json (npm run-scripts). Ветераны Java вспомнят Ant.


Но nodejs/Ant требуют установки, make хоть и способен выполнять функции task runner довольно неудобен в этой роли, будучи на самом деле очень олдскульным build tool со многими вытекающими "особенностями".


А shell-скрипты требуют некоторой системы и неизбежной рутины в написании (обработка аргументов, help-сообщения и т.д.).


Хотя, например, Taskfile представляет прекрасный шаблон для подобных скриптов.


Так и родился makesure.

Что это?

Опыт организации диалога с модулями ICP DAS I-7000 по RS-485 используя только bash

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

В моем конкретном случае все казалось нерадужно, я опускал руки, думал о неизбежности начать писать на Си, компилировать ядро, уходить в отшельники для отладки приложения и т.п. Нельзя сказать что результата в Bash не было, он просто не устраивал. Пока программированием по несколько строк, не отрываясь от повседневных задач сисадмина, код не "созрел" до удовлетворительного результата.

Читать далее

Как простой баг повреждения памяти ядра Linux может привести к полной компрометации системы

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

Введение


В этом посте описывается простой в реализации баг блокировки ядра Linux и то, как я использовал его против ядра Debian Buster 4.19.0-13-amd64. В посте рассматриваются варианты устранения бага, препятствующие или усложняющие использование подобных проблем злоумышленниками.

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

Многие описанные здесь отдельные техники эксплойтов и варианты их устранения не новы. Однако я считаю, что стоит объединить их в одну статью, чтобы показать, как различные способы устранения взаимодействуют друг с другом на примере достаточно стандартного эксплойта с использованием освобождённой памяти.
Читать дальше →

IO_URING. Часть 2. Let's GO

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

Всем привет! Продолжаем разбираться с io_uring. Сегодня попробуем использовать io_uring для решения прикладных задач. А именно напишем полноценный TCP сервер. Для этого мигрируем наши приложения с C на GO. Не буду писать длинные вступления, вперед экспериментировать!

Читать далее

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