From a1ff01d95ad36757fe182520d4101b4ce3895921 Mon Sep 17 00:00:00 2001 From: Corey Butler <770982+coreybutler@users.noreply.github.com> Date: Wed, 28 Oct 2026 23:44:40 -0500 Subject: [PATCH] docs: HKLM permission enforce strips NODE_OPTIONS audit HKLM Policies EnforcePermissionModel also drops --permission-audit from NODE_OPTIONS, not only argv and npm_config_node_options. Signed-off-by: Corey Butler <770982+coreybutler@users.noreply.github.com> --- docs/cfg/enterprise/registry.md | 2 +- docs/command/package-manager-shims.md | 2 +- docs/guide/security.md | 2 +- .../current/cfg/enterprise/registry.md | 2 +- .../current/command/package-manager-shims.md | 2 +- .../ru/docusaurus-plugin-content-docs/current/guide/security.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/cfg/enterprise/registry.md b/docs/cfg/enterprise/registry.md index 72b11e1..c3c3923 100644 --- a/docs/cfg/enterprise/registry.md +++ b/docs/cfg/enterprise/registry.md @@ -48,7 +48,7 @@ See [Administrative Templates](ad) for GPO and Intune deployment. Download ADMX/ |**Disallow eval/string code gen**|`DisableEvalAndStringExecution`|**Overridable** (`disable_eval_and_string_execution`). Node shim prepends `--disallow-code-generation-from-strings`, blocking `eval()` and `new Function()` (shim-only). When `1`, the package-manager proxy also merges this flag into `npm_config_node_options` for npm/npx/pnpm lifecycle scripts. Yarn, bun, corepack, and vlt are not covered. Does not set `NODE_OPTIONS`. Does not affect `node:vm`.

- `0` = off (no env write)
- `1` = on

Default: `0`

`REG_DWORD`| |**Disable NVM upgrades**|`DisableUpgrade`|**Overridable.** Block in-app NVM upgrades (does not block AD/GPO package deployment).

- `0` = allowed
- `1` = blocked

Default: `0`

`REG_DWORD`| |**Disable version management**|`Enabled`|**Overridable** (`nvm on`/`nvm off`). Forces version management on or off. When off, NVM does not manage or redirect Node.js commands.

- `0` = off (`nvm off`)
- `1` = on

Default: `1`

`REG_DWORD`| -|**Enforce permission model**|`EnforcePermissionModel`|**Overridable** (`enforce_permission_model`). Node shim prepends Node permission-model flag on `node` launches (shim-only). When `1`, the package-manager proxy also merges the same flag and `DefaultPermissionGrants` into `npm_config_node_options` for npm/npx/pnpm lifecycle scripts. npm-cli.js itself is not launched under `--permission`. Yarn, bun, corepack, and vlt are not covered. Does not set `NODE_OPTIONS`. Default-deny FS/network unless the process passes `--allow-*` at runtime. NVM does not inject `--allow-*` grants except `DefaultPermissionGrants`. NVM never injects `--permission-audit` (Node 25.8+ report-only). There is no policy that forces `--permission-audit`.

- Node 23+: `--permission`
- Node 20–22: `--experimental-permission`
- Node <20: no flag (unsupported)

- HKLM Policies `1`: strip caller `--permission-audit` (and `--permission-audit` already in `npm_config_node_options`) and inject `--permission` / `--experimental-permission`. Filter `--allow-*` even if the caller already passed `--permission`.
- Preference-only `1`: caller `--permission-audit` is a debug exception for `node` (no inject). Proxy still merges `--permission` into `npm_config_node_options` without stripping existing tokens.

- `0` = off (no env write)
- `1` = on

Default: `0`

`REG_DWORD`| +|**Enforce permission model**|`EnforcePermissionModel`|**Overridable** (`enforce_permission_model`). Node shim prepends Node permission-model flag on `node` launches (shim-only). When `1`, the package-manager proxy also merges the same flag and `DefaultPermissionGrants` into `npm_config_node_options` for npm/npx/pnpm lifecycle scripts. npm-cli.js itself is not launched under `--permission`. Yarn, bun, corepack, and vlt are not covered. Does not set `NODE_OPTIONS`. Default-deny FS/network unless the process passes `--allow-*` at runtime. NVM does not inject `--allow-*` grants except `DefaultPermissionGrants`. NVM never injects `--permission-audit` (Node 25.8+ report-only). There is no policy that forces `--permission-audit`.

