macOS の「Operation not permitted」を回避する【du/ls/mv/cp 実行時】【Mojave/Catalina 以降】


「Operation not permitted」で du しようもない

Mac を Mojave にしてからターミナルでコマンドを実行すると「du: 〜: Operation not permitted」と表示されるので du しようもないのです。

2020/08/28 追記: Catalina でも同じ現象が出ました。

せやかて sudo でも同じで、「du んだけ⤴️」かと思ったら ls mv cp などの他のコマンドでもチョイチョイ出るので困りました。

まずはエラーをCatalina
$ # ホームディレクトリ直下にあるサブディレクトリ容量の表示
$ sudo du -d 1 -h ~
Password:
(略)
du: /Users/admin/Library/Application Support/CallHistoryTransactions: Operation not permitted
du: /Users/admin/Library/Application Support/com.apple.TCC: Operation not permitted
du: /Users/admin/Library/Application Support/CallHistoryDB: Operation not permitted
du: /Users/admin/Library/IdentityServices: Operation not permitted
du: /Users/admin/Library/Messages: Operation not permitted
du: /Users/admin/Library/HomeKit: Operation not permitted
du: /Users/admin/Library/Mail: Operation not permitted
du: /Users/admin/Library/Safari: Operation not permitted
du: /Users/admin/Library/Suggestions: Operation not permitted
(以下省略)
検証環境と現象の完全ログ
検証環境
$ # 検証日
$ date
2019年 1月17日 木曜日 17時10分14秒 JST
$ 
$ # OSのバージョン
$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.14.2
BuildVersion:	18C54
$
$ # du コマンドのバージョン
$ man du | tail -1 | sed -e 's/  */ /g'
BSD June 2, 2004 BSD
duコマンドでの現象
$ # ホームディレクトリで du の実行
$ sudo du -d 1 -h ~
Password:
3.8M	/Users/admin/Music
8.0K	/Users/admin/.docker
8.0K	/Users/admin/.local
  0B	/Users/admin/Pictures
6.0M	/Users/admin/.phpls
 54M	/Users/admin/Desktop
du: /Users/admin/Library/Application Support/CallHistoryTransactions: Operation not permitted
du: /Users/admin/Library/Application Support/com.apple.TCC: Operation not permitted
du: /Users/admin/Library/Application Support/CallHistoryDB: Operation not permitted
du: /Users/admin/Library/IdentityServices: Operation not permitted
du: /Users/admin/Library/Messages: Operation not permitted
du: /Users/admin/Library/HomeKit: Operation not permitted
du: /Users/admin/Library/Mail: Operation not permitted
du: /Users/admin/Library/Safari: Operation not permitted
du: /Users/admin/Library/Suggestions: Operation not permitted
du: /Users/admin/Library/Containers/com.apple.VoiceMemos: Operation not permitted
du: /Users/admin/Library/Containers/com.apple.Home: Operation not permitted
du: /Users/admin/Library/Containers/com.apple.Safari: Operation not permitted
du: /Users/admin/Library/Containers/com.apple.iChat: Operation not permitted
du: /Users/admin/Library/Containers/com.apple.mail: Operation not permitted
du: /Users/admin/Library/Containers/com.apple.stocks: Operation not permitted
du: /Users/admin/Library/PersonalizationPortrait: Operation not permitted
du: /Users/admin/Library/Metadata/CoreSpotlight: Operation not permitted
du: /Users/admin/Library/Cookies: Operation not permitted
du: /Users/admin/Library/Caches/com.apple.safaridavclient: Operation not permitted
du: /Users/admin/Library/Caches/CloudKit/com.apple.Safari: Operation not permitted
du: /Users/admin/Library/Caches/com.apple.Safari: Operation not permitted
9.6G	/Users/admin/Library
200K	/Users/admin/.bash_sessions
  0B	/Users/admin/Public
  0B	/Users/admin/Movies
  0B	/Users/admin/Applications
  0B	/Users/admin/.Trash
326M	/Users/admin/Documents
147M	/Users/admin/Downloads
1.6M	/Users/admin/.cache
 10G	/Users/admin
同じディレクトリ階層の可視ファイル一覧
$ ls -lh ~/
total 0
drwx------@  3 admin  staff    96B  1 15 23:48 Applications
drwx------@ 56 admin  staff   1.8K  1 16 00:19 Desktop
drwx------@  9 admin  staff   288B  1 15 19:40 Documents
drwx------+  6 admin  staff   192B  1 17 13:05 Downloads
lrwxr-xr-x   1 admin  staff    32B  1 16 12:44 GitHub -> /Volumes/HDD_EXT_01/Git/GitHub
drwx------@ 63 admin  staff   2.0K  1 17 03:56 Library
drwx------+  3 admin  staff    96B  1 15 19:37 Movies
drwx------+  5 admin  staff   160B  1 15 22:27 Music
drwx------+  3 admin  staff    96B  1 15 19:37 Pictures
drwxr-xr-x+  4 admin  staff   128B  1 15 19:37 Public
lrwxr-xr-x   1 admin  staff    36B  1 16 16:50 Tests -> /Volumes/HDD_EXT_01/Data_Practices

