45 某ソフトのインストール作業でのドタバタ    xattr を訳も分からず使う …分かった? Sequoia やばいかもしれない

とある有名なソフトウェア会社のソフトのインストールが、 例の GATEKEEPER に引っかかって、それを手動で回避した、という話。 なんで Apple にお願いして、信頼できる開発者にしてもらわないのだろう。 FreeFem++ 開発チームじゃあるまいし、お金も人もあり余っているだろうに、 ユーザーに色々面倒なことをさせるのはおかしいなあ、 というぼやきです。


そのソフトのインストーラーは、 何とか.zipという zip ファイルで提供される。 ダウンロードして ~/Downloads に置いて、ダブルクリックせよ、 と指示されている。すると ~/Downloads/何とか に展開される。

ターミナルでのぞきに行く
% cd ~/Downloads/何とか
% ls -l
total 40
-rw-rw-r--@ 1 mk  staff  17052 12 30  2019 かんとか.dmg
drwxrwxr-x@ 3 mk  staff     96  9 22 15:59 何とか.app/

何とか.app はいわゆるインストーラーであるが、 もう一つ かんとか.dmg というのがある。

ところで、両方とも `@' がついている (-rw-rw-r-@, drwxrwxr-x@)。 これは拡張ファイル属性を付加されている印である。


拡張ファイル属性について、 次のWWWサイトは、マニュアルを日本語訳したりしていて、親切。

「xattr コマンドの使い方/ヘルプの日本語訳(macOS でパーミッションの@付き拡張属性の操作)」


ls のオプションに '@' をつけると詳しい内容が表示される。

拡張ファイル属性を調べる
% ls -lR@
total 40
-rw-rw-r--@ 1 mk  staff  17052 12 30  2019 かんとか.dmg
	com.apple.quarantine	   21
drwxrwxr-x@ 3 mk  staff     96  9 22 15:59 何とか.app/
	com.apple.quarantine	   21

./何とか.app:
total 0
drwxr-xr-x@ 7 mk  staff  224  9 23 00:33 Contents/
	com.apple.quarantine	 21

./何とか.app/Contents:
total 16
-rw-rw-r--@ 1 mk  staff  2121  9 22 15:59 Info.plist
	com.apple.quarantine	  21
drwxr-xr-x@ 4 mk  staff   128  9 23 00:33 MacOS/
	com.apple.quarantine	  21
-rw-rw-r--@ 1 mk  staff     8  2 13  2020 PkgInfo
	com.apple.quarantine	  21
drwxr-xr-x@ 6 mk  staff   192  9 23 00:33 Resources/
	com.apple.quarantine	  21
drwxr-xr-x@ 3 mk  staff    96  9 23 00:33 _CodeSignature/
	com.apple.quarantine	  21
(以下略)

com.apple.quarantine は、 “App Store以外の ソースから取得したりするファイルやアプリに付いている拡張属性” だそうである。 なるほど、確かにWWWからダウンロードしたファイルである。

さて、 “~/Downloads/何とか/かんとか.dmg” は、 ディスク・イメージ・ファイルで、 これをダブル・クリックすると、 /Volumes/かんとか にマウントされる。
マウントされたものを見にいく
% ls -l /Volumes/かんとか
かんとか.command*
%
かんとか.command という1つだけのファイルがある。

これは実はシェル・スクリプトで、インストール手順として、 これを 「Finder で control+クリックして「開く」を選んで実行せよ」 と言われているのだが、今回、ここで引っかかった。

Apple は、“かんとか.command” にMacに損害を与えたり、 プライバシーを侵害する可能性のあるマルウェアが含まれていないことを 検証できませんでした。
と表示される。
Image evil
かんとか.command の内容を次のようにして確認すると、 5行のシェル・スクリプトと分かる
% cat /Volumes/何とか/かんとか.command
cd $pwd
cd downloads
ls -l
chmod +x */*.app/contents/macos/id_download
xattr -d com.apple.quarantine */*.app%
%

このシェル・スクリプトがやろうとしていることは
ダウンロード (~/Downloads) にある 何とか.app/Contents/MacOS/id_downliad に実行可能属性をつけて (chmod +x)、 何とか.app 以下にあるファイルの拡張ファイル属性 com.apple.quarantine を削除する (xattr -d)。
ということ (アスタリスク使ったり、大文字を小文字で済ませたり、 真面目にやれよ、と言いたくなる雑なスクリプトだ)。

つまり、信頼できる開発会社と Apple に認めてもらうことをサボって、 このシェル・スクリプトをユーザー (インストールしようとしている人) に実行させることで、com.apple.quarantine 属性を削除しよう、 というつもりな訳だ。

ところが、Sequoia では、 シェル・スクリプトの実行も GATEKEEPER に引っかかるよ、 control+クリックで開こうとしても回避できないよ、と。

デジャブ。FreeFem++ のときに遭遇したやつだ。 あれはひどかった。某講義で授業中に回避の仕方を実演して、 個別対応したけれど、欠席した連中が学期末に…という困った事象が思い出される。

あのときと同じようにしようか ([システム設定]→[プライバシーとセキュリティ]) と思ったけれど、 たったの5行だし、もうスクリプトの実行はあきらめて、 手動で行うことにした。

シェル・スクリプトに書いてあることを手動で実行
% cd ~/Downloads
% chmod +x 何とか/何とか.app/Contents/MacOS/id_download
% xattr -d com.apple.quarantine 何とか.app

こうしてから、インストーラー (何とか.app) を実行して前進できた。 その後も色々あったけれど (雑な連中の作るものはポンコツだ)、 それは別のことなので省略。


もしかすると、今回分かったことで、 FreeFem++ のインストール手順について、 次回からは簡単な指示ができるかもしれないな (どうせある程度面倒なことをするのなら、 最初に手動で xattr するように指示すれば、トラブルフリーになりそうな気がする)、 と思った。 実際に試すのは次の春学期になるかしらん。


(2024/9/23) com.apple.provenance という通常手順では削除できない拡張属性も作られたと。 まだネットで検索しても1000件未満か。 うーむ。なんか、ちょっと嫌になってきたぞ。 Sequoia にすると、ローカルにファイルを作っても、この拡張属性がつくんだ。 自由にコンピューティングできなくなる未来が見えるな。 Mac からお引越しを考えないといけないかな。 新しい Mac を買うと Sequoia なのか…

How macOS now tracks the provenance of apps



桂田 祐史