Lambda Smalltalkは、信頼できないスクリプトを安全に実行するためのサンドボックスモードを提供しています。
サンドボックスモード
| モード | 説明 |
|---|---|
permissive | すべての操作を許可(デフォルト) |
read-only | ファイル読み込みのみ許可 |
restrictive | すべての操作を拒否 |
使い方
# デフォルト: すべての操作を許可
lambda-st run script.st
# 読み取り専用: ファイル読み込みのみ、書き込み/プロセス/ネットワークは拒否
lambda-st run --sandbox read-only script.st
# 制限モード: すべてのI/O操作を拒否
lambda-st run --sandbox restrictive script.st
各モードの制御対象
ファイルシステム
- permissive: すべてのファイルの読み書き可能
- read-only: ファイル読み込みのみ可能、書き込み不可
- restrictive: ファイルアクセス不可
プロセス実行
- permissive:
System exec:許可 - read-only: 拒否
- restrictive: 拒否
ネットワークアクセス
- permissive:
Http get:、Http post:等を許可 - read-only: 拒否
- restrictive: 拒否
プラグイン読み込み
- permissive:
Plugin load:許可 - read-only: 拒否
- restrictive: 拒否
例: 安全なスクリプト実行
# データ読み込みのみを行うユーザー提供スクリプトを実行
lambda-st run --sandbox read-only user_script.st
# 完全に隔離されたスクリプトを実行(純粋な計算のみ)
lambda-st run --sandbox restrictive compute.st
エラー処理
サンドボックスが操作を拒否すると、例外が発生します:
sandbox: file_write on 'output.txt': file write access denied by sandbox policy
スクリプト内で on:do: を使ってキャッチできます:
[
File write: 'test.txt' contents: 'data'.
] on: Error do: [:ex |
'書き込みがサンドボックスにより拒否されました' printNl.
].