Denoのパーミッションシステム
概要
Denoではファイルシステムやネットワーク、環境変数などに関する操作は、明示的に権限を与えない限り、実行することができません パーミッションフラグ
--allow-read (-R)
ファイルシステムへの読み込みを許可します
--allow-write (-W)
ファイルシステムへの書き込みを許可します
--allow-net (-N)
ネットワークアクセスを許可します (Deno.connect/Deno.listen/fetch()など)
--allow-env (-E)
環境変数の参照を許可します
--allow-sys (-S)
システム情報を参照するAPIの実行を許可します
--allow-run
LD_PRELOADなどのLD_から始まる環境変数またはDYLD_から始まる環境変数が設定されている場合は、--allow-allの指定が必要です (Deno v2から) セキュリティのため、--allow-runに指定された実行可能ファイルはDenoの起動時に絶対パス形式で解釈された上で--deny-writeに自動で設定されます (Deno v2から) --allow-ffi
--allow-all (-A)
権限を必要とするあらゆる機能の使用を許可します
--deny-*
各種--allow-*フラグと対になるフラグで、特定の権限を拒否することができます (例: --deny-read, --deny-write)
--deny-*フラグは--allow-*フラグよりも優先度が高く設定されています
code:shell
# 1. 全ての処理を許可します (--allow-all)
# 2. ただし、ファイルシステムへの書き込みは拒否します (--deny-write)
$ deno run --allow-all --deny-write main.js
パーミッションセット
code:deno.json
{
"permissions": {
"server": {
"read": true,
"env": true,
}
}
}
code:shell
# (1) --permission-setで適用するパーミッションセットを指定できます (セット名を省略した場合、deno.jsonのpermissions.defaultという名前のパーミッションセットが適用されます)
$ deno run --permission-set=server server.ts
# (2) 以下のように省略も可能です
$ deno run -P=server server.ts
code:json
{
"test": {
"permissions": {
"net": true,
}
}
}
code:shell
# deno.jsonで定義したtest.permissionsが適用されます
$ deno test -P
--allow-runを使用する際は、必要最小限のプログラムの実行のみを許可しておくと、このリスクを軽減できます (--allow-run=foo,bar) Permission Audit Logs