webからダウンロードしたappファイルの絶対パスがバグる(AppTranslocation)

先日Sierraにアップデートしました所、


webからデスクトップにダウンロードしたappファイルの絶対パスが、

「/private/var/folders/x0/tcdqjzn12lvd73llrf09s_3m0000gn/T/AppTranslocation/06269B18-0BA6-4F3B-8199-AF4B5D64EB94/d/ファイル名.app」

となってしまい、アプリが正常に動作致しません。


デスクトップに保存したアプリなら、

「Users/ユーザー名/Desktop/ファイル名.app/」

となるはずです。(Yosemiteの頃はこのようになっていました。)


調べてみると、

「AppTranslocation」というセキュリティがSierraから導入され、

それが原因でパスが正常に取れない状態のようです。


「AppTranslocation」というものを停止し、

今までのOSと同じように、絶対パスが正常になるようにするにはどうすれば良いでしょうか?

MacBook Pro with Retina display, macOS Sierra (10.12), Yosemiteからアップデート

投稿日 2016/10/23 02:12

返信
返信: 13

2016/10/23 19:48 kp6 への返信

 あらかじめシステム側のセキュリティ機能をオフにするしかないでしょう。SIPをオフにすればいいのかどうかは判りませんが。


 何のために絶対パスが必要なんでしょう? 考えられるのはアプリケーションと関連ファイルをフォルダーに入れ、実行時に関連ファイルを読む場合がありますね。その場合は関連ファイルをアプリケーションパッケージ内に取り込むことで対応できます。アプリというのがApple scriptだとどういう対応が可能なのか知識がありませんが。


=> Rond_1さん

 開発元が認証済みでも状況は同じです。

2016/10/23 15:56 kp6 への返信

webからデスクトップにダウンロードしたappファイルの絶対パスが、

「webからデスクトップにダウンロードしたappファイル」とは正確にはどのようなファイルでしょうか。

ttp://applech2.com/archives/20160616-apple-fix-gatekeeper-in-macos-sierra.html

ttp://applech2.com/archives/macos-10-12-sierra-gatekeepr-path-randomization.html


未確認の開発元からのアプリケーションは右クリックで開くことができますがお書きの状況だと上手くいかないかもしれません。

OS X:Gatekeeper について - Apple サポート

2016/10/23 03:35 ni_ki への返信

ご返信ありがとうございますm(_ _)m


ダウンロードしたファイル自体は、デスクトップ上に存在しております。


デスクトップ上に存在するappファイルを起動すると、

絶対パスが「/private/var/folders/x0/tcdqjzn12lvd73llrf09s_3m0000gn/T/AppTranslocation/06269B18-0BA6-4F3B-8199-AF4B5D64EB94/d/ファイル名.app」になります。

webからappファイルをダウンロードした時に「/private/var/folders/〜」に自動でコピーされ、

デスクトップ上にあるappファイルを起動すると、自動で「/private/var/folders/〜」の方が起動されてしまう状況です。


ちなみに保存先をデスクトップ以外にしても、同じ症状です。

(ファイル自体は保存した場所に存在する)



appファイルを一度別フォルダへ移動させてから元の場所に戻すことで

パスが正常化することがわかったのですが、


移動させるという手間なしに解決できる方法がないかと思いまして、質問させて頂きました。

2016/10/23 19:21 Rondo_1 への返信

技術的な詳細がわからないので外していたら申し訳有りませんがトピ主さんが言うところの「webからデスクトップにダウンロードしたapp」はいわゆる Repackaging 攻撃?とみなされるファイルかそれと判断されるような改変をトピ主さん自身が行ったのではないかと推測しています。

品川地蔵 さんによる書き込み:

 開発元が認証済みでも状況は同じです。

そうですね。失礼しました(トピ主さんのケースは右クリックでも多分開けないとだろうと思ったので)。

2016/10/23 19:42 Rondo_1 への返信

Rondo_1 による書き込み:


技術的な詳細がわからないので外していたら申し訳有りませんがトピ主さんが言うところの「webからデスクトップにダウンロードしたapp」はいわゆる Repackaging 攻撃?とみなされるファイルかそれと判断されるような改変をトピ主さん自身が行ったのではないかと推測しています。

<<省略>>

(トピ主さんのケースは右クリックでも多分開けないとだろうと思ったので)。

そういうことではなく、起動はするが「正常に機能を果たせない」と言うことでしょう。

