Обновить
374.97

Linux *

Пишем под *nix

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

Resolve IP адресов в Linux: понятное и детальное описание

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

Настройка сетевого взаимодействия сервисов не самая простая задача и часто осуществляется без глубокого понимания как требуется настраивать систему и какие настройки на что влияют. После миграции сервисов в docker контейнерах с centos 6 на centos 7 я столкнулся со странным поведением вебсервера: он пытался присоединиться к сервису по IPv6, а сервис же слушал только IPv4 адрес. Стандартный совет в такой ситуации — отключить поддержку IPv6. Но это не поможет в ряде случаев. Каких? В этой статье я задался целью собрать и детально объяснить как приложения resolve'ят адреса.

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

Linux-форензика в лице трекинга истории подключений USB-устройств

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

В рамках погружения в одну из дисциплин (в процессе обучения по специальности компбеза) я работал над одним занимательным проектом, который бы мне не хотелось просто похоронить в недрах папки «Универ» на внешнем винчестере.

Сей проект носит название usbrip и представляет собой небольшую консольную опенсорс утилиту для Linux-форензики, а именно для работы с историей подключений USB-устройств. Программа написана на чистом Python 3 (с использованием некоторых сторонних модулей) и не требует зависимостей помимо Python 3.x интерпретатора и пары строк из requirements.txt, разрешающихся одной строкой с помощью pip.

В этом посте я опишу некоторые возможности данного софта и оставлю краткий мануал со ссылкой на источник загрузки.

Снято! (… в смысле Cut!)
Читать дальше →

Компания LG объявила о выпуске открытой платформы WebOS Open Source Edition

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

LG Electronics сообщила о доступности webOS Open Source Edition, рассчитанной главным образом на разработчиков, разрешив другим компаниям использовать ее в своих устройствах. Это дает возможность другим компаниям задействовать webOS Open Source Edition в своих продуктах: телевизоры, IoT устройства, планшеты, или смартфоны.


palm


Версия 1.0 новоиспеченной webOS OSE оптимизирована для Raspberry Pi 3, однако поддержка новых платформ не за горами. Страница настройки содержит инструкции по сборке прошивки для загрузки с microSD карты. Для сборки необходима Ubuntu 14.04 LTS 64-bit, 4-х ядерный процессор Intel Core i5, 8 GiB ОЗУ и 100 GiB дискового пространства.

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

Заметка о новом интерфейсе linux kernel — gpio uapi

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

Начиная с версии ядра 4.6-r1 нам стал доступен новый интерфейс для взаимодействия с подсистемой ядра gpio. Теперь существует три официальных способа работы с gpio и получения от них прерываний. Нет смысла углубляться в потребности для данной подсистемы, для малой части это суровые будни, для другой части веселое хобби, и для всех вместе в ядре была предоставлена новая возможность взаимодействия.


Заметка носит популярный характер, так как основных преимуществ, которые шли в комплекте с нововведением, а именно упрощение работы с gpio в контексте ядра касаться не будем.

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

Процесс портирования драйверов устройств Linux

Время на прочтение4 мин
Количество просмотров11K
Здравствуйте, хаброчитатели!

Введение


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



Процесс переноса может занять от нескольких минут до более продолжительного промежутка времени. Зависит это не только от сложности драйвера, но и от того, с какой и на какую версию ядра вы собираетесь перейти (API имеет свойство меняться — отсюда лезут все проблемы), а также от качества реализации кода, бывает, что проще переписать, чем перенести, но об этом не будем.

К сожалению, я не могу прикрепить исходный код драйвера, но мы рассмотрим все проблемы, с которыми я и вы можете столкнуться в процессе переноса. Далее будет рассмотрен пример переноса простого драйвера c версии ядра 2.6.25 на 4.12.5, который расположен в drivers/serial/name_uart.c. Также нам очень поможет следующий ресурс 2.6.25 и 4.12.5, где можно посмотреть структуру ядра, а также исходные коды.
Читать дальше →

GObject: наследование и интерфейсы

Время на прочтение8 мин
Количество просмотров6.9K
В комментариях к прошлой статье часто высказывалось мнение, что система GObject не нужна ввиду наличия C++ и других высокоуровневых языков. Помимо чисто технических моментов, о которых уже поговорили в комментариях, хотелось бы затронуть другой аспект. Вероятно, большинство комментаторов видит смысл существования объектной системы GLib в упорном нежелании сишников-ретроградов пользоваться благами цивилизации и смиряться с неумолимой поступью прогресса. Вероятно, так оно и было на заре развития Glib/GTK, зародившихся в мире UNIX-систем, GNU, open-source, идей Столлмана, и т. п. Большая часть того поколения хакеров действительно предпочитали Си, в то время как C++ был относительно молод и неразвит и преимущества его использования казались не настолько очевидными.

