pkexec를 구성하는 방법?


32

이 질문과 답변을 읽으십시오 :

저 명령의 새로운 사용자에게 문제를 일으킬 또 다른 하나를 가져 왔습니다.

  • pkexec쉬운 사용 을 위해 구성하는 방법 ?

예를 들어 다음을 수행 할 때 :

(터미널에서 파일 열기)

pkexec nano /etc/mysql/my.cnf  

(GUI에서 파일 열기)

pkexec gedit /etc/mysql/my.cnf  

마지막 것은 다음과 같은 오류가 발생합니다.

 pkexec must be setuid root

이제 이것은 다음과 같은 질문을 가져 왔습니다.

  1. pkexec이것을 피 하도록 구성하는 방법 ? 같은 일을 할 때 sudo/ gksu행동과 비슷합니다 (비밀번호 만 요구합니다).

  2. 해당되는 경우 암호를 명령에 처음 적용한 후 (또는 구성 가능한 경우 첫 번째 명령 포함) 암호를 묻지 않도록하는 방법은 무엇입니까?

  3. 구성 파일이 아직없는 경우 어디에 저장합니까?

  4. pkexec사용법 을 구성 할 수있는 GUI 앱이 있습니까 (Policy Kit)?


1
13.04에서 이와 관련하여 비즈니스를 돌보는 우분투의 leiu에서 이것은 gedit & nautilus를 위해하는 일입니다. 여기에서 잘 작동하지만 우분투가 돌볼 때까지 내 솔루션 일 뿐이므로 답변으로 게시하지 않습니다. ubuntuforums.org/…
doug

흠, 코멘트를 추가 할 수 없습니다-답변에 의지해야합니다. 궁극적으로 실행됩니다. pkexec gui가 궁극적으로 실행되는 명령의 경로를 반환하도록 "env DISPLAY = $ DISPLAY XAUTHORITY = $ XAUTHORITY"사용을 조정하는 방법이 있습니까? 여기 그림 참조 : polkit auth 대화 상자

답변:


39

pkexecGUI 응용 프로그램을 실행할 때 오류가 발생하지 않도록 구성하는 방법은 무엇입니까?

가능한 두 가지 방법을 찾았습니다.

  1. 보시다시피 다음을 사용하십시오.

    pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
    

    오류가 발생하지 않습니다. 그리고 이것은 man pkexec이 문제에서 매우 분명 하기 때문에 정상적인 것입니다 .

           [...] pkexec will not allow you to run X11 applications
           as another user since the $DISPLAY and $XAUTHORITY environment
           variables are not set.[...]
    

    결과적으로 ( 영구 ) 별명을 작성할 수 있습니다 ( 가장 간단한 방법 임).

    alias pkexec='pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY'
    
  2. 또는 (다시) 다음과 같이 man pkexec말합니다.

           [...] These two variables will be retained if the
           org.freedesktop.policykit.exec.allow_gui annotation on an action is set
           to a nonempty value; this is discouraged, though, and should only be
           used for legacy programs.[...]
    

    가장 중요한 것은 비어 있지 않은 값 으로 설정 하는 내부에 다음 XML 코드 로 /usr/share/polkit-1/actions이름이 지정된 새 정책 파일을 만들 수 있습니다 .com.ubuntu.pkexec.gedit.policyorg.freedesktop.policykit.exec.allow_gui

    <?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>
    
      <action id="com.ubuntu.pkexec.gedit">
        <message gettext-domain="gparted">Authentication is required to run gedit</message>
        <icon_name>gedit</icon_name>
        <defaults>
          <allow_any>auth_admin</allow_any>
          <allow_inactive>auth_admin</allow_inactive>
          <allow_active>auth_admin</allow_active>
        </defaults>
        <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gedit</annotate>
        <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
      </action>
    
    </policyconfig>
    

처음 명령에 암호를 적용한 후 암호를 묻지 않도록하는 방법은 무엇입니까?

이 세 가지 설정 태그 : allow_any, allow_inactiveallow_active정책 파일에서 다음 옵션을 사용할 수 있습니다 :

  • no : 사용자에게 조치를 수행 할 권한이 없습니다. 따라서 인증이 필요하지 않습니다.
  • yes : 사용자는 인증없이 작업을 수행 할 권한이 있습니다.
  • auth_self : 인증이 필요하지만 사용자는 관리 사용자 일 필요는 없습니다.
  • auth_admin : 관리자 인증이 필요합니다.
  • auth_self_keep :와 동일 auth_self 같은,하지만 sudo, 승인이 몇 분 동안 지속됩니다.
  • auth_admin_keep :와 동일 auth_admin 같은,하지만 sudo, 승인이 몇 분 동안 지속됩니다.

     출처 : Polkit-구조-조치

