Автор Гілка: Захист від траверсивних атак засобами systemd  (Прочитано 372 раз)

Відсутній ps

  • Дописувач
  • **
  • дописів: 94
  • Карма: +0/-0
Я втомився шукати дірки цього типу в різних відносно нових програмах, бо ці дірки мали місце в супер-популярних nginx, icecast, та багатьох інших. Зовсім недавно в якомусь веб-сервісі убунти знайшли подібні веселощі зі шляхами ../../../

Коротше я от що думаю: щоб не складати кожну програму в окремий контейнер, може обмежити якимось чином доступ вище робочої теки сервісу systemd? Ну, ось є директива:
[service]
WorkingDirectory=

і є ось такі опції:
ProtectHome=true
ProtectSystem=true

то може вони як раз дозволяють виключити доступ до відповідних тек? чи це так не працює?
бо я знаю, сервісом systemd лімітують пам'ять та інші параметри, хоч костиль, але чому б ні, замість того щоб хтось через пропущений баг викачав syslog чи іншу чутливу інформацію з правами на читання.

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 4021
  • Карма: +27/-0
  • Програміст
Можна спробувати LandLock ( https://landlock.io/ ), або Bublewrap ( https://github.com/containers/bubblewrap ), або щось подібне, щоб обмежити системні процеси у правах.
[Fedora Linux]

Відсутній yvs115

  • Графоман
  • ****
  • дописів: 286
  • Карма: +13/-0
По назві RootDirectory та опису з systemd.exec(5)
RootDirectory=
Takes a directory path relative to the host's root directory (i.e. the root of the system running the service manager). Sets the rootdirectory for executed processes, with the pivot_root(2) or chroot(2) system call. If this ...

можливо те що шукаєте

Відсутній ps

  • Дописувач
  • **
  • дописів: 94
  • Карма: +0/-0
Дякую за підказку, вже десь натикався на цю директиву. Взагалі ще зустрічав такі рішення:
ProtectSystem=yes
ProtectHome=yes
ReadOnlyPaths=/var/www
ReadOnlyPaths=/etc/myapp
PrivateTmp=yes
але без методу "наукового типку" не знаю, наскільки вони робочі в цьому контексті.
звісно, все залежить від конкретної програми, що їй треба куди читати/писати, але в цілому дивлюсь і не вистачає якогось розжованого кимось гайду.
ось буквально днями наткнувся на інфу, що nginx автоматично видаляє шляхи типу /../ - тобто я реально маявся дурницями, задаючи правила по regex. звісно, nginx фільтрує запити, бо моя ідея фільтранути через systemd пов'язана з недовірою до застосунку, бо технічно він може відкрити бекдор з бекенду при обробці юзерського рядка... перевіряти я все підряд втомився, тому поки запихнув прогу в контейнер LXC.
« Змінено: 2025-12-27 07:10:35 від ps »