MacRuby には Sandbox というネットワークアクセスなどを制限するためのクラスがあります。sandbox(7) を利用して MacRuby に実装されています。
使い方は簡単で、あらかじめ Sandbox.no_network.apply!
というように呼び出しておくだけです。Ruby のメソッド、Cocoa のAPI、双方に制限がかかります。
1 2 3 4 5 6 7 8 9 10 |
|
Sandbox は Ruby のセキュリティ機構と併用することもできます。
Sandbox を用いて、スクリプトに以下の制限をかけることができます。
- TCP/IPネットワーキング機能
- ソケットベースな全てのネットワーキング機能
- ファイルの書き込み
- /var/tmp など、テンポラリディレクトリ内のみファイル書き込み可能
- OS のサービス全て
注意点として、
- いったん制限をしてしまうと解除できない (別の制限に変更できない)
- Sandboxはプロセス単位で制限がかかる
制限をかけたい処理は別のプロセスで行うと良いでしょう。
Sandbox クラスのメソッド
Sandbox.no_internet
TCP/IPネットワーキング機能を制限します。
- no_internet -> Sandbox
- [RETURN]
- 制限内容が設定された、Sandbox のインスタンスを返します。
- [RETURN]
Sandbox.no_network
ソケットベースな全てのネットワーキング機能を制限します。
- no_network -> Sandbox
- [RETURN]
- 制限内容が設定された、Sandbox のインスタンスを返します。
- [RETURN]
Sandbox.no_writes
ファイルの書き込みを制限します。
- no_writes -> Sandbox
- [RETURN]
- 制限内容が設定された、Sandbox のインスタンスを返します。
- [RETURN]
Sandbox.temporary_writes
/var/tmp など、テンポラリディレクトリ内のみファイル書き込み可能にします。
- temporary_writes -> Sandbox
- [RETURN]
- 制限内容が設定された、Sandbox のインスタンスを返します。
- [RETURN]
Sandbox.pure_computation
OS のサービス全てを制限します。
- pure_computation -> Sandbox
- [RETURN]
- 制限内容が設定された、Sandbox のインスタンスを返します。
- [RETURN]
Sandbox#apply!
制限内容を反映します。
- apply!