Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/cfg/enterprise/registry.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`.<br /><br />- `0` = off (no env write)<br />- `1` = on<br /><br />Default: `0`<br /><br />`REG_DWORD`|
|**Disable NVM upgrades**|`DisableUpgrade`|**Overridable.** Block in-app NVM upgrades (does not block AD/GPO package deployment).<br /><br />- `0` = allowed<br />- `1` = blocked<br /><br />Default: `0`<br /><br />`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.<br /><br />- `0` = off (`nvm off`)<br />- `1` = on<br /><br />Default: `1`<br /><br />`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`.<br /><br />- Node 23+: `--permission`<br />- Node 20–22: `--experimental-permission`<br />- Node &lt;20: no flag (unsupported)<br /><br />- 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`.<br />- 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.<br /><br />- `0` = off (no env write)<br />- `1` = on<br /><br />Default: `0`<br /><br />`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`.<br /><br />- Node 23+: `--permission`<br />- Node 20–22: `--experimental-permission`<br />- Node &lt;20: no flag (unsupported)<br /><br />- 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`.<br />- 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.<br /><br />- `0` = off (no env write)<br />- `1` = on<br /><br />Default: `0`<br /><br />`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.<br /><br />- `0` = off (no env write)<br />- `1` = on<br /><br />Default: `0`<br /><br />`REG_DWORD`|
|**Install root**|`InstallRoot`|**Overridable** (`root`). Directory where Node.js versions are stored. Overrides machine and user preferences.<br /><br />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).<br /><br />`REG_SZ`|
|**Local install source**|`LocalInstallDir`|**Overridable** (`local_dir`). Alternate local directory for Node.js archives (air-gapped mirrors). Overrides cache.<br /><br />`REG_SZ`|
Expand Down
2 changes: 1 addition & 1 deletion docs/command/package-manager-shims.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`).

Expand Down
2 changes: 1 addition & 1 deletion docs/guide/security.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 |

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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` не задаётся.<br /><br />- `0` = выкл. (без записи env)<br />- `1` = вкл.<br /><br />По умолчанию: `0`<br /><br />`REG_DWORD`|
|**Disable NVM upgrades**|`DisableUpgrade`|**Overridable.** Блокировать обновления NVM в приложении (не блокирует развёртывание пакетов AD/GPO).<br /><br />- `0` = разрешено<br />- `1` = заблокировано<br /><br />По умолчанию: `0`<br /><br />`REG_DWORD`|
|**Disable version management**|`Enabled`|**Overridable** (`nvm on`/`nvm off`). Принудительно включает или отключает управление версиями. При выкл. NVM не управляет и не перенаправляет команды Node.js.<br /><br />- `0` = выкл. (`nvm off`)<br />- `1` = вкл.<br /><br />По умолчанию: `1`<br /><br />`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`.<br /><br />- Node 23+: `--permission`<br />- Node 20–22: `--experimental-permission`<br />- Node &lt;20: без флага (не поддерживается)<br /><br />- HKLM Policies `1`: удаляет `--permission-audit` у вызывающего (и из `npm_config_node_options`) и внедряет `--permission` / `--experimental-permission`. Фильтрует `--allow-*`, даже если вызывающий уже передал `--permission`.<br />- Только Preferences `1`: `--permission-audit` — отладочное исключение для `node` (без внедрения). Proxy всё равно вписывает `--permission` в `npm_config_node_options` без удаления существующих токенов.<br /><br />- `0` = выкл. (без записи env)<br />- `1` = вкл.<br /><br />По умолчанию: `0`<br /><br />`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`.<br /><br />- Node 23+: `--permission`<br />- Node 20–22: `--experimental-permission`<br />- Node &lt;20: без флага (не поддерживается)<br /><br />- HKLM Policies `1`: удаляет `--permission-audit` у вызывающего (argv, `NODE_OPTIONS` и `npm_config_node_options`) и внедряет `--permission` / `--experimental-permission`. Фильтрует `--allow-*`, даже если вызывающий уже передал `--permission`.<br />- Только Preferences `1`: `--permission-audit` — отладочное исключение для `node` (без внедрения). Proxy всё равно вписывает `--permission` в `npm_config_node_options` без удаления существующих токенов.<br /><br />- `0` = выкл. (без записи env)<br />- `1` = вкл.<br /><br />По умолчанию: `0`<br /><br />`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` не задаётся. Увеличивает время запуска.<br /><br />- `0` = выкл. (без записи env)<br />- `1` = вкл.<br /><br />По умолчанию: `0`<br /><br />`REG_DWORD`|
|**Install root**|`InstallRoot`|**Overridable** (`root`). Каталог хранения версий Node.js. Переопределяет настройки машины и пользователя.<br /><br />По умолчанию: `%LOCALAPPDATA%\Author Software\nvm\installs`. Этот каталог доступен для записи устанавливающему пользователю. Другие пользователи писать не могут (**NVM4305**). Задайте этот ключ в заблокированный каталог, если версии должны быть неизменяемыми (Governance).<br /><br />`REG_SZ`|
|**Local install source**|`LocalInstallDir`|**Overridable** (`local_dir`). Альтернативный локальный каталог архивов Node.js (air-gapped зеркала). Переопределяет кэш.<br /><br />`REG_SZ`|
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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`).

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 при включении |

Expand Down
Loading