Mac AppStore以外から(インターネット経由で)ダウンロードされた全てのプログラムが対象だと思います。

2016/10/23 19:53 品川地蔵 への返信

ご回答ありがとうございます!


考えられるのはアプリケーションと関連ファイルをフォルダーに入れ、実行時に関連ファイルを読む場合がありますね。

はい。おっしゃる通り、

同じフォルダに入れている関連ファイルを読み込んでおります。


その場合は関連ファイルをアプリケーションパッケージ内に取り込むことで対応できます。


自分でも色々と調べたのですが、「AppTranslocation」自体は簡単にはオフにできないようなので、

こちらの方法で対応したいと思います。ありがとうございました!

2016/10/24 04:10 kp6 への返信

すでに解決済みのようですが、参考までに。


Translocation (Gatekeeper Path Randomisation) が名前の示す通りに Gatekeeper の機能であるなら、Gatekeeper を無効にすれば特定アプリケーションの実行時の再配置は行なわれなくなるのではないか、と思いますが、違いますか。


Gatekeeper は以下のコマンドで無効に出来るはずです。



#!/bin/bash # disable GateKeeper sudo spctl --master-disable




あと、以下のような記事も参考になるかも。


Detect/disable translocation when moving app on macOS Sierra #56

https://github.com/potionfactory/LetsMove/issues/56



それによると、quarantine 拡張属性を削除すれば再配置は適用されないらしい。



#!/bin/bash # remove quarantine extented attribute sudo xattr -dr com.apple.quarantine /path/to/downloaded/application



(申し訳ないですが、私の環境 OS X 10.6.8 では何れもテストできないので、確認なしの情報提供のみとなります)

2016/10/24 06:07 chandana への返信

私が探した中では次のページが一番判りやすくまとまっていました。Apple のサイトでは具体的な記述は見つけられませんでした。

http://lapcatsoftware.com/articles/app-translocation.html


SIPを止めればAppTranslocationが働くなることや、quarantine 拡張属性を削除すれば働かなくなることも書いてあります。

しかし、いずれもプログラムを起動する前に処理する必要があるので、kp6さんの希望には沿わないですね。

2016/10/24 08:17 品川地蔵 への返信

情報ありがとうございます。


SIP (System Integrity Protection) が関与しているようには書かれていないようですが、実際どうなのでしょうかね。


Gatekeeper が中心的な役割を担っているのなら、Gatekeeper を無効化すればすむようにも見えますね。


あるいは、Launch Services も一端をになっているようなので、下記のコマンドも試す価値はあるかもしれません。これは、LS が com.apple.quarantine 拡張属性を無視するように設定するものです。ただ、Gatekeeper Path Randomisation の文脈でこれが有効かどうかは判りません。(設定後には再起動が必要か)



#!/bin/bash # disable quarantine in launchservice defaults write com.apple.LaunchServices LSQuarantine -bool false



これらの処理も、com.apple.quarantine 拡張属性の削除も、当然ながら問題のアプリケーションを起動する前に行なっておかねばなりませんが、それが何か問題なのでしょうか。拡張属性の削除以外は、ファイルベースではないので一度やれば十分ですし、拡張属性の削除もコマンド一つなので、サービスを作るなりフォルダアクションを作るなりすれば、瞬時に実現できます。まあ、質問者の意向と使い方次第ですが。

2016/10/24 15:14 chandana への返信

 質問者の意図を理解していますか?

kp6さんは自分で開発したプログラムをインターネットサイトからダウンロードした時に問題が発生すると言っておられるのですよ。と言うことは(組織内かその他大勢かは別にして)他人にダウンロードしてもらうはずです。その時にセキュリティを無効にしてくださいとか、頼めないでしょ? アプリケーション本体を一度移動すれば避けられることは判っているのです。それをプログラムの対策で避ける方法はないか、と言うのが質問の主旨でしょう。

2016/10/23 19:57 品川地蔵 への返信

品川地蔵 さんによる書き込み:

そういうことではなく、起動はするが「正常に機能を果たせない」と言うことでしょう。

Mac AppStore以外から(インターネット経由で)ダウンロードされた全てのプログラムが対象だと思います。

ありがとうございます。理解できました。確かに「アプリが正常に動作致しません。」と書かれていますね。申し訳ありません。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

webからダウンロードしたappファイルの絶対パスがバグる(AppTranslocation)

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。