Сегодня, разумеется, для новых проектов большинство из нас предпочтёт использование более удобных, лаконичных и безопасных языков, даже если будет знаком со всеми нюансами использования GObject. Однако не стоит упускать из виду, что за 20 с лишним лет существования GLib/GTK с их использованием были созданы тысячи приложений и библиотек, многие из которых активно развиваются и поныне тысячами программистов со всего мира. В них добавляется новый функционал, вылавливаются баги, их адаптируют к современным технологиям вроде HiDPI-экранов, Wayland, Vulkan, и т. д. Для того, чтобы читать (дополнять, исправлять) код таких проектов, необходимо иметь базовые знания объектно-ориентированных расширений для Си, о котором мы с вами ведём речь.

Засим милости прошу под кат. Тренируемся, как обычно, на кошках :)


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

Как киту съесть Java-приложение и не подавиться

Время на прочтение8 мин
Количество просмотров64K
Здравствуйте, уважаемые хабравчане! Сегодня я хотел бы рассказать о том, как «скормить» Java-приложение докеру, как при этом лучше действовать, а чего делать не стоит. Я занимаюсь разработкой на Java более 10 лет, и последние года три провёл в самом тесном общении с Docker, так что у меня сложилось определённое представление о том, что он может и чего не может. Но ведь гипотезы надо проверять на практике, не так ли?

Я представил весь процесс как старую добрую компьютерную игру с тёплым ламповым пиксель-артом.

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

На сайте докера можно ознакомиться с рядом рекламных посулов – а именно, с обещанием увеличить скорость разработки и развертывания аж в 13 раз и повысить портативность в разработке (в частности, избавиться о сакраментального «работает на моей машине»). Но соответствует ли это реальности?

Сейчас мы попробуем доказать/опровергнуть эти утверждения.
Читать дальше →

Анатомия .NET Core: как мы настроили NTLM под Linux

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

Мы продолжаем рассказывать про миграцию мобильного сервиса в ASP.NET Core и Docker. В этой статье будет идти речь про модуль WCF-клиента, упомянутый в предыдущей статье, NTLM-авторизацию и другие проблемы при его миграции. Сейчас расскажем, почему нам пришлось немного изучить анатомию и пощупать .NET Core изнутри.


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

Linux в одном файле для Macbook

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


TL;DR Можно уместить полноценный Linux Live дистрибутив в один файл, если вкомпилировать в ядро initramfs с корневой файловой системой. Компьютеры с UEFI умеют загружать такой файл напрямую, без помощи загрузчика типа GRUB. У меня получилось уместить дистрибутив с программами aircrack-ng, reaver и драйверами для карт Wi-Fi в файл размером 12 мегабайт (наверняка можно еще меньше).

Основные преимущества


  • Работает на любых компьютерах с UEFI — один и тот же файл будет работать на PC и Mac.
  • Не требует установки — достаточно скопировать один файл на EFI-раздел диска и указать в переменных NVRAM путь к этому файлу.
  • Не нужно устанавливать загрузчики GRUB, rEFInd — ядро Linux собранное с поддержкой EFI Stub можно грузить напрямую без промежуточного загрузчика.
  • Не нужны USB-флешки — скопированный на раздел EFI дистрибутив остается там навсегда, и его можно будет загрузить в любой момент. Он не занимает места на разделе основной системы, так как раздел EFI не используется в ОС.
  • Не изменяет процесс загрузки — систему можно загрузить один раз, без изменения порядка загрузки в настройках UEFI. Следующая перезагрузка компьютера загрузит обычную операционную систему. Никаких следов Linux в очередности загрузки не останется.
  • Совместимо с шифрованием диска FileVault и т.д. — файл копируется на EFI System Partition, специальный зарезервированный раздел диска. В компьютерах Mac его размер около 200 мегабайт. Он выделен под Boot Camp и обычно не используется
Читать дальше →

Книга «Linux API. Исчерпывающее руководство»

Время на прочтение19 мин
Количество просмотров39K
image Привет, Хаброжители! Недавно у нас вышел фундаментальный труд Майкла Керриска по программным интерфейсам операционной системы Linux. В книге представлено практически полное описание API системного программирования под управлением Linux.

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

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

Быстрый и безопасный мониторинг JVM-приложений с помощью магии BPF

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

Все мы встречались со сложными ошибками на продакшне, которые сложно поймать обычными средствами мониторинга. BPF — это технология ядра Linux, которая позволяет делать быструю и безопасную динамическую отладку прямо на запущенной работающей системе, без необходимости готовиться к этому заранее. JVM сама по себе имеет множество точек мониторинга для отслеживания сборки мусора, выделения объектов, вызовов JNI, даже вызовов методов — и всё это без необходимости в дополнительном инструментировании. Когда этих точек мониторинга недостаточно, ядро Linux и всевозможные бибилиотеки позволяют отслеживать системные вызовы, сетевые пакеты, события планировщика, время потраченное на доступ к диску, и даже запросы к базам данных.


В этом хабрапосте мы сделали текстовую расшифровку доклада Sasha Goldshtein, посвященного тому, как инструменты BPF можно использовать для мониторинга JVM-приложений на GNU/Linux, и чеклисту проверки производительности с использованием классических инструментов, таких как fileslower, opensnoop, strace — но всё это с использованием неинвазивной, быстрой и безопасной технологии BPF.


После ката будет множество картинок со слайдами. Осторожно, трафик! Картинки ужаты насколько можно, но не более того. Все они действительно нужны.


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

Обновляем расширение Intl в PHP 7 на Linux Ubuntu 16.04

Время на прочтение3 мин
Количество просмотров26K
Программисты делятся на два типа: консерваторы, для которых переход на новую версию равносилен перелёту на другую планету (если читаешь это из Windows XP — поздравляю, это ты); и Викторы Цои, чьи сердца и глаза требуют перемен, и обновляют всё и вся при первой возможности. Если ты второго типа, и у тебя уже стоит последняя версия PHP на последней LTS версии Ubuntu, но покоя не даёт то, что расширение Intl использует устаревшую версию библиотеки ICU, или тебе просто понравились картинки из «Аватара» — добро пожаловать под кат! (Картинок больше не будет.)

Аватар

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

Расширение и использование Linux Crypto API

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

[0] Интро


Криптографический API в Linux введён с версии 2.5.45 ядра. С тех пор Crypto API оброс всеми популярными (и не только) международными стандартами:


  • симметричного шифрования: AES, Blowfish, ...
  • хэширования: SHA1/256/512, MD5, ...
  • имитозащиты: hMAC-SHA1/256/512, hMAC-MD5, ...
  • AEAD: AES-GCM, ChaCha20-Poly1305, ...
  • генерации псевдослучайных чисел: FIPS, ...
  • асимметричного шифрования: RSA
  • согласования ключей: DH, ECDH
  • сжатия: Deflate, ZLIB

Эта криптография доступна и, в основном, используется различными подсистемами ядра (в kernel space): IPsec, dm-crypt и др. Воспользоваться функциями Crypto API из пространства пользователя (user space) также возможно через Netlink-интерфейс, в который, начиная с версии 2.6.38 ядра, введено семейство _AFALG, предоставляющее доступ к криптографии ядра из user space кода. Однако, существующего функционала иногда недостаточно, таким образом появляется необходимость расширения Crypto API новыми алгоритмами.

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

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

GObject: основы

Время на прочтение7 мин
Количество просмотров22K
GObject — часть библиотеки GLib, реализующая объекто-ориентированнные расширения для чистого Си. Подобная концепция, помимо самой GLib, используется в таких проектах, как GStreamer, GSettings, ATK, Pango и весь проект GNOME в целом, а также в большом количестве прикладных приложений: GIMP, Inkscape, Geany, Gedit и многих других. Большое количество языков программирования, начиная от таких мейнстримовых, как Python и Java, и заканчивая изысками вроде Haskell или D, имеют привязки к GLib/GTK+, а для значительного количества языков биндинги к GTK+ вообще является единственным способом построения GUI.

В отличие от других схожих проектов, GObject отличают архитектурные особенности, целью которых является лёгкая и прозрачная реализация привязок библиотек, написанных с применением чистого Си и GObject, к другим языкам программирования, в том числе с динамической типизацией и управлением памятью при помощи сборщика мусора. Именно этим объясняется некоторое ощущение переусложнённости, которое может возникнуть у программиста, приступившего к знакомству с GObject API. Тем не менее, эта система очень продуманная и логичная, так что проблем с пониманием всего изложенного ниже у программиста, знакомого с C++ или Java, возникнуть не должно.

Данная статья иллюстрирует самые основы работы с объектной системой типов GLib.
image
Читать дальше →

Разработка драйвера PCI устройства под Linux

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

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

В качестве подопытного выступит интерфейс датчиков перемещения ЛИР940/941. Это устройство, отечественного производства, обеспечивает подключение до 4 энкодеров с помощью последовательного протокола SSI поверх физического интерфейса RS-422.

Установка Linux без .ISO и виртуализации

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

Установка Linux без .ISO и виртуализации


Создание файловой системы, установка и клонирование Debian и Ubuntu с помощью скриптов radish.


1. Назначение и возможности скриптов radish


Обычно установка системы Linux производится путём запуска какой-либо программы-установщика, поставляемой разработчиками дистрибутива. Это производится либо непосредственно на компьютере, на котором производится установка, либо в какой-либо изолированной среде, например, используя виртуализацию. Описываемые ниже процедуры следуют этим принципам только в самом минимально необходимом виде. При создании образа системы какие-либо установщики сводятся к генератору минимальной системы debootstrap и интерфейсу менеджера пакетов apt (оба поверх менеджера пакетов dpkg), а вместо виртуализации используется chroot.


Установка образа диска на устройство производится минимальным скриптом, который вообще никак не использует установщик или менеджер пакетов, тем не менее создавая конфигурацию, полностью управляемую менеджером пакетов в образе диска — все установленные компоненты, включая загрузчик и ядро, могут обновляться и заменяться теми же действиями менеджера пакетов, которые бы использовались на системе, установленной стандартным установщиком дистрибутива.


Скрипты находятся на сервере Github и доступны по ссылке.

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

Пришло время для открытых и свободных процессоров?

Время на прочтение5 мин
Количество просмотров18K
Раскрытие уязвимостей Meltdown и Spectre снова привлекло внимание к багам на аппаратном уровне. Многое сделано для улучшения (всё ещё слабой) безопасности нашего программного обеспечения, но всё напрасно, если оборудование даёт сбой. Процессоры в наших системах по-прежнему, в основном, проприетарные и уже преподнесли ряд неприятных сюрпризов (например, в движке Intel Management Engine). Поэтому встаёт естественный вопрос о переходе на железо open-source, как мы сделали с нашим программным обеспечением. Такой переход вполне возможен и даёт ряд преимуществ, хотя и не является панацеей.

Учитывая сложность современных процессоров и свирепый рынок, где они продаются, их разработка по принципам open-source может показаться необычной идеей. Но в этой области уже есть серьёзные инициативы; так что идея свободного дизайна CPU — не просто фантазия. Небольшое исследование темы выявляет несколько проектов; хотя дальнейший список явно не полон.
Читать дальше →

Стеганография в файловой системе

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

Привет, Хабр.


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


Я сделал проект по скрытому хранению информации в файловой системе (далее ФС).
Это можно применить для кражи конфиденциальной информации в образовательных целях.


Image


В виде опытного образца была выбрана весьма старенькая линуксовая ФС ext2.


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

Telegram-бот для Redmine. Как упростить жизнь себе и людям

Время на прочтение12 мин
Количество просмотров31K
В любой компании, использующей систему управления проектами и задачами, рано или поздно возникает желание объединить её с каким-нибудь популярным мессенжером для упрощения коммуникаций. Особенно если через эту систему идёт взаимодействие с клиентами.

В статье речь пойдёт о том, как подружить Redmine с Telegram и при этом не поломать имеющиеся бизнес-процессы.


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

CoffeeMiner: взлом WiFi для внедрения криптомайнера в HTML-страницы

Время на прочтение7 мин
Количество просмотров30K
Предупреждение: эта статья и проект имеют исключительно образовательные цели.

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

Цель этой статьи — объяснить, как провести атаку MITM (человек посередине) для внедрения определённого JavaScript-кода в страницы HTML, чтобы заставить все устройства, подключённые к WiFi, майнить криптовалюту для злоумышленника.

Задача состоит в создании скрипта, который проводит автономную атаку в сети WiFi. Это то, что мы назвали CoffeeMiner, поскольку атаки такого типа можно проводить в кафе.
Читать дальше →

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