- Node 23+: `--permission`
- Node 20–22: `--experimental-permission`
- Node <20: no flag (unsupported)

- HKLM Policies `1`: strip caller `--permission-audit` (argv, `NODE_OPTIONS`, and `npm_config_node_options`) and inject `--permission` / `--experimental-permission`. Filter `--allow-*` even if the caller already passed `--permission`.
- Preference-only `1`: caller `--permission-audit` is a debug exception for `node` (no inject). Proxy still merges `--permission` into `npm_config_node_options` without stripping existing tokens.

- `0` = off (no env write)
- `1` = on

Default: `0`

`REG_DWORD`| |**Freeze V8 global objects**|`FreezeV8GlobalObjects`|**Overridable** (`freeze_v8_global_objects`). Node shim prepends `--frozen-intrinsics` so built-in prototypes cannot be patched (shim-only; Node.js 12+). When `1`, the package-manager proxy also merges this flag into `npm_config_node_options` for npm/npx/pnpm lifecycle scripts. Yarn, bun, corepack, and vlt are not covered. Does not set `NODE_OPTIONS`. Adds measurable startup cost.

- `0` = off (no env write)
- `1` = on

Default: `0`

`REG_DWORD`| |**Install root**|`InstallRoot`|**Overridable** (`root`). Directory where Node.js versions are stored. Overrides machine and user preferences.

Default: `%LOCALAPPDATA%\Author Software\nvm\installs`. That directory is writable by the installing user. Other users cannot write it (**NVM4305**). Set this key to a locked directory when versions must be immutable (Governance).

`REG_SZ`| |**Local install source**|`LocalInstallDir`|**Overridable** (`local_dir`). Alternate local directory for Node.js archives (air-gapped mirrors). Overrides cache.

