LaunchAgentには望ましくないルートアクセス権があります


0

LaunchAgentを通常の(root以外の)ユーザーとして実行するのに問題があります。私が読んだものはすべてこれがデフォルトの振る舞いであるべきであることを意味します。期待は、あなたが/ Library / LaunchAgentsにplistを入れたならば、それがロードされるとき、それはユーザーとして、ユーザーとして、ユーザーとしてログインするためにロードされることです。

ただし、sudo( 'sudo launchctl load /Library/LaunchAgents/myagent.plist')を指定してlaunchctlを実行すると、ユーザーセッションでプロセスが開始されます。 ルートとして 。これは、 'ps u -ax'がプロセスが 'root'として実行されていること、そしてそのプロセスによって作成されたファイルがrootによって所有されていることを意味します。

私はこれについてグーグルしようとしました、そして誰かのようなたくさんの投稿を見つけました 望む 彼らのエージェントはroot権限を持っていて(これはIMOが "間違っている")、彼らはこれらすべてのフォーラムに投稿しています " どうやってそれを根付かせることができますか 「そして誰もが説明するように返事をしている」 rootにならない、そのユーザーエージェント 「……それが私が期待することです、しかし私は反対の問題を抱えています、私は しないで このエージェントにrootアクセス権を与えてもらいたいのですが、持ってはいけませんが、まだ持っています。

答えが「 あなたは単にsudoでlaunchctl loadを実行することができないか、これが起こります "、私はどこにもそれが文書化されていることを見つけることができませんでした。 すべき rootアクセス権を持っていますか?製品が自分自身を更新するために必要なことは何ですか?

編集:これはこれが問題になることすらないように思わせる、あなたがそれを望んでいてもエージェントをrootとして実行することは不可能に思えるようにする、よくリンクされた投稿の例です。 https://superuser.com/a/36173/603140


なぜそれを〜/ Library / LaunchAgentsに入れないのですか?
Tetsujin

すべてのユーザーに対して実行する必要があるためです。しかし、これはrootから実行されるかどうかには影響しません。ドキュメントからわかる限りです。 docs(そしてほとんどの議論)は、それがユーザとして動かなければならない/ Lirbrary / LaunchDaemonsである限り、それをサウンドのようにします。 launchctlがsudoで実行されている場合は、もっと関係があると思います。
user1169420

回答:


0

launchdは、各ユーザーセッション(「起動エージェント」)とシステムコンテキスト(「起動デーモン」)に1つずつ別々の項目リストを保持しています。走ったとき launchctl load rootとして、アイテムはシステムリストにロードされます(つまり、エージェントではなく起動デーモンとして)。 ファイルの場所に関係なく 。あなたがする必要があることはまさにあなたが達成しようとしていることによります:

  • 今後のユーザーセッションで起動エージェントとしてアイテムを読み込むようにする場合(つまり、次回のログイン時)は、アイテムを/ Library / LaunchAgentsに配置し、権限を適切に設定してから、ゆっくりとリラックスしてください。ユーザがログインすると、そのディレクトリをスキャンし、見つかったものをロードします。

  • アイテムを既存のログインセッションにロードしようとしている場合は、実行する必要があります。 launchctl load そのセッションで 。それが何を意味するのか、そしてそれをどうやって行うのかは正確には複雑で、そしてあなたが実行しているOS Xのバージョンに依存するかもしれません(Appleはlaunchdアーキテクチャを変え続けています...)。少なくとも古いバージョンのOS Xでは、ターゲットとしているセッションで実行されているプロセスのプロセスIDを見つけて、次のように実行する必要があります。

    sudo launchctl bsexec $PIDInTargetSession sudo -u $TargetUsername launchctl load /Library/LaunchAgents/youritem.plist
    

    説明:最初の sudo 次にルートに切り替えます launchctl bsexec $PIDInTargetSession ターゲットセッションのmachブートストラップコンテキストに切り替えます(複雑だと私は言いました)。 sudo -u $TargetUsername UIDをrootからターゲットユーザーに切り替え、最後に launchctl load /Library/LaunchAgents/youritem.plist そのセッションでエージェントをロードします。

それでも解決しない場合は、確認してください。 このメッセージ いくつかの選択肢があります。


ありがとう、これはとても役に立ちます。残念なことに私はあなたを支持する代表者を持っていません。エージェントフォルダからデーモンとしてロードされているように思われましたが、1その可能性を裏付ける文書が見つかりませんでした。あなたはこれについて何か文書を指すことができますか、それともあなたのための単なる文脈上の知識と常識ですか?
user1169420

@ user1169420「常識」とはあまり関係がないとは思いませんでした。 開発者向けテクニカルノートTN2083、「デーモンとエージェント」 特に役に立ちました)、そして何年にもわたっていろいろなものをうまく動かそうとする過程でのある量の実験。
Gordon Davisson
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.