pkexecとgksu / gksudoを使用する場合


77

アプリケーションをルート(または、より一般的には別のユーザー)としてグラフィカルに実行するには、2つの一般的な方法があります。、などのプログラムはgksu、のグラフィカルなフロントエンドです。対照的に、PolicyKitのグラフィカルなフロントエンドです。gksudokdesudosudopkexec

ときに手動でプログラムを実行してルートとして(または別の非ルート・ユーザーとして)、何使用する利点/欠点(もしあれば)pkexec使用のより伝統的な方法と比較して、sudoフロントエンド?




回答:


25

PolicyKitはより設定可能ですpkexecが、この設定可能性は利用しません。また、pkexec起動されるプログラムの完全なパスをユーザーに表示します。これにより、ユーザーは何が起こるかをもう少し確信できます。PolicyKitのいわゆる「ポリシー」を使用して、より高度な設定を行うことができます。たとえば、パスワードを記憶する必要があるかどうか。

pkexecマニュアルから得たもの:

PROGRAMが実行する環境は、LD_LIBRARY_PATHまたは同様のメカニズムを介したコードの挿入を回避するために、最小限の既知の安全な環境に設定されます。さらに、PKEXEC_UID環境変数は、pkexecを呼び出すプロセスのユーザーIDに設定されます。その結果、$ DISPLAY環境変数が設定されていないため、pkexecでは、たとえばX11アプリケーションを別のユーザーとして実行することはできません。

詳細については、ポリシーアクション定義からpkexecマニュアル:

   To specify what kind of authorization is needed to execute the program
   /usr/bin/pk-example-frobnicate as another user, simply write an action
   definition file like this

       <?xml version="1.0" encoding="UTF-8"?>
       <!DOCTYPE policyconfig PUBLIC
        "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
        "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
       <policyconfig>

         <vendor>Examples for the PolicyKit Project</vendor>
         <vendor_url>http://hal.freedesktop.org/docs/PolicyKit/</vendor_url>

         <action id="org.freedesktop.policykit.example.pkexec.run-frobnicate">
           <description>Run the PolicyKit example program Frobnicate</description>
           <description xml:lang="da">Kør PolicyKit eksemplet Frobnicate</description>
           <message>Authentication is required to run the PolicyKit example program Frobnicate</message>
           <message xml:lang="da">Autorisering er påkrævet for at afvikle PolicyKit eksemplet Frobnicate</message>
           <icon_name>audio-x-generic</icon_name>
           <defaults>
             <allow_any>no</allow_any>
             <allow_inactive>no</allow_inactive>
             <allow_active>auth_self_keep</allow_active>
           </defaults>
           <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/pk-example-frobnicate</annotate>
         </action>

       </policyconfig>

   and drop it in the /usr/share/polkit-1/actions directory under a
   suitable name (e.g. matching the namespace of the action). Note that in
   addition to specifying the program, the authentication message,
   description, icon and defaults can be specified. For example, for the
   action defined above, the following authentication dialog will be
   shown:

       [IMAGE][2]

           +----------------------------------------------------------+
           |                     Authenticate                     [X] |
           +----------------------------------------------------------+
           |                                                          |
           |  [Icon]  Authentication is required to run the PolicyKit |
           |          example program Frobnicate                      |
           |                                                          |
           |          An application is attempting to perform an      |
           |          action that requires privileges. Authentication |
           |          is required to perform this action.             |
           |                                                          |
           |          Password: [__________________________________]  |
           |                                                          |
           | [V] Details:                                             |
           |  Command: /usr/bin/pk-example-frobnicate                 |
           |  Run As:  Super User (root)                              |
           |  Action:  org.fd.pk.example.pkexec.run-frobnicate        |
           |  Vendor:  Examples for the PolicyKit Project             |
           |                                                          |
           |                                  [Cancel] [Authenticate] |
           +----------------------------------------------------------+

   If the user is using the da_DK locale, the dialog looks like this:

       [IMAGE][3]

           +----------------------------------------------------------+
           |                     Autorisering                     [X] |
           +----------------------------------------------------------+
           |                                                          |
           |  [Icon]  Autorisering er påkrævet for at afvikle         |
           |          PolicyKit eksemplet Frobnicate                  |
           |                                                          |
           |          Et program forsøger at udføre en handling der   |
           |          kræver privilegier. Autorisering er påkrævet.   |
           |                                                          |
           |          Kodeord: [___________________________________]  |
           |                                                          |
           | [V] Detaljer:                                            |
           |  Bruger:   Super User (root)                             |
           |  Program:  /usr/bin/pk-example-frobnicate                |
           |  Handling: org.fd.pk.example.pkexec.run-frobnicate       |
           |  Vendor:   Examples for the PolicyKit Project            |
           |                                                          |
           |                                [Annullér] [Autorisering] |
           +----------------------------------------------------------+

   Note that pkexec does no validation of the ARGUMENTS passed to PROGRAM.
   In the normal case (where administrator authentication is required
   every time pkexec is used), this is not a problem since if the user is
   an administrator he might as well just run pkexec bash to get root.

   However, if an action is used for which the user can retain
   authorization (or if the user is implicitly authorized), such as with
   pk-example-frobnicate above, this could be a security hole. Therefore,
   as a rule of thumb, programs for which the default required
   authorization is changed, should never implicitly trust user input
   (e.g. like any other well-written suid program).

