pkexec와 gksu / gksudo를 언제 사용해야합니까?


77

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

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




관련 (그러나 중복은 아님) : sudo -i가 pkexec보다 덜 안전합니까?
Eliah Kagan

답변:


25

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).

1
그래픽 인증을 사용하여 루트로 응용 프로그램을 실행할 두 가지 가 있다고 말했을 입니다. 나는 pkexec그래픽 응용 프로그램을 실행 하는 데 사용할 수 있는 방법이 있다고 가정했습니다 . 귀하의 답변은 왜 존재하지 않는지 (또는 적어도 사용자 정의 환경을 지정 해야하는 이유) 설명합니다.
Eliah Kagan

1
그래도 귀하의 답변에 대해 한 가지 질문이 있습니다. 프로그램이로 루트로 실행될 때 pkexec어떤 의미에서 기능 ( "권한")을 제한 할 수 있습니까? 프로그램을 실행 sudo하거나 sudo프론트 엔드를 실행할 때 무엇이든 할 수있는 기능을 프로그램에 부여합니다 ... 어떤 의미에서 프로그램을 루트로 실행하면 pkexec이 작업을 수행하지 않습니까?
Eliah Kagan

3
나는 이해 PolicyKit이 프로그램은 행동의 특정 유형을 수행 할 수 있도록하는 데 사용됩니다. 그러나 pkexec그것을 촉진 합니까 , 아니면 pkexec제한없는 능력을 가진 뿌리로 일을합니까? pkexec당신이 당신의 응답 문서에 포함 된 설명서를 발췌하는 방법이 아니라 프로그램이 할 수있는 것보다 프로그램을 루트로 (또는 다른 비 루트 사용자로), 실행할 수있는 결정하는 규칙을 작성합니다.
Eliah Kagan

4
좋은 정보를 많이 제공하므로 귀하의 답변을 수락하고 싶습니다. 그러나 나는 그것이 pkexec보다 구성 할 수 있다고 말하고 sudo주석에서 우리가 토론 한 것을 감안할 때 매우 오해의 소지가 있다고 생각 합니다. sudo의 구성 가능성을 설명 하고 그것과 비교 / 대비하기 위해 pkexec답을 편집하거나 차이가 구성 가능성 이외의 것이라고 말하기 위해 답을 편집 하시겠습니까?
Eliah Kagan

2
"간단히 쓰기"와 XML 조각. 나는 그 웃음이 필요했다.
Jürgen A. Erhard 7:05에

14

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 ... 결코 신경 쓰지 마십시오.


8
이 게시물은 실제로 답변이 아니므로 다른 답변에 대한 비판입니다. 일반적으로 pkexec보다 sudo를 사용하는 것이 더 나은 선택이라고 생각되면 이러한 반박으로 요점을 설명하십시오.
Flimm

4
유용한 분석을 해주신 Paul에게 감사드립니다! 그러나 나는 또한 Flimm에 동의합니다. 질문에 대한 간단한 답변으로 시작할 수 있습니까?
nealmcb

1
아니요, 구성하지 않고 GUI를 실행할 pkexec 있습니다. askubuntu.com/a/332847/89385
akostadinov

8

방법 몇 가지 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?

이 같은 프로그램을 실행하는 다른 사용자로 인증 할 수있는 방법에 대한 좋은 점 (# 3) root과를 pkexec. pkexec다른 사용자의 암호를 알고있는 경우에도 사용할 수있는 구성 가능한가? su이런 식으로 구성 할 수 있습니다. Oneiric 시스템에서 와 같이 su다른 비 root사용자 에게 시도하면 guest허용되지 않습니다. (내가 사용하려고 할 때 대조적으로, pkexec같은 guestOneiric 또는 정확한에, 나는 그것을 허용하지 않은 경우에도 것을 얻을 안 나는 곧, 버그로보고 할 수 있습니다 주장의 오류처럼 보이는 것을 얻을.)
엘리아 카간

2
그러나 sudo그 프론트 엔드는 점 2에서 설명 된대로와 프로그램을 실행할 수 불통 할 수 있습니다 gksu또는 gksudo 사용자 정의 텍스트를 표시 , 편집하여 일부 사용자의 암호를 필요로 중지 /etc/sudoers(함께 visudo), 그리고 그들이 어떻게 변화의 의미로 기억되는 시간 변경 sudo가 시간 초과되는 데 시간이 오래 걸립니다 ( sudo비밀번호 가 필요한지 아닌지에 대한 질문과 암호가 다시 필요할 때까지의 시간이 터미널마다 다르도록 구성된 Ubuntu 에서이 작업을 수행하는 방법을 모르겠습니다) ).
Eliah Kagan

그놈 쉘을 사용하는 경우 # 4는 사실이 아닙니다.
muru

아니요, 구성하지 않고 GUI를 실행할 pkexec 있습니다. askubuntu.com/a/332847/89385
akostadinov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.