Rapporto sullo sviluppo di FreeBSD per il terzo trimestre del 2019

Pubblicato Relazione sullo sviluppo del progetto FreeBSD da luglio a settembre 2019. Tra le novità si segnalano:

  • Domande generali e di sistema
    • Il core team ha approvato in linea generale la possibilità di inclusione nel sistema di codice fornito sotto licenza BSD con un accordo aggiuntivo sull'uso dei brevetti (BSD+Patent), ma ogni decisione sull'inclusione nel sistema di singoli componenti sotto questa licenza deve essere approvata separatamente;
    • Si è tenuta la prima riunione del gruppo di lavoro creato per effettuare la migrazione dei codici sorgente dal sistema di gestione centrale Subversion a un sistema decentralizzato Git. Il dibattito sull'opportunità della migrazione è ancora in corso e su molti punti devono ancora essere trovate soluzioni (ad esempio, come gestire contrib/, se è necessario rigenerare gli hash nel repository git attuale e come implementare al meglio il test dei commit);
    • Da NetBSD portato strumento KCSAN (Kernel Concurrency Sanitizer), che permette di identificare le condizioni di race tra i thread del kernel eseguiti su CPU diverse;
    • È in corso il lavoro sull'uso dell'assemblatore integrato in Clang (IAS) invece di quello di GNU binutils;
    • L'infrastruttura di emulazione dell'ambiente Linux (Linuxulator) è stata adattata per funzionare su architettura ARM64. È stata implementata la chiamata di sistema 'renameat2'. L'utilità strace è stata migliorata per diagnosticare i problemi nei file eseguibili Linux eseguiti nel Linuxulator. Risolta la problematica del crash durante il collegamento dei file eseguibili con la nuova glibc. I port con componenti Linux per il Linuxulator sono stati aggiornati a CentOS 7.7;
    • Nell'ambito del programma Google Summer of Code, gli studenti hanno completato con successo sei progetti: è stata preparata l'implementazione dell'utilità ping unificata (IPv4/IPv6), sono stati sviluppati strumenti per testare i firewall e identificare bug nel kernel (Kernel sanitizer), è stato proposto un modulo mac_ipacl, è stato scritto codice per la compressione della memoria virtuale e sono stati realizzati lavori per separare il processo di compilazione dei port dalla installazione locale;
    • Continua a svilupparsi il progetto di fuzzing del kernel FreeBSD utilizzando il sistema syzkaller. Durante il periodo di riferimento, grazie a syzkaller, sono stati identificati e risolti oltre dieci bug. È stato dedicato un server separato per eseguire syzkaller su macchine virtuali basate su bhyve, e grazie a
      syzbot è stato implementato il monitoraggio di vari sottosistemi FreeBSD nell'infrastruttura di Google. È stato organizzato il trasferimento delle informazioni su tutti i crash nel servizio backtrace.io per semplificarne la raccolta e l'analisi;
    • È in corso il lavoro per l'aggiornamento dell'implementazione di zlib a livello di kernel.
      Il codice legato alla compressione è stato aggiornato da zlib 1.0.4, rilasciato più di 20 anni fa, a una base di codice zlib 1.2.11. Per unificare l'accesso a zlib nel kernel sono state aggiunte le funzioni compress, compress2 e uncompress. Il codice che gestisce il protocollo PPP nel sottosistema netgraph è stato aggiornato per utilizzare l'implementazione di sistema di zlib, invece della propria versione di questa libreria. Il nuovo zlib è stato adottato anche dai sottosistemi kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor,
      if_mxge, bxe updated e ng_deflate;
    • Si sta sviluppando una nuova interfaccia del kernel sysctlinfo, che consente di trovare elementi nel database dei parametri sysctl, elaborati in forma di MIB (Management Information Base), e di trasmettere informazioni sugli oggetti nello spazio utente.
  • Sicurezza
    • È stato sviluppato un modulo del kernel mac_ipacl, basato su TrustedBSD MAC Framework e che implementa un sistema di controllo degli accessi alle impostazioni dello stack di rete per gli ambienti jail. Ad esempio, con mac_ipacl l'amministratore del sistema host può vietare all'utente root in un ambiente jail di modificare o impostare indirizzi IP o parametri di sottorete per determinate interfacce di rete. Il sistema di controllo degli accessi proposto permette permette di definire liste di indirizzi IP e sottoreti consentiti per Jail, vietare l'impostazione di determinati IP e sottoreti in Jail o limitare la modifica dei parametri solo per determinate interfacce di rete;
    • L'azienda Intel ha trasferito al progetto il porto della piattaforma software TPM 2.0 (Trusted Platform Module) per interagire con il chip per l'elaborazione sicura, normalmente utilizzato per il boot verificato di firmware e di bootloader. I componenti della piattaforma sono presentati sotto forma di porti security/tpm2-tss, security/tpm2-tools e security/tpm2-abrmd. Il porto tpm2-tss include librerie per l'uso dell'API TPM2, tpm2-tools fornisce utility da riga di comando per eseguire operazioni con TPM, mentre tpm2-abrmd contiene un processo in background con l'implementazione dei componenti TPM Access Broker e Resource Manager, che multiplexano le richieste da diversi utenti TPM a un unico dispositivo. Oltre al boot verificato, su FreeBSD il TPM può essere utilizzato per migliorare la sicurezza di Strongswan IPsec, SSH e TLS tramite l'esecuzione di operazioni crittografiche su un chip separato;
    • Il kernel per l'architettura amd64 è stato adattato per il boot utilizzando la tecnica di protezione W^X (write XOR execute), che prevede che le pagine di memoria non possano essere accessibili contemporaneamente in scrittura ed esecuzione (il kernel ora può essere avviato utilizzando pagine di memoria eseguibili per cui è vietata la scrittura). La nuova metodologia di protezione del kernel è stata inclusa nel ramo HEAD e farà parte delle versioni FreeBSD 13.0 e 12.2;
    • Per le chiamate di sistema mmap e mprotect implementato il macro PROT_MAX(), che consente di definire il set di flag di accesso (PROT_READ, PROT_WRITE, PROT_EXEC) consentito durante una modifica successiva. Con PROT_MAX() il programmatore può vietare la categorizzazione di una zona di memoria come eseguibile o richiedere memoria che non può essere eseguita, ma che successivamente può diventare eseguibile. Ad esempio, una zona di memoria può essere aperta per scrittura solo durante il collegamento dinamico o la generazione di codice JIT, ma dopo la conclusione della scrittura può essere limitata solo alla lettura e all'esecuzione, e successivamente, in caso di compromissione, un attaccante non potrà autorizzare la scrittura per quel blocco di memoria. Oltre a PROT_MAX() è stato implementato il sysctl vm.imply_prot_max, che, se attivato, determina il set di flag consentiti in base ai parametri iniziali della prima chiamata a mmap;
    • Per migliorare la protezione contro lo sfruttamento delle vulnerabilità, oltre alla tecnica di randomizzazione dello spazio degli indirizzi (ASLR), è stato proposto un meccanismo di randomizzazione degli offset dei puntatori, che indirizzano il frame iniziale dello stack e le strutture allocate nello stack contenenti informazioni ambientali, parametri di avvio del programma e dati per le immagini eseguibili nel formato ELF;
    • È stato svolto un lavoro di rimozione della funzione non sicura gets dalla libc (a partire dallo standard C11, questa funzione è stata esclusa dalla specifica) e di modifica dei port ancora in uso di questa funzione. La modifica è prevista per FreeBSD 13.0;
    • Avviato un progetto sperimentale per la creazione di strumenti di orchestrazione degli ambienti jail basati su un framework pot per la creazione e l'esportazione di immagini, implementato in modo simile a Docker, e di un driver nomad, che fornisce un'interfaccia per l'avvio dinamico delle applicazioni in un ambiente jail. Il modello proposto consente di separare i processi di creazione degli ambienti jail e di distribuzione delle applicazioni in essi. Uno degli obiettivi del progetto è fornire uno strumento per maneggiare i jail come contenitori in stile Docker;
  • Sistemi di archiviazione e file system
    • Da NetBSD all'utility 'makefs' trasferita supporto per il file system FAT (msdosfs). Le modifiche preparate consentono di creare immagini di FS con FAT senza utilizzare il driver md e senza privilegi root;
    • È stato completato il rifacimento del driver del sottosistema FUSE (File system in USErspace), che consente di creare implementazioni di file system nello spazio utente. Il driver fornito originariamente conteneva molti errori ed era basato sulla versione FUSE 7.8, rilasciata 11 anni fa. Nell'ambito del progetto di modernizzazione del driver è stata implementata la compatibilità con il protocollo FUSE 7.23, è stato aggiunto codice per il controllo dei diritti di accesso da parte del kernel ('-o default_permissions'), sono stati aggiunti invocazioni VOP_MKNOD, VOP_BMAP e VOP_ADVLOCK, è stata assicurata la possibilità di interrompere le operazioni FUSE, è stata aggiunta la compatibilità con pipe non denominate e unix-socket in fusefs, è stata implementata la possibilità di utilizzare kqueue per /dev/fuse, è stata consentita la modifica dei parametri di montaggio tramite 'mount -u', è stato aggiunto il supporto per l'esportazione di fusefs attraverso NFS, è stata implementata la contabilizzazione di RLIMIT_FSIZE, sono stati aggiunti i flag FOPEN_KEEP_CACHE e FUSE_ASYNC_READ, sono state effettuate significative ottimizzazioni delle prestazioni e migliorata l'organizzazione della cache. Il nuovo driver è stato incluso nei rami head e stable/12 (è entrato a far parte di FreeBSD 12.1);
    • È quasi completato il lavoro sull'implementazione di NFSv4.2 (RFC-7862) per FreeBSD. Durante il periodo di report, è stata prestata particolare attenzione ai test. Sono stati completati i test per verificare la compatibilità con l'implementazione di Linux, ma è ancora in corso la verifica del funzionamento del server pNFS con NFSv4.2. In generale, il codice è già considerato pronto per l'integrazione nei rami FreeBSD head/current. Nella nuova versione di NFS è stata aggiunta la compatibilità con le funzioni posix_fadvise, posix_fallocate, le modalità SEEKHOLE/SEEKDATA in lseek, e l'operazione di copia locale di parti di file sul server (senza passare al client);
  • Supporto hardware
    • È iniziato un progetto per migliorare il funzionamento di FreeBSD sui laptop. Il primo dispositivo per il quale è stata effettuata un'audizione del supporto hardware in FreeBSD è stato il laptop Lenovo X1 Carbon di settima generazione;
    • CheriBSD, un fork di FreeBSD per l'architettura di processore di ricerca CHERI (Capability Hardware Enhanced RISC Instructions), è stato aggiornato per supportare il futuro processore ARM Morello, che supporterà un sistema di gestione degli accessi alla memoria CHERI, basato sul modello di sicurezza del progetto Capsicum. Il chip Morello intendono lancio nel 2021. Gli sviluppatori di CheriBSD continuano a monitorare lo sviluppo del prototipo di riferimento CHERI basato sull'architettura MIPS;
    • Espansa la compatibilità con i chip RockChip RK3399, utilizzati nelle schede RockPro64 e NanoPC-T4. Il miglioramento più significativo è stato l'integrazione del supporto per eMMC e lo sviluppo di un nuovo driver per il controller eMMC usato nella scheda;
    • Proseguita l'implementazione del supporto per l'ARM64 SoC Broadcom BCM5871X con processori ARMv8 Cortex-A57, mirati a un impiego in router, gateway e NAS. Durante il periodo di riferimento,
      è stato ampliato il supporto per iProc PCIe e aggiunta la possibilità di utilizzare operazioni crittografiche hardware per ottimizzare le prestazioni di IPsec.
      L'integrazione del codice nel ramo HEAD è attesa per il quarto trimestre;
    • Segnalati significativi progressi nello sviluppo del porting di FreeBSD per la piattaforma powerpc64. L'attenzione principale è rivolta a garantire un funzionamento efficiente su sistemi con processori IBM POWER8 e POWER9, con supporto opzionale per le vecchie Apple Power Mac, x500 e Amiga A1222. Il ramo powerpc*/12 continua a essere fornito con gcc 4.2.1, mentre il ramo powerpc*/13 sarà presto migrato a llvm90. Tra i 33306 port, 30514 sono stati assemblati con successo;
    • Proseguito il porting di FreeBSD per l'SoC NXP LS1046A a 64 bit basato su ARMv8 Cortex-A72 con motore integrato per l'accelerazione del trattamento dei pacchetti, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 e USB 3.0. Durante il periodo di riferimento, è stato implementato il supporto per USB 3.0, SD/MMC, I2C, interfaccia di rete DPAA e GPIO. Sono pianificate ottimizzazioni delle prestazioni dell'interfaccia di rete e supporto per QSPI. Il completamento del lavoro e l'inclusione nel ramo HEAD sono previsti per il quarto trimestre del 2019;
    • Aggiornato il driver ena con supporto per la seconda generazione di adattatori di rete ENAv2 (Elastic Network Adapter), utilizzati nell'infrastruttura Elastic Compute Cloud (EC2) per la comunicazione tra i nodi EC2 a velocità fino a 25 Gb/s. Il driver ena ha aggiunto e testato il supporto NETMAP e ha adattato l'allocazione della memoria per abilitare la modalità LLQ negli ambienti Amazon EC2 A1;
  • Applicazioni e sistema di porte
    • Aggiornati i componenti dello stack grafico e i port correlati a xorg. I port che utilizzano USE_XORG e XORG_CAT sono stati migrati al framework USES invece di chiamare bsd.xorg.mk tramite bsd.port.mk. Questi port ora includono il flag "USES=xorg" nei makefile. La funzionalità XORG_CAT è stata estratta da bsd.xorg.mk e ora è attivata dal flag "USES=xorg-cat". Strumenti per la creazione diretta di port xorg dai repository git sono stati aggiunti;
      freedesktop.org, il che, ad esempio, consente di creare port per versioni non ancora rilasciate. In futuro, è previsto sviluppare strumenti per l'uso del sistema di building meson invece di autotools per la creazione dei port xorg.

      Sono stati effettuati interventi di pulizia dei vecchi port xorg legati a componenti ormai non supportati, ad esempio, il port x11/libXp è stato rimosso, mentre i port x11/Xxf86misc, x11-fonts/libXfontcache e graphics/libGLw sono stati classificati come obsoleti;

    • Lavori per migliorare il supporto per Java 11 e versioni più recenti in FreeBSD continuano, così come il porting di alcune modifiche nel ramo Java 8. Dopo che FreeBSD ha implementato il supporto per nuove funzionalità di Java 11 come Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger, DTrace, Javac Server, Java Sound e SCTP, l'attenzione si è concentrata sull'assicurarsi che tutti i test di compatibilità passassero. Il numero di fallimenti nei test è stato ridotto da 50 a 2;
    • Il desktop KDE Plasma, KDE Frameworks, KDE Applications e Qt sono mantenuti aggiornati e aggiornati alle versioni più recenti;
    • I port del desktop Xfce sono stati aggiornati alla versione 4.14;
    • La struttura dei port di FreeBSD ha superato la soglia di 38000 port, il numero di PR aperti supera leggermente i 2000, di cui 400 PR non sono ancora stati analizzati. Durante il periodo di riferimento, sono stati apportati 7340 cambiamenti da 169 sviluppatori. Due nuovi partecipanti (Santhosh Raju e Dmitri Goutnik) hanno ricevuto i diritti di commit. È stata pubblicata una nuova versione del gestore pacchetti pkg 1.12 con supporto per overlay nella struttura dei port e una pulizia di bsd.sites.mk. Tra gli aggiornamenti significativi delle versioni nei port si segnala: 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;
    • Continua lo sviluppo del progetto ClonOS, in evoluzione una distribuzione specializzata per il dispiegamento di infrastrutture di server virtuali. Per le problematiche trattate, ClonOS assomiglia a sistemi come Proxmox, Triton (Joyent), OpenStack, OpenNebula e Amazon AWS, con la principale differenza di utilizzare FreeBSD e la possibilità di gestire, distribuire e amministrare container Jail di FreeBSD e ambienti virtuali basati su hypervisor Bhyve e Xen. Tra le recenti modifiche si segnala il supporto per
      cloud-init per VM Linux/BSD e cloudbase-init per VM Windows, l'inizio della transizione verso l'uso di immagini proprie, l'impiego di Jenkins CI per il testing delle build e un nuovo repository pkg per l'installazione di
      ClonOS dai pacchetti.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster