доклад за напредъка на проекта FreeBSD от юли до септември 2019 година. Измененията включват:
- Общи и системни въпроси
- Основният екип принципно одобри възможността за включване в системата на код, предоставян по лиценз BSD с допълнително споразумение за използване на патенти (), но решението за включване в системата на всеки компонент под тази лицензия трябва да бъде одобрявано отделно;
- Състоя се първото заседание на работната група, създадена за провеждане на миграцията на изходния код от централизирана система за управление на изходен код Subversion към децентрализирана система Git. Дискусията относно целесъобразността на миграцията все още продължава и по много въпроси предстои да бъдат взети решения (например, как да се процедира с contrib/, необходимо ли е да се прегенерират хешовете в текущия git-репозитория и как най-добре да се реализира тестването на комитите);
- От NetBSD инструментариумът KCSAN (Kernel Concurrency Sanitizer), който позволява откритие на състояния на състезание между ядрените нишки, изпълнявани на различни CPU;
- Работи се по използването на вграденото в Clang асемблерно средство (IAS) вместо асемблера от 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 на виртуални машини, базирани на bhyve, е отделен специален сервер, а с помощта на
В инфраструктурата на Google е настроен системата за проверка на различни подсистеми FreeBSD. Създадена е прехвърляне на информация за всички сривове в услугата 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; - Развива се нов интерфейс на ядрото , позволяващ намирането на елементи в базата на параметри sysctl, обработвана под формата на MIB (Management Information Base), и предаване на информация за обектите в пространството на потребителя.
- Сигурност
- Разработен е модул на ядрото , основан на TrustedBSD MAC Framework, който реализира система за управление на достъпа до настройките на мрежовия стек за jail-окружения. Например, с помощта на mac_ipacl администраторът на хост-системата може да забрани на потребителя root в jail-окружението да променя или задава IP адреси или параметри на подмрежи за определени мрежови интерфейси. Предложената система за мандатно управление на достъпа позволява задаването на списъци с IP адреси и подмрежи, допустими за Jail, забранява установяването на определени IP и подмрежи в Jail или ограничава промяната на параметрите само до определени мрежови интерфейси;
- Компанията Intel предаде на проекта порт на софтуерния стек (Trusted Platform Module) за взаимодействие с чипа за безопасни изчисления, който обикновено се използва за проверена загрузка на фърмуер и зарулатор на ОС. Компонентите на стека са представени под формата на портове security/tpm2-tss, security/tpm2-tools и security/tpm2-abrmd. Портът tpm2-tss включва библиотеки за използване на API TPM2, tpm2-tools предоставя инструменти за команден ред за изпълнение на операции с TPM, а tpm2-abrmd съдържа фонов процес с реализация на компонентите TPM Access Broker и Resource Manager, мултиплексиращи запитвания от различни потребители на TPM към едно устройство. Освен проверената загрузка, във FreeBSD TPM може да се използва за усилване на сигурността на 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-окружения на базата на фреймуърка , за създаване и експортиране на изображения, реализирани по аналогия с Docker, и драйвер , предоставящ интерфейс за динамично стартиране на приложения в 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 за изследователската архитектура на процесора (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 са актуализирани до издание ;
- Дървото на пакетите 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 напомня на системи като 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 от пакети.
- Актуализирани са компонентите на графичния стек и портовете, свързани с 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 репозитория.
Източник: opennet.ru
