Отчет за развитието на FreeBSD за тримесечието на 2019 година

Публикувано отчет за периода от юли до септември 2019 година за развитие на проекта FreeBSD. Сред промените, които могат да се отбележат:

  • Общи и системни въпроси
    • Ядрото на екипа в общи линии одобри възможността за включване в системата на код, предоставен под лиценз BSD с допълнително споразумение за използване на патенти (BSD+Patent), но решението за включване на всеки компонент в системата под тази лицензия трябва да бъде одобрено отделно;
    • Състоя се първото заседание на работната група, създадена за провеждане на миграция на изходните кодове от централизирана система за управление на изходния код Subversion в децентрализирана система Git. Дискусията относно целесъобразността на миграцията все още продължава и много въпроси все още предстои да се решат (например, как да се процедира с contrib/, необходимо ли е да се прегенерират хешовете в текущото git-репозитория и как най-добре да се реализира тестването на комитите);
    • От NetBSD пренесен инструментариум KCSAN (Kernel Concurrency Sanitizer), който позволява откриване на условия на конкуренция между потоци в ядрото, изпълнявани на различни CPU;
    • Работи се по използване на вградения асемблер (IAS) в Clang вместо асемблера от GNU binutils;
    • Инфраструктурата за емулативна среда Linux (Linuxulator) е адаптирана за работа на архитектура ARM64. Осъществен е системен повик «renameat2». Утилитата strace е допълнена за диагностика на проблеми в изпълними файлове Linux, стартиращи в Linuxulator. Решен е проблемът с възникващите сривове при свързване на изпълними файлове със свежия glibc. Портовете с Linux-компоненти за Linuxulator са обновени до CentOS 7.7;
    • В рамките на програмата Google Summer of Code студентите успешно реализираха шест проекта: подготвена е реализация на унифицирана (IPv4/IPv6) утилита ping, разработени са инструменти за тестване на защитни стени и откриване на грешки в ядрото (Kernel sanitizer), предложен е модул mac_ipacl, написан е код за компресиране на виртуална памет и е извършена работа по отделянето на процеса на изграждане на портове от локалната инсталация;
    • Проектът за fuzzing-тестиране на ядрото FreeBSD с помощта на система продължава. syzkallerПрез отчетния период с помощта на syzkaller бяха открити и отстранени повече от десет грешки. За стартиране на syzkaller в виртуални машини на базата bhyve е выделен отделен сървър, а с помощта на
      syzbot е организирана проверка на различни подсистеми на FreeBSD в инфраструктурата на Google. Организирана е предаването на информация за всички сривове в услугата backtrace.io за улесняване на тяхното групиране и анализ;
    • Работи се по обновление на реализацията на zlib на ниво ядро.
      Свързаният с компресия код е преведен от zlib 1.0.4, пуснат преди повече от 20 години, на актуалната кодова база zlib 1.2.11. За унификация на достъпа до zlib в ядрото са добавени функции compress, compress2 и uncompress. Кодът, осигуряващ работата на протокола PPP от подсистемата netgraph, е преведен да използва системната имплементация на zlib, вместо собствена версия на тази библиотека. На новия zlib са преведени и подсистемите kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor,
      if_mxge, bxe updated и ng_deflate;
    • Развива се нов интерфейс на ядрото sysctlinfo, позволяващ намирането на елементи в базата параметри sysctl, обработвани в формата MIB (Management Information Base), и предаването на информация за обектите в потребителското пространство.
  • Сигурност
    • Разработен е модул на ядрото mac_ipacl, базиран на TrustedBSD MAC Framework и реализиращ система за контрол на достъпа до настройките на мрежовия стек за jail-окружения. Например, с помощта на mac_ipacl администраторът на хост-системата може да забрани на потребителя root в jail-окружението да променя или задава IP адреси или параметри на подпоставки за определени мрежови интерфейси. Предложената система за мандатно управление на достъпа позволява позволява да се задават списъци с IP адреси и подпоставки, допустими за Jail, да забранява установяването на определени IP и подпоставки в Jail или да ограничи промяната на параметри само за определени мрежови интерфейси;
    • Компанията Intel предаде проекту порта на софтуерния стек TPM 2.0 (Trusted Platform Module) за взаимодействие с чипа за безопасни изчисления, който обикновено се използва за удостоверено зареждане на фърмуер и зареждащи програми на ОС. Компонентите на стека са представени под формата на портове securtity/tpm2-tss, security/tpm2-tools и security/tpm2-abrmd. Портът tpm2-tss включва библиотеки за използване на API TPM2, tpm2-tools предоставя команди за изпълнение на операции с TPM, а tpm2-abrmd съдържа фонов процес с имплементация на компонентите TPM Access Broker и Resource Manager, мултиплексирващи заявките от различни потребители на TPM към едно устройство. Освен удостоверено зареждане, TPM във FreeBSD може да се използва за усилване на сигурността на Strongswan IPsec, SSH и TLS чрез извършване на криптографски операции на отделен чип;
    • Ядрото за архитектурата amd64 е адаптирано за зареждане с приложение на техниката W^X (write XOR execute), която подразбира, че страниците с памет не могат да бъдат достъпни едновременно за запис и изпълнение (ядрото вече може да се зарежда с приложения на изпълними страници памет, за които е забранен запис). Новият метод за защита на ядрото е включен в клон HEAD и ще бъде част от версиите на FreeBSD 13.0 и 12.2;
    • За системните повиквания mmap и mprotect реализиран макрос PROT_MAX(), който определя допустимия набор от флагове за ограничения на достъпа при бъдещи промени (PROT_READ, PROT_WRITE, PROT_EXEC). С помощта на PROT_MAX() разработчикът може да забрани преминаването на областта на паметта в категория изпълнима или да поиска памет, която не позволява изпълнение, но по-късно може да бъде преместена в изпълняема. Например, областта на паметта може да бъде отворена за запис само за времето на динамично свързване или генериране на код JIT, но след приключване на записа да бъде ограничена само до четене и изпълнение, и в случай на компрометиране, нападателят няма да може да разреши запис за този блок памет. В допълнение към PROT_MAX() е реализиран sysctl vm.imply_prot_max, при активиране на който допустимият набор от флагове се определя на базата на оригиналните параметри на първото извикване на mmap;
    • За усилване на защитата срещу експлоатация на уязвимости, освен техниката за рандомизация на адресното пространство (ASLR), е предложен механизъм за рандомизация на отместванията на указателите, адресиращи началния кадър на стека и структури, разположени в стека с информация за средата, параметри за стартиране на програмата и данни за изпълними образи във формат ELF;
    • Извършена е работа по премахването на небезопасната функция gets от libc (от версия C11 тази функция е изключена от спецификацията) и коригиране на портовете, които все още я използват. Изменението се планира да бъде предложено във FreeBSD 13.0;
    • Започнат е експериментален проект за създаване на средства за оркестрация на jail-окружения на база фреймворка pot за създаване и експортиране на образи, реализиран по аналогия с Docker, и драйвера nomad, предоставящ интерфейс за динамично стартиране на приложения в jail-окружение. Предложената модел дава възможност да се разделят процесите на създаване на jail-окружия и разгръщане на приложения в тях. Една от целите на проекта е да предостави средство за манипулация на jail-ите като контейнери в стил Docker;
  • Системи за съхранение и файлови системи
    • От NetBSD в утилитата „makefs“ е пренесена поддръжка на файловата система FAT (msdosfs). Подготвените промени позволяват създаването на образи на ФС с FAT без използване на драйвера md и без права root;
    • Завършена е ревизия на драйвера на подсистемата FUSE (File system in USErspace), който позволява разработването на файлови системи в потребителското пространство. Първоначалният драйвер съдържаше много грешки и беше базиран на версия FUSE 7.8, пусната преди 11 години. В рамките на проекта за модернизация на драйвера е реализирана поддръжка на протокола FUSE 7.23, добавен е код за проверка на правата на достъп от ядрото (“-o default_permissions”), добавени са изчаквания VOP_MKNOD, VOP_BMAP и VOP_ADVLOCK, осигурена е възможност за прекратяване на FUSE операции, добавена е поддръжка на безименни канали и unix-сокети в fusefs, появи се възможността за използване на kqueue за /dev/fuse, разрешено е актуализацията на параметрите на монтиране чрез “mount -u”, добавена е поддръжка на експортиране на fusefs чрез NFS, реализирано е отчитане на RLIMIT_FSIZE, добавени са флагове FOPEN_KEEP_CACHE и FUSE_ASYNC_READ, извършени са значителни оптимизации на производителността и подобрена е организацията на кеширането. Новият драйвер е включен в клоновете head и stable/12 (включен в FreeBSD 12.1);
    • Работата по внедряването на NFSv4.2 (RFC-7862) за FreeBSD почти завършва. Основното внимание в отчетния период беше насочено към тестването. Завършени са тестове за проверка на съвместимостта с реализиране от Linux, но все още продължава проверката на работата на сървъра pNFS с NFSv4.2. В общи линии кодът вече се разглежда като готов за интеграция в клоновете FreeBSD head/current. В новата версия на NFS е добавена поддръжка на функциите posix_fadvise, posix_fallocate, режимите SEEKHOLE/SEEKDATA в lseek, операции за локално копиране на части от файл на сървъра (без предаване на клиента);
  • Поддръжка на оборудване
    • Започна проект за подобряване на работата на FreeBSD на лаптопи. Първото устройство, за което беше проведен одит на поддръжката на хардуера в FreeBSD, е лаптопът Lenovo X1 Carbon от седмо поколение;
    • CheriBSD, клон на FreeBSD за изследователска архитектура на процесора CHERI (Capability Hardware Enhanced RISC Instructions), обновен за поддръжка на предстоящия ARM Morello процесор, който ще поддържа система за управление на достъпа до паметта CHERI, основаваща се на модела за защита на проекта Capsicum. Чипът Morello планират се очаква да бъде пуснат през 2021 г. Разработчиците на CheriBSD също продължават да следят развитието на еталонния прототип CHERI, основан на архитектура MIPS;
    • Разширена е поддръжката на чипове RockChip RK3399, използвани в платките RockPro64 и NanoPC-T4. Най-значителното подобрение е поддръжката на eMMC и разработването на нов драйвер за използвания на платката контролер eMMC;
    • Продължава работата по реализиране на поддръжка на ARM64 SoC Broadcom BCM5871X с ARMv8 Cortex-A57 процесори, насочени към използване в рутери, шлюзове и мрежови хранилища. През отчетния период
      разширена е поддръжката на iProc PCIe и е добавена възможността за използване на хардуерни криптографски операции за ускорение на IPsec.
      Интеграцията на кода в клона HEAD се очаква през четвъртото тримесечие;
    • Отбелязват се значителни постижения в разработката на порта FreeBSD за платформата powerpc64. Основното внимание е насочено към осигуряване на качествена работа на системите с процесори IBM POWER8 и POWER9, но опционално се поддържа работа и на старите Apple Power Mac, x500 и Amiga A1222. Ветката powerpc*/12 продължава да се доставя с gcc 4.2.1, а ветката powerpc*/13 скоро ще бъде преведена на llvm90. От 33306 порта успешно се компилират 30514;
    • Продължава портироването на FreeBSD за 64-битовия SoC NXP LS1046A, базиран на процесора ARMv8 Cortex-A72 с интегриран двигател за ускорение на обработката на мрежови пакети, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 и USB 3.0. През отчетния период е реализирана поддръжка за USB 3.0, SD/MMC, I2C, мрежови интерфейс DPAA и GPIO. Планира се поддръжка за QSPI и оптимизация на производителността на мрежовия интерфейс. Завършването на работата и включването в ветката HEAD се очаква през четвъртото тримесечие на 2019 година;
    • Обновен е драйверът ena с поддръжка на второ поколение мрежови адаптери ENAv2 (Elastic Network Adapter), използвани в инфраструктурата Elastic Compute Cloud (EC2) за организиране на връзка между възлите EC2 с скорости до 25 Gb/s. В драйвера ena е добавена и тествана поддръжка за NETMAP, а също така е проведена адаптация на разпределението на паметта за включване на режима LLQ в средите на Amazon EC2 A1;
  • Приложения и система на портовете
    • Актуализирани са компонентите на графичния стек и портовете, свързани с xorg. Портовете, които използват USE_XORG и XORG_CAT, са преминали на фреймуърка USES вместо да извикват bsd.xorg.mk чрез bsd.port.mk. Подобни портове вече включват флага «USES=xorg» в make-файловете. Функционалността XORG_CAT е отделена от bsd.xorg.mk и сега се активира чрез флага «USES=xorg-cat». Добавен е инструментариум за директно формиране на портове xorg от git репозиторий;
      freedesktop.org, което, например, позволява формирането на портове за все още не издадени версии. В бъдеще се планира подготовка на инструментариум за използване на системата за компилация meson вместо autotools за изграждане на портове xorg.

      Извършена е работа по почистване на стари портове xorg, свързани с вече неподдържани компоненти, например, премахнат е порт x11/libXp, а портовете x11/Xxf86misc, x11-fonts/libXfontcache и graphics/libGLw са преминали в категорията остарели;

    • Извършена е работа по подобряване на поддръжката на Java 11 и по-нови версии в FreeBSD, а също така и по портироването на някои промени в ветката на Java 8. След като за FreeBSD е реализирана поддръжка на новите функции на Java 11, като Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger, DTrace, Javac Server, Java Sound и SCTP, работата е преминала към осигуряване на преминаване на всички тестове за съвместимост. Броят на провалите при преминаване на тестовете е намален от 50 на 2;
    • Работният плот KDE Plasma, KDE Frameworks, KDE Applications и Qt се поддържат актуални и са обновени до най-новите версии;
    • Портовете с работния плот Xfce са актуализирани до версия 4.14;
    • Дървото на портовете FreeBSD премина границата от 38000 порта, а броят на незатворените PR малко надхвърля 2000, от които 400 PR все още не са разгледани. През отчетния период са направени 7340 промени от 169 разработчици. Два нови участника (Santhosh Raju и Dmitri Goutnik) получиха права за комитване. Публикувана е нова версия на пакетния мениджър pkg 1.12 с поддръжка на overlay в дървото на портовете и почистване на bsd.sites.mk. Сред значителните обновления на версиите в портовете се отбелязват: Lazarus 2.0.4, LLVM 9.0, Perl5.30, PostgreSQL 11, Ruby 2.6, Firefox 69.0.1, Firefox-esr 68.1.0, Chromium 76.0;
    • Продължава развитието на проекта ClonOS, развиващ специализиран дистрибутив за внедряване на инфраструктура за виртуални сървъри. По решаваните задачи ClonOS наподобява системи като Proxmox, Triton (Joyent), OpenStack, OpenNebula и Amazon AWS, основната разлика с тях е използването на FreeBSD и възможността за управление, внедряване и управление на Jail контейнери на FreeBSD и виртуални среди, базирани на хипервизори Bhyve и Xen. От последните промени се отбелязва поддръжката на
      cloud-init за Linux/BSD VM и cloudbase-init за Windows VM, започване на преход към използването на собствени образи, активиране на Jenkins CI за тестване на сборки и нов pkg-репозиторий за инсталиране на
      ClonOS от пакети.

Източник: opennet.ru

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster