---
name: process_path_must_be_physical
description: "Правило «этот процесс — особенный» строй по физическому пути: ядро отдаёт путь после символических ссылок, и правило по введённому молча не срабатывает"
metadata: 
  node_type: memory
  type: reference
  originSessionId: cf75944b-cc91-4988-aab6-28363391917a
  modified: 2026-08-07T11:16:28.750Z
---

Любое правило вида «процесс из такого-то места — обрабатывать иначе» (изоляция трафика, фильтр, доступ) ядро проверяет по **физическому пути**, а не по тому, который ввёл человек.

Поймано живьём на macOS в [[cehoproxy_crossplatform_plan]]: приложение добавлено как `/tmp/app`, ядро отдаёт движку `/private/tmp/app`, правило не совпадает и **изоляция не работает МОЛЧА** — продукт рапортует «изолировано», а трафик идёт мимо. Хуже явной ошибки.

Там же вылезло, что `/Applications/Safari.app` — символическая ссылка в Cryptex, физически `/System/Volumes/Preboot/Cryptexes/App/System/Applications/Safari.app`. То есть это не экзотика с `/tmp`, а обычные системные приложения Apple.

**Что делать:** приводить путь через `realpath(3)` в момент добавления и хранить уже приведённый. `Path.GetFullPath` в .NET символические ссылки НЕ раскрывает — она только нормализует.

**Проверять надо и обратную сторону:** свой инструмент проверки должен смотреть на путь так же, как ядро. `ps -o comm=` на macOS показывает путь, которым программу ЗАПУСТИЛИ (`/tmp/app`), а `lsof … txt` и ядро — физический. Без приведения проверка разойдётся с движком и будет врать. На Linux `/proc/<pid>/exe` и так физический.

**И пользователю это надо объяснить:** он ввёл один путь, в списке видит другой — без фразы «путь показан так, как его видит система» это выглядит как ошибка программы.

Смежное: [[deployed_is_not_running]], [[ui_position_not_presence]].
