Оновлення Rust Coreutils: Безпека та продуктивність 0.9

Випуск Rust Coreutils 0.9: Удосконалення безпеки та продуктивності

Rust Coreutils 0.9 був випущений як оновлення з акцентом на безпеку для реалізації GNU Coreutils на базі Rust. Ця версія вводить широке зміцнення файлових систем, знижує використання небезпечного коду, покращує сумісність з GNU та підвищує продуктивність.

Безпечні зміни в Rust Coreutils 0.9

Для тих, хто не знайомий, uutils Coreutils є реалізацією стандартних утиліт командного рядка, які надаються GNU Coreutils, таких як cp, mv, rm, ls, cat тощо. Проект має на меті надати сумісні заміни для цих інструментів, використовуючи модель безпеки Rust та сучасні засоби.

Ключові зміни безпеки в Rust Coreutils 0.9 включають новий модуль uucore::safe_copy, що стійкий до TOCTOU. У випуску також представлені виправлення TOCTOU для cp, mv та рекурсивного chmod, а також покращений захист rm для парсингу шляхів з крапкою та крапкою-дві.

Покращення у продуктивності

Інші поліпшення безпеки включають створення nohup.out з режимом 0600 та вирішення всіх ідентифікаторів перед входом у середовище chroot.

Цей випуск продовжує зменшувати небезпечний код Rust, із десятками видалень небезпечного коду в утилітах, тестах та спільних компонентах uucore. Використання системних викликів на низькому рівні також переходить з nix та libc до rustix.

Поліпшення продуктивності в цьому випуску включають швидкі маршрути введення-виведення без копіювання, використовуючи механізми Linux, такі як splice(), tee() та pipe().

Сумісність з GNU та інші оновлення

Щодо сумісності з GNU, Rust Coreutils 0.9 оновлює свою GNU-референцію з Coreutils 9.10 до 9.11. Завдяки цьому чисельність тестів зросла з 665 до 690. Кількість невдалих тестів також зросла з 21 до 56. Проте проект зазначає, що зростання невдалих тестів пов’язане з розширеними тестами GNU, а не з регресіями в існуючій функціональності.

Крім того, декілька утиліт отримали виправлення для сумісності з GNU, включаючи numfmt, date, tr, cksum, factor та інші.

Команда ls отримала кілька поліпшень. Rust Coreutils 0.9 виправляє індикатори цілей для символічних посилань, виправляє стовпці підрахунку посилань для файлів з ACL, забезпечує правильна сортування версій та поліпшує обробку ширини стовпців прав.

Крім того, ls був переписаний, аби користувачі крейту, включаючи Nushell, могли використовувати його без прямого запису всього виводу на стандартний вивід.

Підтримка різних платформ

Завершуючи, підтримка крос-платформенних систем розширено, з додаванням підтримки WASI та WebAssembly для ln, dd, mktemp та tty.wasm. Підтримка Windows для tty також покращена.

Для додаткових деталей, ви можете звернутися до чек-листа змін.