macOS sandbox-exec
2019-08-24
mac 有個指令叫做 sandbox-exec
,可以用它來執行程式,執行時可以有許多功能限制。
基本用法
首先你必須有個 sandbox profile,說明這個 sandbox 能幹嘛或不能幹嘛。假設我們已經有個 profile 檔案如下:
; no-network.sb
(version 1)
(allow default)
(deny network*)
沒錯,語法長得很像 lisp。接下來打這行就可以執行了:
sandbox-exec -f no-network.sb curl djosix.com
因為 profile 中設定不能做任何網路相關操作,所以會被擋掉,然後噴出以下訊息:
curl: (6) Could not resolve host: djosix.com
再一個禁止寫檔的 profile 範例:
; no-file-write.db
(version 1)
(allow default)
(deny file-write*)
拿 touch 來測試
sandbox-exec -f no-file-write.sb touch your_nipples
當然不能 touch your_nipples
touch: your_nipples: Operation not permitted
然後這些地方可以找到現有的 profile:
- /System/Library/Sandbox/Profiles/
- /usr/share/sandbox/