1
グラフィカル認証でrootとしてアプリケーションを実行するには2つあると言っておくべきだったと思いますpkexecグラフィカルアプリケーションを実行するために使用する方法があると想定していました(実行したことがなかった...)。あなたの答えは、なぜ存在しないのか(または、少なくともそれを行うためにカスタム環境を指定する必要がある理由)を説明しています。
エリアケイガン

1
しかし、あなたの答えについて質問があります-プログラムがrootでrootとして実行されるとき、pkexecどのような意味で機能(「許可」)を制限できますか?プログラムsudoまたはsudoフロントエンドで実行するときにプログラムに何かをする機能を付与します... rootとしてプログラムを実行すると、pkexecこれを行わないのはどのような意味ですか?
エリアケイガン

3
PolicyKitを使用して、プログラムが特定の種類のアクションのみを実行できるようにすることを理解しています。しかしpkexec、それは容易になりますか、それともpkexec無制限の能力で物事をルートとして実行しますか?pkexecマニュアルの抜粋は、あなたではなく、プログラムが何ができるかよりも、ルート(または別として、非rootユーザ)としてプログラムを実行できるユーザーを決定するためのルールを作成する方法をご回答文書に含まれています。
エリアケイガン

4
多くの良い情報を提供してくれるので、私はあなたの答えを受け入れたいです。しかし、それは非常に誤解を招きやすいと感じています。なぜなら、それはのpkexec設定よりも設定可能sudoであり、コメントでここで行った議論を考えると、そうではないようだからです。回答を編集してsudoの構成可能性を説明し、それと比較/対比するpkexecか、回答を編集して構成可能性以外の違いであると考えますか?
エリアケイガン

2
「単に書く」だけで、XMLのチャンクです。その笑いが必要だった。
ユルゲンA.エアハルト

14

sudoを使用すると、sudoのコンテキストで呼び出し側環境を保持またはリセットするかどうかについて、ユーザーごとおよびプログラムごとにポリシーを設定できます。env_resetポリシーはデフォルトで設定されています。

明示的に設定しない限り、pkexecを使用してグラフィカルアプリケーションを実行することはできません。これは単に環境リセットの結果であるため、これは明らかにsudoにも当てはまります。ただし、pkexecもsudoも、rootとして実行されている悪意のあるアプリケーションがディスプレイマネージャーまたはユーザーのX11-cookieファイルから必要なすべての情報を取得するのを防ぐことはできません。後者、またはその両方は、状況によっては非ルートアプリケーションによって実行される場合もあります。

須藤は、ユーザーの明示的なリストを必要としません。一般に、ユーザーグループの一覧表示、またはすべてのユーザーのアクセス許可の設定を行うこともできます。target_pwディレクティブを使用すると、これらのユーザーは、アプリケーションを実行するコンテキスト(rootなど)のユーザーの資格情報で認証できます。それとは別に、同様に伝統的なsu(su / gtksu / kdesu)プログラムを使用して、特別な構成なしでまったく同じことを行うことができます。

