pkexec와 gksu / gksudo를 언제 사용해야합니까? 실행하는 두

응용 프로그램을 루트 (또는 더 일반적으로는 다른 사용자)로 그래픽으로 실행하는 두 가지 일반적인 방법이 있습니다. 프로그램처럼 gksu, gksudo그리고 kdesudo위한 그래픽 프론트 엔드입니다 sudo. 이와 대조적 pkexec으로 PolicyKit 의 그래픽 프론트 엔드입니다 .

루트 (또는 다른 비 루트 사용자)로 프로그램을 수동으로 실행할 때 , 프론트 엔드 pkexec를 사용하는보다 전통적인 방법과 비교 sudo하여을 사용하는 장점 / 단점 (있는 경우)은 무엇입니까?



답변

PolicyKit은 더 구성 가능하지만 pkexec이 구성 기능을 사용하지는 않습니다. 또한, pkexec시작될 프로그램의 전체 경로를 사용자에게 보여주십시오. PolicyKit의 소위 ‘정책’을 사용하여 더 많은 고급 설정을 설정할 수 있습니다. 예를 들어, 비밀번호를 기억해야하는지 여부입니다.

내가 pkexec매뉴얼 에서 얻은 것 :

PROGRAM이이를 실행하는 환경은 LD_LIBRARY_PATH 또는 유사한 메커니즘을 통한 코드 주입을 피하기 위해 최소한의 알려진 안전한 환경으로 설정됩니다. 또한 PKEXEC_UID 환경 변수는 pkexec를 호출하는 프로세스의 사용자 ID로 설정됩니다. 결과적으로 $ pk 환경 변수가 설정되어 있지 않기 때문에 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).

답변

sudo를 사용하면 sudo의 맥락에서 발신자 환경을 유지하거나 재설정 할 수있는 사용자 및 프로그램 정책을 설정할 수 있습니다. env_reset 정책은 기본적으로 설정되어 있습니다.

pkexec를 통해 그래픽 응용 프로그램을 명시 적으로 구성하지 않으면 그래픽 응용 프로그램을 실행할 수 없습니다. 이것은 환경 재설정의 결과 일 뿐이므로 sudo에서도 마찬가지입니다. 그러나 pkexec 또는 sudo는 모두 악의적 인 응용 프로그램이 루트로 실행되어 디스플레이 관리자 또는 사용자 X11-cookie 파일에서 필요한 모든 정보를 검색하지 못하게 할 수 있습니다. 후자는 둘 다 또는 유사하지만 상황에 따라 루트가 아닌 응용 프로그램으로 수행 될 수도 있습니다.

Sudo에는 명시적인 사용자 목록이 필요하지 않습니다. 사용자 그룹을 나열하거나 모든 사용자에 대한 권한을 설정하는 것도 가능합니다. target_pw 지시문을 통해 해당 사용자는 응용 프로그램을 실행하려는 컨텍스트 (예 : root)에서 사용자의 자격 증명으로 인증 할 수 있습니다. 그 외에도 똑같이 전통적인 su (su / gtksu / kdesu) 프로그램은 특별한 구성없이 매우 똑같이 할 수 있습니다.

sudo 역시 사용자가 지정된 시간 동안 인증 된 상태를 유지할 수 있도록합니다. 이 옵션의 이름은 타임 아웃이며 전역, 사용자 또는 응용 프로그램별로 구성 할 수 있습니다. 인증은 tty마다 또는 전체적으로 사용자별로 유지 될 수 있습니다.

pkexec는 PROGRAM에 전달 된 인수에 대한 유효성 검사를 수행하지 않을 수 있지만 sudo에는 실제로이 기능이 있습니다. 인정하지만, 당신은 이것을 쉽게 망칠 수 있으며, 일반적으로 수행되지 않습니다.

pkexec를 통해 프로그램을 실행하는 방법을 조금 조정할 수 있습니다 : 아이콘, 표시 할 텍스트, 현지화 등을 할 수 있습니다. 상황에 따라 이것은 참으로 근사 할 수 있습니다. 그러나 슬프게도 누군가는이 기능을 위해 바퀴를 재발 명 할 필요성을 느꼈습니다. 이것은 아마도 그래픽 gtksudo / kdesu 래퍼에 넣을 것입니다.

Policykit은 중앙 집중식 구성 프레임 워크 일뿐입니다. 불행히도 예쁜 것은 아닙니다. PK XML 파일은 앱이 기본적으로 짧은 이진 파일을 제공 할 수있는 것보다 훨씬 복잡합니다. 그리고 아무도 바이너리를 사용하기에 너무 돈이 없을 것입니다 … 오 gconf … 결코 신경 쓰지 마십시오.


답변

방법 몇 가지 pkexec다른 sudo과 프런트 엔드 :

  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?