따라서 auth_admin_keep 옵션 (또는 해당되는 경우 auth_self_keep )을 사용 pkexec하면 얼마 동안 비밀번호를 다시 묻지 않습니다 (기본적으로이 시간은 확인한대로 5 분으로 설정 됨). 여기서 단점은 동일한 명령 / 응용 프로그램에만 적용 할 수 있으며 모든 구성에 적용 할 수 있다는 것입니다 (나중에 구성 할 때가 아니라면).

구성 파일이 아직없는 경우 어디에 저장합니까?

구성 파일 또는 폴킷 정의는 두 가지 종류로 나눌 수 있습니다.

  • 작업 은에 위치한 XML .policy 파일에 정의되어 있습니다 /usr/share/polkit-1/actions. 각 작업에는 기본 권한 집합이 첨부되어 있습니다 (예 : GParted 작업을 사용하려면 관리자로 식별해야 함). 기본값을 무효화 할 수 있지만 조치 파일을 편집하는 것은 올바른 방법이 아닙니다. 이 정책 파일의 이름은 다음 형식이어야합니다.

    com.ubuntu.pkexec.app_name.policy
  • 권한 부여 규칙 은 JavaScript .rules 파일에 정의되어 있습니다. 타사 패키지는 사용할 수 /usr/share/polkit-1/rules.d있지만 /etc/polkit-1/rules.d로컬 구성을위한 것입니다. .rules 파일은 사용자의 하위 집합을 지정하고 작업 파일에 지정된 작업 중 하나 이상을 참조하고 해당 사용자가 수행 할 수있는 제한 사항을 결정합니다. 예를 들어 규칙 파일은 GParted를 사용할 때 모든 사용자가 관리자로 인증해야하는 기본 요구 사항을 무시하여 특정 사용자가 필요하지 않은 것으로 판단 할 수 있습니다. 또는 GParted를 전혀 사용할 수 없습니다.

     출처 : Polkit-구조

pkexec사용법 을 구성 할 수있는 GUI 응용 프로그램이 있습니까?

내가 아는 것부터 지금까지 (18.01.2014)는 이런 식으로 존재하지 않습니다. 앞으로 뭔가를 발견하면이 답변도 업데이트하는 것을 잊지 않을 것입니다.


4
정말 아름다운 답변입니다 !! 정말 고마워. 이제 doublecmd환경을 내보내는 데 필요한 ROOT PRIVELEGES로 실행할 수없는 이유를 알았 습니다 DISPLAY & XAUTHORITY. 작은 질문 : 정책을 작성하거나 pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY doublecmd항상 명령을 사용하여 프로그램을 실행하는 데 차이가 있습니까?
Ilia Rostovtsev

@IliaRostovtsev 이것은 내가 생각하는 것처럼, 그러한 별칭을 통해 실행 pkexec되는 것처럼 안전하지 gksudo않을까요? 별명 대신 루트 권한이있는 스크립트 일 수 있습니까?
물병 자리 힘

@AquariusPower 어떤면에서 안전하지 않을 수 있습니까? 물론 시도해 볼 수는 있지만 확실하지 않습니다. '사용자'아래에서 실행되는 GUI (X Server)와 루트로 실행해야하는 다른 GUI 프로그램을 사용해야 할 때 문제가 발생합니다. 무언가를 발견 할 경우를 대비하여 둘러보고 포스트 백하십시오.
Ilia Rostovtsev

@ radu-rădeanu On Utopic auth_admin_keep이 작동하지 않는 것 같습니다. gui에서 시냅틱을 시작하면 (와 동등한 pkexec synaptic) 매번 암호를 묻습니다. 왜 그런지 알아?
Khurshid Alam


0

Radu의 답변 외에도 : pkexec 별칭을 사용하지 않고 gksudo .

왜? 스크립트를 다시 작성할 필요가 없습니다.

다음 구성을 사용합니다.

  • 터미널을 열다
  • cd /usr/local/bin
  • sudo gedit gksudo ( "gksudo"라는 새 파일 만들기
  • 다음 내용을 작성하십시오.

    • pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY $@

    • ( $@끝 부분을 잊지 마십시오 . 모든 매개 변수를 리디렉션하기위한 것입니다)

  • 저장하고 종료

  • 파일을 실행 가능하게 만드십시오. chmod 755 gksudo
  • 이제 시스템에서 완전한 기능의 gksudo 명령을 영구적으로 사용할 수 있어야합니다.

문서화를 위해 시도한 내용과 해결되지 않은 내용을 작성하겠습니다.

  • 별칭 pkexec = 'pkexec env [...]'
  • alias gksudo = 'pkexec [...]'
    • 영구적이지 않았으며 하나의 단일 터미널에만 머물 렀습니다.
  • 에 별칭 추가 ~/.bash_aliases
    • 터미널을 처음 열면 작동합니다. 스크립트를 두 번 클릭하면 작동하지 않습니다
  • 매개 변수 ( ln -s pkexec [...])를 사용 하여 pkexec에 대한 링크 작성
    • 빠른 Google 검색 후 Linux가 링크의 매개 변수를 지원하지 않는 것 같습니다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.