🐰

Mac環境で外部ディスクを操作するShell Scriptでの“operation not permitted”対策

に公開

macOSでは、プログラムにフルディスクアクセス権が付与されていないと、内蔵ディスクや外部ディスクへのアクセスを制限するセキュリティの仕組みが働きます。Shell Scriptを組んで外部ディスクにアクセスするようなスクリプトによって自動処理を行いたい場合では、この機能が枷になることがあります。もしもoperation not permittedのエラーが出力されていれば、その可能性を疑ってみてください。

/bin/shにフルディスクアクセス権を付与

エラーに「operation not permitted」が出る場合、sh自体がディスクへのアクセスを制限されている可能性があります。システム設定「プライバシーとセキュリティ」で、/bin/shに対して直接フルディスクアクセス権を付与してみてください。

ただし、これは目下の実行したいスクリプトファイルだけでなく、今後のあらゆるスクリプト(sh)の実行をフリーにするものであるため、macOSの堅牢なセキュリティを低下させることにも留意が必要です。

スクリプトファイルにcom.apple.quarantine属性(@)が付いていないか

macOSでダウンロードしたファイルには自動的にこの追加属性「@」が付与され、システムによって実行を制限されることがあります。

ls -lで「@」属性の有無を確認できます。
(無ければOK、有れば何かしらの対処が必要)

ls -l /PATH/TO/FILE.sh

スクリプトファイルをダウンロード等した場合には、まずは以下のコマンドでこの属性を除去してみてください。

xattr -cr /PATH/TO/FILE.sh

Discussion