SIP をいじるにしても SIP 返しが怖いし、High Sierra に戻すのも「めん du」なので Mojave て〜状態なのです。(クドくてすみません 🙇‍♂️

"Operation not permitted" mac mojave」と Qiita 記事に絞ってググってみたものの、ピンポイントで、まとまった情報がなかったので自分のググラビリティとして。

TL; DR (今北産業)

  1. デフォルトのセキュリティ設定がさらに厳しくなった。
    (macOS Mojave, OSX 10.14 以降)
  2. ユーザー下のディレクトリ(ホームやゴミ箱など)であっても、それらにアクセスするアプリは明示的に許可しないといけなくなった。
  3. システム環境設定で「ターミナル」アプリにフルディスクアクセスを許可する必要があります。

TS; DR (なんか色々細かいこと)

「システム環境設定」の「セキュリティとプライバシー」にある「フルディスクアクセス」に「ターミナル」アプリを追加して許可する。

  • 手順

    • アップルメニュー → [システム環境設定][セキュリティとプライバシー][プライバシー] - [フルディスクアクセス](鍵を解除)「+」ボタン押下 → 「アプリケーション」フォルダの「ユーティリティ」にある「ターミナル」を追加
    • 【注意】この作業の前に、ターミナルは終了していること

macOS Mojave(OSX 10.14)以降でセキュリティ設定がさらに厳しくなったため、sudo 付きやユーザーのホームディレクトリ下でも「Operation not permitted」が出るようになりました。これは、 du ls mv cp といった基本コマンドでも同じです。

設定変更後の出力結果

sudoなしでもOK
$ du -d 1 -h ~
3.8M	/Users/admin/Music
8.0K	/Users/admin/.docker
8.0K	/Users/admin/.local
  0B	/Users/admin/Pictures
6.0M	/Users/admin/.phpls
 55M	/Users/admin/Desktop
 10G	/Users/admin/Library
212K	/Users/admin/.bash_sessions
  0B	/Users/admin/Public
  0B	/Users/admin/Movies
  0B	/Users/admin/Applications
  0B	/Users/admin/.Trash
326M	/Users/admin/Documents
147M	/Users/admin/Downloads
1.6M	/Users/admin/.cache
 11G	/Users/admin

Permission denied」と表示される場合

$ du -d 1 -h ~
du: ./.DocumentRevisions-V100: Permission denied
du: ./.TemporaryItems: Permission denied
du: ./.Trashes: Permission denied

sudo を付けて実行すれば大丈夫です。(要パスワード)

$ sudo du -d 1 -h ~
Password:
 36M	./.DocumentRevisions-V100
  0B	./.TemporaryItems
 12K	./.Trashes

所感

去年(2018 年)から Mac の HighSierra で空き容量が足りないと頻繁に注意されていたので、思い切って平成最後の OS クリーン・インストールをすることにしました。

その際、OS も同じく頻繁に勧められていた Mojave にアップグレードすることにしたのです。(OSX 10.13 → 10.14)

しかし、Xcode を除く最低限必要なアプリに絞ったのに、思った以上に空き容量が確保できません。

そこで du コマンドで各サブディレクトリの容量を確認1しようとしたところ、du: <略>: Operation not permitted のアクセス権エラーが乱発しました。

管理者アカウントでも NG で、sudo を付けても同じく NG でした。(記事上部の「検証環境と現象の完全ログ」参照)

HighSierra のころから、ディレクトリやファイルによっては「Operation not permitted」は表示されていたのですが、Mojave からユーザーのホームディレクトリ下でも表示されるようになりました。

「これは、シンボリック・リンクを張り間違えたの、か?」と心配になりましたが、特に問題はなさげ・・・です。

色々触ってみると、どうやら Mojave 以降でセキュリティ設定がさらに厳しくなった印象を受けます。

となると、HighSierra の時のように SIP2 がらみの設定だと仮定すると厄介です。リカバリーモードで csrutil disable のターミナル操作などが必要3になるからです。

しかし、新しく入れた OS に余計な設定はしたくありませんし、アプリの動作検証のために設定を元に戻すのも大変です。

それでも容量は確認しないといけないため、「下手に新たにアプリを入れるのもなぁ」と思って検索してみた4ところ、英語でドンピシャの良質記事がありました5。助かりました。

Fix Terminal “Operation not permitted” Error in MacOS Mojave」@ OSXDaily


参考文献

  1. ディレクトリ以下のディスク容量を調べるduコマンド」@ Qiita

  2. システム整合性保護(System Integrity Protection)」@ Wikipedia

  3. 初心者向け MacでOperation not permittedの解決方法」@ Qiita

  4. Fix Terminal “Operation not permitted” Error in MacOS Mojave」@ OSXDaily