Q: 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 18:12

  • すべての返信
  • 参考になった回答

  • 投稿者 ni_ki,

     ni_ki 2016/10/23 19:13 kp6 への返信
    Level 7 レベル 7 (32,429 ポイント)
    expertise.macosx
    Mac OS X
    2016/10/23 19:13 kp6 への返信

    パスが正常に取れないとの事ですが単純にダウンロード後、デスクトップに移動しないということではないのでしょうか。

    2016/10/23 19:13

  • 投稿者 kp6,

     kp6 2016/10/23 19:35 ni_ki への返信
    Level 1 レベル 1 (4 ポイント)
    expertise.macosx
    Mac OS X
    2016/10/23 19: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:35

  • 投稿者 Rondo_1,

     Rondo_1 2016/10/24 07:56 kp6 への返信
    Level 3 レベル 3 (521 ポイント)
    expertise.macosx
    Mac OS X
    2016/10/24 07: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/24 7:56

  • 投稿者 品川地蔵,この内容で問題が解決した回答

     品川地蔵 2016/10/24 11:48 kp6 への返信
    Level 4 レベル 4 (1,882 ポイント)
    expertise.macosx
    Mac OS X
    2016/10/24 11:48 kp6 への返信

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

     

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

     

    => Rond_1さん

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

    2016/10/24 11:48

  • 投稿者 Rondo_1,

     Rondo_1 2016/10/24 11:21 Rondo_1 への返信
    Level 3 レベル 3 (521 ポイント)
    expertise.macosx
    Mac OS X
    2016/10/24 11:21 Rondo_1 への返信

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

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

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

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

    2016/10/24 11:21

  • 投稿者 品川地蔵,

     品川地蔵 2016/10/24 11:42 Rondo_1 への返信
    Level 4 レベル 4 (1,882 ポイント)
    expertise.macosx
    Mac OS X
    2016/10/24 11:42 Rondo_1 への返信

    Rondo_1 による書き込み:

     

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

    <<省略>>

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

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

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

    2016/10/24 11:42

  • 投稿者 kp6,

     kp6 2016/10/24 11:53 品川地蔵 への返信
    Level 1 レベル 1 (4 ポイント)
    expertise.macosx
    Mac OS X
    2016/10/24 11:53 品川地蔵 への返信

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

     

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


    はい。おっしゃる通り、

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

     

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

     

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

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

    2016/10/24 11:53

  • 投稿者 Rondo_1,

     Rondo_1 2016/10/24 11:57 品川地蔵 への返信
    Level 3 レベル 3 (521 ポイント)
    expertise.macosx
    Mac OS X
    2016/10/24 11:57 品川地蔵 への返信

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

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

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

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

    2016/10/24 11:57

  • 投稿者 chandana,

     chandana 2016/10/24 20:10 kp6 への返信
    Level 2 レベル 2 (319 ポイント)
    2016/10/24 20: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 20:10

  • 投稿者 品川地蔵,

     品川地蔵 2016/10/24 22:07 chandana への返信
    Level 4 レベル 4 (1,882 ポイント)
    expertise.macosx
    Mac OS X
    2016/10/24 22:07 chandana への返信

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

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

     

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

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

    2016/10/24 22:07

  • 投稿者 chandana,

     chandana 2016/10/25 00:17 品川地蔵 への返信
    Level 2 レベル 2 (319 ポイント)
    2016/10/25 00: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/25 0:17

  • 投稿者 品川地蔵,

     品川地蔵 2016/10/25 07:14 chandana への返信
    Level 4 レベル 4 (1,882 ポイント)
    expertise.macosx
    Mac OS X
    2016/10/25 07:14 chandana への返信

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

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

    2016/10/25 7:14

  • 投稿者 chandana,

     chandana 2016/10/25 07:47 品川地蔵 への返信
    Level 2 レベル 2 (319 ポイント)
    2016/10/25 07:47 品川地蔵 への返信

    質問者はこれが自分の作成したプログラムをダウンロードしたときの挙動についてであるとは一言も書いていませんね。そのような本質的な文脈は明記すべきでしょう。まあ、本件は解決済みとの事なので、いまさらどうでもいいですがね。

    2016/10/25 7:47