Macでターミナルからcrontab -e
してcronの設定変更を行おうとしたら
Operation not permitted
と言われて変更できなくなってしまいました。
これはMacOS Mojave 10.14から入ったセキュリティーが起こす状態らしく 他にも見れなくなったりしているディレクトリが出ている様です。
問題が起こっている状態
Macでcrontab -e
としてcronの編集画面を立ち上げ、保存して終了しようとすると
$ crontab -e
...
"crontab.SeQ8G6qskS" 10L, 362C written
crontab: installing new crontab
crontab: tmp/tmp.94840: Operation not permitted
crontab: edits left in /tmp/crontab.SeQ8G6qskS
な感じで編集できずに終わってしまいます。
実際もう一度crontab -e
して確認してみると変更されていません。
iTermから作業を行っているとこれが出てしまい、 一方ターミナル.appから試してみると
この様な
"ターミナル.app"がコンピューターを管理することを要求しています。管理にはパスワード、ネットワーク、およびシステム設定の変更が含まれます。
と言ったポップアップが出てOK
を押すと変更が出来ます。
確か最近(数日前に最後に編集したときまでまで)iTermから編集したときもこれが出ていました。 それ程頻繁にcronを変更するわけではないので出ていたのがいつからなのか覚えていませんが、恐らくmacOS Mojave 10.14になってからなんだと思います。
そして今はiTermからは一切変更が出来ない状態ですが、恐らく一度以前編集する時に
許可しない
を間違えて押して終了してしまったのだと思います。
他にも出来ないことがある
このcronが全く編集できないか上の様なポップアップが出る状態だと 下の様にターミナルから見れないディレクトリもあるはずです。
$ ls ~/Library/Messages/
ls: : Operation not permitted
ターミナルからだと見れませんが、Finerからだと見れ、ターミナルからでも
$ open ~/Library/Messages
とするとこのディレクトリをFinderで開くことが出来ます。
どうやらiTermやターミナル.appにアクセス制限がかかっている状態の様です。
解決法
これを解決するにはiTermやターミナルにフルディスクアクセス権限を与える必要があります。
Fix Terminal “Operation not permitted” Error in MacOS Mojave
システム環境設定 セキュリティーとプライバシー を開きプライバシータブへ行きます。
左の一覧からフルディスクアクセスを選択し、ここへ /アプリケーション/iTerm.appや/アプリケーション/ユーティリティ/ターミナル.appを加えます。
変更する際は左下のロックをクリックしてパスワードを入力しロックを外してから。
ここに
下のアプリケーションに、このMacのすべててのユーザーのメール、ホーム、Time Machineバックアップなどのデータや特定設定へのアクセスを許可。
とありますが、cronの情報や上の様にメールディレクトリへのアクセスが通常は制限されるようになったみたいです。 また、メールアプリやFinderなどは特別に許可される様になっているようです。
アプリを追加すると権限をアップデートするためにアプリを終了するかと聞かれるので ターミナルなどで中断しても問題なければ一度終了して立ち上げ直します。
そうするとcrontab -e
で編集しても何も聞かれずに保存出来るし、
ls ~/Library/Messages/
でもディレクトリの中身を見れる様になっているはずです。
ただし、GNU screenやtmuxですでに立ち上がっているセッションだとアプリ自体を 再起動しても駄目で、新規のウィンドウを立ち上げたりしても治っていない状態なので セッション自体を新たに始める必要があります。
別の解決法
もう1つの解決法としては System Integrity Protection (SIP)というセキュリティシステム 自体を無効にしてしまうことです。
ただSIPを無効にすることは推奨されていませんし、 上記のことだけであればターミナルアプリの再起動だけで済むので この問題に関してはフルディスクアクセスの権限を付与する方が良いです。