rootとしてスクリプトを実行し、ユーザーをログインさせるためのGUIを提示する


1

私はプログラミング決定の問題を抱えています、そして、あなたが私に解決策を見せるか、問題を解決する方法に関する私の計画が大丈夫であるかどうか私に言うことができることを望みます。

私はいくつかのMacを管理していて、ユーザがログインするたびにスクリプトを実行したいと思っています。スクリプト(まだ書いていません)はいくつかの変更をする必要があります(しないでください)。変更には管理者権限が必要ですが、スクリプトには現在ログインしている(またはログインしている)ユーザーからの情報も必要です。

通常、これはLaunchAgent / Deamonの仕事ですが、ここに問題があります。/ LaunchDeamonsのスクリプトはシステム管理者として実行されますが、システムと一緒に起動します。ユーザーがログインまたはログアウトしていることを認識していないため、GUIが表示されない場合があります。 〜/ LaunchAgentsはログインしたユーザーとして実行され、ユーザーがログインすると起動します。また、GUIが表示されることもあります。ただし、システム管理者としては動作しません。

つまり、これは私の問題です。スクリプトをrootとして実行しますが、ユーザーがログインしてGUIを彼に提示するたびに開始します。私の解決策は、2つのスクリプトを書くことです。

スクリプト1はシステム管理者として実行され、/ LaunchDeamonsにあります。これは不完全な接続のためにSocketをオープンにするでしょう(AKA "Server Socket")。

スクリプト2はログイン中のユーザーとして実行され、〜/ LaunchAgentsにあります。ユーザーにGUIを提示し、ソケット接続を介してスクリプト1に情報を送信します。

これは最も信頼できる/直接的な解決策であるとは思われませんが、他には考えられません。私は他のプログラムがどのようにこの問題を解決するのか(例えば、munki、これはユーザーにGUIを提示するがプログラムをシステム管理者としてインストールする)を見つけようとしましたが、どうやって解決できたかわかりません。

私はこれについていくつかのコメントを喜んでいます! よろしく、クリスチャン

シモンズ:私はPythonを使うつもりです。


Macはドメインの一部ですか?ユーザーはこのドメインに対して認証されますか、それともローカルで認証されますか?彼らがドメイン/ネットワークユーザーであれば、スクリプトを実行しているドメイン管理者アカウントの形で解決策がずっと簡単になります。
agentroadkill

2人の異なるユーザーが同じMacにログインした場合、どうしますか?つまりchnageはユーザーごとに異なります
Mark

@agentroadkill:まあ、部分的に;)。 Macは実際にはさまざまな会社のさまざまなユーザーです。ドメインの一部であるものとそうでないものがあります。
Christian

@マーク:どちらもGUIを見て情報を入力できるようにします。スクリプトがインストールする情報は「プリエンプティブ」ではありません。 (ユーザーごとに異なりますが、インストールするには管理者権限が必要です)
Christian

情報はどこに保存されていますか?
Mark

回答:


1

ソケット - 関与しているが試行およびテスト済み

2つのスクリプトがソケットを介して通信するという解決策は、試行錯誤された方法です。我々はこれをしました パワーマネージャ そしてそれはOS X 10.3 - 10.11から確実に働いています。

この目的には、tcpまたはunixドメインソケットを使用できます。

私たちの状況では、デーモン pmd コンピュータ全体のプロセスおよびユーザセッションデーモンとして動作します。 pmuser ユーザーごとに1回実行されます。彼らはコンピュータ全体のデーモンであるという情報を共有するために話します 安全に入手できない 特定のユーザーセッション内でアクションを実行するため。

コンピュータ全体のデーモンは、ユーザがログインしたことを検出できます。これはSystemConfiguration APIを介して行われます。 SCDynamicStoreKeyCreateConsoleUser

グラフィカルスクリプトは、グラフィカルユーザーセッション内で起動する必要があります。着手した仕事 /Library/LaunchDaemons キーと値のペアで LimitLoadToSessionTypeAqua セットはこれを保証します。

ユーザーから収集する必要がある情報によっては、Power Managerを使用して達成したいことが可能になると思います。お気軽に 連絡する

launchctlのbsexec

OS Xの最近のバージョンには launchctl それはあなたが必要としているものを約束します:ユーザーセッション内でプロセスを起動する能力。見る 他のユーザーのグラフィカルセッションでGUIアプリケーションを起動する方法 あなたが遭遇するであろう詳細と起こりそうな問題のために。

OS X 10.10以降にデプロイしている場合は、launchdの新しいドメイン機能を調べてください。 OS X 10.10での完全な書き換えにより、まだ完全には文書化されていないオプションが数多く生まれました。の launchdメーリングリスト 情報の宝庫です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.