`REG_SZ`| diff --git a/docs/command/package-manager-shims.md b/docs/command/package-manager-shims.md index 4ee9b0a..e5f8ef1 100644 --- a/docs/command/package-manager-shims.md +++ b/docs/command/package-manager-shims.md @@ -22,7 +22,7 @@ Global CLIs installed with those managers (for example `tsc`) use the same `prox 5. Check the version directory is safe (not a reparse point, not cross-user writable) — failure → **NVM4305**. 6. Locate the delegated command under the Node install (`.exe`, then `.cmd`, then `.bat`). 7. Enforce package-manager constraints when policy applies (npm / npx / pnpm / yarn). `NpmModuleMinimumAge` maps to each manager's native cooldown, including npx (`npm_config_min_release_age`). Community default is off (`0`). Certified default is 2880 minutes (2 days) when the key is unset. HKLM `BlockPackageManagerLifecycleScripts` forces `--ignore-scripts` or `YARN_ENABLE_SCRIPTS=false`. Certified Builds with Advanced Logging write **NVM4412** for install-class commands only. -8. When `EnforcePermissionModel`, `FreezeV8GlobalObjects`, or `DisableEvalAndStringExecution` is on, merge those Node flags into `npm_config_node_options` for npm/npx/pnpm so lifecycle scripts inherit them. Default off: no env write. Does not set `NODE_OPTIONS`. Yarn, bun, corepack, and vlt are skipped. npm-cli.js itself is not launched under `--permission`. +8. When `EnforcePermissionModel`, `FreezeV8GlobalObjects`, or `DisableEvalAndStringExecution` is on, merge those Node flags into `npm_config_node_options` for npm/npx/pnpm so lifecycle scripts inherit them. Default off: no env write. Does not set `NODE_OPTIONS`. When HKLM Policies forces `EnforcePermissionModel`, strip `--permission-audit` from `NODE_OPTIONS` and `npm_config_node_options` before spawn. Yarn, bun, corepack, and vlt are skipped for flag inject. npm-cli.js itself is not launched under `--permission`. 9. Verify trust of `node.exe` and the delegated target (below). 10. Spawn the real tool (for npm/npx/corepack: often `node.exe` + `*-cli.js`; otherwise the `.exe` / `.cmd`). diff --git a/docs/guide/security.md b/docs/guide/security.md index 46a03aa..cf85cb0 100644 --- a/docs/guide/security.md +++ b/docs/guide/security.md @@ -185,7 +185,7 @@ Most teams never pass Node’s permission model flags. Governance policy can for | Policy | Effect | |:-|:-| -| `EnforcePermissionModel` | Prepend `--permission` (Node 23+) or `--experimental-permission` (20–22) on `node`. Default-deny FS/network until the process passes `--allow-*`. NVM does not inject grants except `DefaultPermissionGrants`. HKLM Policies strips caller `--permission-audit` (report-only) and still injects `--permission`. Preference-only enforce leaves `--permission-audit` as a debug exception on `node`. Proxy merges the same flags into `npm_config_node_options` for npm/npx/pnpm; HKLM also strips `--permission-audit` from that variable. NVM never injects `--permission-audit`. | +| `EnforcePermissionModel` | Prepend `--permission` (Node 23+) or `--experimental-permission` (20–22) on `node`. Default-deny FS/network until the process passes `--allow-*`. NVM does not inject grants except `DefaultPermissionGrants`. HKLM Policies strips `--permission-audit` (report-only) from argv, `NODE_OPTIONS`, and `npm_config_node_options`, then still injects `--permission`. Preference-only enforce leaves `--permission-audit` as a debug exception on `node`. Proxy merges the same flags into `npm_config_node_options` for npm/npx/pnpm. NVM never injects `--permission-audit`. | | `FreezeV8GlobalObjects` | Prepend `--frozen-intrinsics` on `node`; same flag in `npm_config_node_options` for npm/npx/pnpm when on | | `DisableEvalAndStringExecution` | Prepend `--disallow-code-generation-from-strings` (blocks `eval` / `new Function`; does not cover `node:vm`). Same flag in `npm_config_node_options` for npm/npx/pnpm when on | diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cfg/enterprise/registry.md b/i18n/ru/docusaurus-plugin-content-docs/current/cfg/enterprise/registry.md index 63214de..1d40361 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cfg/enterprise/registry.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cfg/enterprise/registry.md @@ -53,7 +53,7 @@ certified: |**Disallow eval/string code gen**|`DisableEvalAndStringExecution`|**Overridable** (`disable_eval_and_string_execution`). Node shim добавляет `--disallow-code-generation-from-strings`, блокируя `eval()` и `new Function()` (только shim). При `1` proxy также вписывает этот флаг в `npm_config_node_options` для lifecycle-скриптов npm/npx/pnpm. Yarn, bun, corepack и vlt не покрыты. `NODE_OPTIONS` не задаётся.

- `0` = выкл. (без записи env)
- `1` = вкл.

По умолчанию: `0`

`REG_DWORD`| |**Disable NVM upgrades**|`DisableUpgrade`|**Overridable.** Блокировать обновления NVM в приложении (не блокирует развёртывание пакетов AD/GPO).

- `0` = разрешено
- `1` = заблокировано

По умолчанию: `0`

`REG_DWORD`| |**Disable version management**|`Enabled`|**Overridable** (`nvm on`/`nvm off`). Принудительно включает или отключает управление версиями. При выкл. NVM не управляет и не перенаправляет команды Node.js.

- `0` = выкл. (`nvm off`)
- `1` = вкл.

По умолчанию: `1`

`REG_DWORD`| -|**Enforce permission model**|`EnforcePermissionModel`|**Overridable** (`enforce_permission_model`). Node shim добавляет флаг permission model Node при запуске `node` (только shim). При `1` proxy также вписывает тот же флаг и `DefaultPermissionGrants` в `npm_config_node_options` для lifecycle-скриптов npm/npx/pnpm. npm-cli.js сам не запускается под `--permission`. Yarn, bun, corepack и vlt не покрыты. `NODE_OPTIONS` не задаётся. Запрет FS/сети по умолчанию, если процесс не передаёт `--allow-*` во время выполнения. NVM не добавляет grants `--allow-*`, кроме `DefaultPermissionGrants`. NVM никогда не внедряет `--permission-audit` (Node 25.8+, только отчёт). Политики не форсируют `--permission-audit`.

- Node 23+: `--permission`
- Node 20–22: `--experimental-permission`
- Node <20: без флага (не поддерживается)

- HKLM Policies `1`: удаляет `--permission-audit` у вызывающего (и из `npm_config_node_options`) и внедряет `--permission` / `--experimental-permission`. Фильтрует `--allow-*`, даже если вызывающий уже передал `--permission`.
- Только Preferences `1`: `--permission-audit` — отладочное исключение для `node` (без внедрения). Proxy всё равно вписывает `--permission` в `npm_config_node_options` без удаления существующих токенов.

- `0` = выкл. (без записи env)
- `1` = вкл.

По умолчанию: `0`

`REG_DWORD`| +|**Enforce permission model**|`EnforcePermissionModel`|**Overridable** (`enforce_permission_model`). Node shim добавляет флаг permission model Node при запуске `node` (только shim). При `1` proxy также вписывает тот же флаг и `DefaultPermissionGrants` в `npm_config_node_options` для lifecycle-скриптов npm/npx/pnpm. npm-cli.js сам не запускается под `--permission`. Yarn, bun, corepack и vlt не покрыты. `NODE_OPTIONS` не задаётся. Запрет FS/сети по умолчанию, если процесс не передаёт `--allow-*` во время выполнения. NVM не добавляет grants `--allow-*`, кроме `DefaultPermissionGrants`. NVM никогда не внедряет `--permission-audit` (Node 25.8+, только отчёт). Политики не форсируют `--permission-audit`.

- Node 23+: `--permission`
- Node 20–22: `--experimental-permission`
- Node <20: без флага (не поддерживается)

- HKLM Policies `1`: удаляет `--permission-audit` у вызывающего (argv, `NODE_OPTIONS` и `npm_config_node_options`) и внедряет `--permission` / `--experimental-permission`. Фильтрует `--allow-*`, даже если вызывающий уже передал `--permission`.
- Только Preferences `1`: `--permission-audit` — отладочное исключение для `node` (без внедрения). Proxy всё равно вписывает `--permission` в `npm_config_node_options` без удаления существующих токенов.

- `0` = выкл. (без записи env)
- `1` = вкл.

По умолчанию: `0`

`REG_DWORD`| |**Freeze V8 global objects**|`FreezeV8GlobalObjects`|**Overridable** (`freeze_v8_global_objects`). Node shim добавляет `--frozen-intrinsics`, чтобы встроенные прототипы нельзя было изменять (только shim; Node.js 12+). При `1` proxy также вписывает этот флаг в `npm_config_node_options` для lifecycle-скриптов npm/npx/pnpm. Yarn, bun, corepack и vlt не покрыты. `NODE_OPTIONS` не задаётся. Увеличивает время запуска.

- `0` = выкл. (без записи env)
- `1` = вкл.

По умолчанию: `0`

`REG_DWORD`| |**Install root**|`InstallRoot`|**Overridable** (`root`). Каталог хранения версий Node.js. Переопределяет настройки машины и пользователя.

По умолчанию: `%LOCALAPPDATA%\Author Software\nvm\installs`. Этот каталог доступен для записи устанавливающему пользователю. Другие пользователи писать не могут (**NVM4305**). Задайте этот ключ в заблокированный каталог, если версии должны быть неизменяемыми (Governance).

`REG_SZ`| |**Local install source**|`LocalInstallDir`|**Overridable** (`local_dir`). Альтернативный локальный каталог архивов Node.js (air-gapped зеркала). Переопределяет кэш.

`REG_SZ`| diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/command/package-manager-shims.md b/i18n/ru/docusaurus-plugin-content-docs/current/command/package-manager-shims.md index d82d0f9..1d0886e 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/command/package-manager-shims.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/command/package-manager-shims.md @@ -22,7 +22,7 @@ Proxy разрешает активную версию Node.js (те же пра 5. Проверяет, что каталог версии безопасен (не reparse point, не writable другими пользователями) — отказ → **NVM4305**. 6. Находит делегированную команду в установке Node (`.exe`, затем `.cmd`, затем `.bat`). 7. Применяет ограничения package manager, если действует политика (npm / npx / pnpm / yarn). `NpmModuleMinimumAge` мапится на нативный cooldown каждого менеджера, включая npx (`npm_config_min_release_age`). Community по умолчанию выкл. (`0`). Certified по умолчанию 2880 минут (2 дня), если ключ не задан. HKLM `BlockPackageManagerLifecycleScripts` принудительно ставит `--ignore-scripts` или `YARN_ENABLE_SCRIPTS=false`. Certified Builds с Advanced Logging пишут **NVM4412** только для install-команд. -8. Если включены `EnforcePermissionModel`, `FreezeV8GlobalObjects` или `DisableEvalAndStringExecution`, вписывает эти флаги Node в `npm_config_node_options` для npm/npx/pnpm, чтобы lifecycle-скрипты их наследовали. По умолчанию выкл.: env не пишется. `NODE_OPTIONS` не задаётся. Yarn, bun, corepack и vlt пропускаются. npm-cli.js сам не запускается под `--permission`. +8. Если включены `EnforcePermissionModel`, `FreezeV8GlobalObjects` или `DisableEvalAndStringExecution`, вписывает эти флаги Node в `npm_config_node_options` для npm/npx/pnpm, чтобы lifecycle-скрипты их наследовали. По умолчанию выкл.: env не пишется. `NODE_OPTIONS` не задаётся. Когда HKLM Policies форсирует `EnforcePermissionModel`, удаляет `--permission-audit` из `NODE_OPTIONS` и `npm_config_node_options` перед spawn. Yarn, bun, corepack и vlt пропускаются для inject флагов. npm-cli.js сам не запускается под `--permission`. 9. Проверяет доверие к `node.exe` и делегированной цели (ниже). 10. Запускает реальный инструмент (для npm/npx/corepack часто `node.exe` + `*-cli.js`; иначе `.exe` / `.cmd`). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guide/security.md b/i18n/ru/docusaurus-plugin-content-docs/current/guide/security.md index bc2c2cf..6e6f65c 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/guide/security.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/guide/security.md @@ -128,7 +128,7 @@ NVM **сейчас не** применяет allow/deny list **пакетов** | Политика | Эффект | |:-|:-| -| `EnforcePermissionModel` | Добавляет `--permission` (Node 23+) или `--experimental-permission` (20–22) на `node`. Default-deny FS/network, пока процесс не передаст `--allow-*`. NVM не внедряет grants, кроме `DefaultPermissionGrants`. HKLM Policies удаляет `--permission-audit` (только отчёт) и всё равно внедряет `--permission`. Enforce только из Preferences оставляет `--permission-audit` как отладочное исключение для `node`. Proxy вписывает те же флаги в `npm_config_node_options` для npm/npx/pnpm; HKLM также удаляет `--permission-audit` из этой переменной. NVM никогда не внедряет `--permission-audit`. | +| `EnforcePermissionModel` | Добавляет `--permission` (Node 23+) или `--experimental-permission` (20–22) на `node`. Default-deny FS/network, пока процесс не передаст `--allow-*`. NVM не внедряет grants, кроме `DefaultPermissionGrants`. HKLM Policies удаляет `--permission-audit` (только отчёт) из argv, `NODE_OPTIONS` и `npm_config_node_options`, затем всё равно внедряет `--permission`. Enforce только из Preferences оставляет `--permission-audit` как отладочное исключение для `node`. Proxy вписывает те же флаги в `npm_config_node_options` для npm/npx/pnpm. NVM никогда не внедряет `--permission-audit`. | | `FreezeV8GlobalObjects` | Добавляет `--frozen-intrinsics` на `node`; тот же флаг в `npm_config_node_options` для npm/npx/pnpm при включении | | `DisableEvalAndStringExecution` | Добавляет `--disallow-code-generation-from-strings` (блокирует `eval` / `new Function`; не покрывает `node:vm`). Тот же флаг в `npm_config_node_options` для npm/npx/pnpm при включении |