sudoも、ユーザーが指定された時間の間、認証されたままでいられるようにします。このオプションにはタイムアウトという名前が付けられ、グローバル、ユーザーごと、またはアプリケーションごとに構成できます。認証は、ttyごとに保持することも、ユーザーごとにグローバルに保持することもできます。

pkexecは、PROGRAMに渡された引数の検証を行わない場合がありますが、sudoには実際にこの機能があります。ただし、これは簡単に台無しにできますが、通常は行われません。

pkexecを使用してプログラムを実行する方法を少し調整することができます。アイコン、表示するテキスト、ローカリゼーションなどもあります。状況によっては、これは本当に気の利いたものになる可能性があります。悲しいことに、誰かがこの機能のために車輪を再発明する必要性を感じました。これはおそらく、グラフィカルなgtksudo / kdesuラッパーに入れるものです。

Policykitは、集中化された構成フレームワークにすぎません。残念ながら、きれいなものではありません。PKのXMLファイルは、アプリがネイティブにバイナリファイルを短く提供できるものよりもはるかに複雑です。そして、誰もバイナリを使用するのにそんなにお金がかからないでしょう...ああ、gconf ...気にしないでください。


8
この投稿は実際には答えではなく、別の答えに対する批判だからです。通常、pkexecよりもsudoを使用する方が良いと思われる場合は、そう言って、これらの反論でポイントを説明してください。
フリム

4
ここで多くの有用な分析をしてくれたPaulに感謝します!しかし、私はFlimmにも同意します。質問に対する簡単な答えから始められますか?
nealmcb

1
いいえ、pkexec することができます設定しなくても、GUIを実行します。askubuntu.com/a/332847/89385
akostadinov

8

いくつかのpkexecsudoとそのフロントエンドとの違い:

  1. pkexec明示的に設定しない限り、グラフィカルアプリケーションを実行することはできません。
  2. pkexecアイコン、表示するテキスト、パスワードを記憶するかどうか、グラフィカルに実行できるようにするかどうかなど、プログラムの実行方法を微調整できます。
  3. だれでもスーパーユーザーとして「実行」を実行できます(そのように認証できるsudo場合)。このsudoersファイルにadminとしてリストする必要があります。
  4. gksudoパスワードを要求するときにキーボード、マウス、フォーカスをロックしますが、pkexecそうではありません。どちらの場合でも、キーストロークは盗聴可能です
  5. pkexecあなたは少し消毒の環境で動作します。

例えば試してみてください:

cd /etc/init.d
sudo cat README
# and now the same with pkexec
pkexec cat README
# nice, huh?

あなたがなどのプログラムを実行するために、他のユーザーとして認証できる方法についての良い点(#3)rootとをpkexec。どのユーザーが使用できるように構成できますpkexecか(許可されている別のユーザーのパスワードを知っている場合でも)。suこの方法で構成可能です。Oneiricシステムのようsuに別の非rootユーザーにguestアクセスしようとすると、許可されていません。(対照的に、OneiricまたはPreciseで使用しようとするpkexecguest、アサーションエラーのように見えますが、許可されていなくても取得できないはずなので、すぐにバグとして報告する可能性があります。)
エリアケイガン

2
しかし、sudoポイント2で説明したように、そのフロントエンドはまた、あなたが使用してプログラムを実行することができます微調整することができますgksuまたはgksudo カスタマイズされたテキストを表示、編集することにより、一部のユーザーのパスワードを必要とするストップ/etc/sudoers(でvisudo)、そしてそれらがどのように変化するという意味で覚えているどのくらいの時間変更sudoがタイムアウトするまでに時間がかかります(ただし、Ubuntuでこれを行う方法はわかりませんsudoが、パスワードが必要かどうか、またパスワードが再度必要になるまでの時間は端末固有です。 )。
エリアケイガン

#4は、GNOME Shellを使用している場合は当てはまりません。
ムル14

いいえ、pkexec することができます設定しなくても、GUIを実行します。askubuntu.com/a/332847/89385
akostadinov
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.