권한 없는 사용자에 대한 비밀번호 없는 pkexec

권한 없는 사용자에 대한 비밀번호 없는 pkexec

여러 가지 이유로 저는 Fedora 상자에서 다른 시스템 사용자로 브라우저를 실행하고 싶습니다.

지금은 이름이 별도의 시스템 사용자를 만들고 내 사용자와 함께 Google Chrome용 sandbox사용자 정의 파일을 만들었습니다 .~/.local/share/applications/chrome-sandboxed.desktop

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Terminal=false
StartupNotify=true
Type=Application
Categories=Network;WebBrowser;
MimeType=x-scheme-handler/unknown;x-scheme-handler/about;text/html;text/xml;application/xhtml_xml;image/webp;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;
Name=Google Chrome (sandboxed)
Exec=sh -c "xhost +SI:localuser:sandbox && pkexec --user sandbox env DISPLAY=$DISPLAY /usr/bin/google-chrome-stable %U && true"
Icon=google-chrome
Actions=new-window;new-private-window;

[Desktop Action new-window]
Name=New Window
Exec=sh -c "xhost +SI:localuser:sandbox && pkexec --user sandbox env DISPLAY=$DISPLAY /usr/bin/google-chrome-stable && true"

[Desktop Action new-private-window]
Name=New Incognito Window
Exec=sh -c "xhost +SI:localuser:sandbox && pkexec --user sandbox env DISPLAY=$DISPLAY /usr/bin/google-chrome-stable --incognito && true"

약간의 노력과 연구 끝에 나는 그것을 발견했습니다.sandbox사용자가 내 세션에서 창을 열 수 있도록 허용해야 합니다 .xhost +SI:localuser:sandbox그리고 그거명령은 다음으로 끝나는 pkexec별도의 명령으로 묶어야 했습니다.sh -c ""&& true그렇지 않으면 Gnome에서는 작동하지 않기 때문입니다. 심지어 이거 받았어다음을 실행하여 기본 브라우저로 설정하세요.xdg-settings set default-web-browser chrome-sandboxed.desktop, 이전에는 기본 응용 프로그램을 선택하기 위한 GUI 도구에 표시되지 않았기 때문입니다.

pkexec이제 저를 괴롭히는 유일한 일은 다른 사용자를 인증하고 프로그램을 실행하기 위해 다른 응용 프로그램(예: Thunderbird)의 링크를 클릭할 때마다 비밀번호를 입력해야 한다는 것입니다. 프로세스를 실행하고 기존 창의 새 탭에서 링크를 엽니다. 하지만 로직은 애플리케이션 자체에 구현되어 있으므로 인증이 발생하고 프로세스가 시작된 후에만 참여할 수 있다고 생각합니다.

내 사용자가 사용자의 항목에 액세스할 수 있는지는 신경 쓰지 않기 때문에 sandbox(내가 방지하려는 반대 방향임) 이 작업을 비밀번호 없이 수행하고 싶습니다. 하지만 이것을 달성하는 방법을 잘 모르겠습니다.

ACL 을 생성하면 가능하다고 읽었습니다 policykit. 하지만 그러고 싶지 않으니까일반적으로비밀번호 프롬프트 비활성화그리고 나는 사용자 정의 "응용 프로그램" 이름에 대해 전혀 모릅니다.미세 조정된 구성과 관련이 있는 것 같습니다.(대답의 구문을 올바르게 이해했다면) 이 응용 프로그램에 대해서만 암호 프롬프트를 비활성화하는 방법을 모르겠습니다(그리고 향후 추가 응용 프로그램도 가능).

어떤 도움이라도 대단히 감사하겠습니다.

추신: 죄송합니다. 태그가 sudo혼란스러울 수 있지만 새 태그를 생성하려면 300 평판(내게는 없음)이 필요합니다 pkexec.


편집하다

힌트를 사용하여 작동했습니다.사용자1686'에스답변.

먼저 (아직 없는 경우) 원하는 프로그램에 대해 policykit구성할 사용자 지정 정책 파일을 만듭니다 action id. 제 경우 /usr/share/polkit-1/actions/com.google.chrome.sandboxed.policy에는 이 기본 정책이 auth_admin여전히 필요합니다.

<?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>Google</vendor>
    <vendor_url>https://www.google.com</vendor_url>
    <icon_name>google-chrome</icon_name>
    <action id="com.google.chrome.sandboxed">
        <description>Run Google Chrome as another user</description>
        <message>Authentication is required to run Google Chrome as another user</message>
        <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/google-chrome-stable</annotate>
        <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
    </action>
</policyconfig>

그런 다음 사용자에 대해서만 구성된 action id( 여기) 작업을 암호 없이 실행하도록 허용하는 사용자 지정 규칙을 만듭니다. 제 경우에는 다음과 같습니다 .com.google.chrome.sandboxed/var/lib/polkit-1/localauthority/50-local.d/10-passwordless_chrome-sandboxed_from_myuser.pkla

[No pkexec password prompt for myuser when running chrome-sandboxed]
Identity=unix-user:myuser
Action=com.google.chrome.sandboxed
ResultActive=yes

env DISPLAY=$DISPLAY그런 다음 파일 에서 모든 항목을 제거하고 .desktop, 그렇지 않으면 대신 다른 사용자로 pkexec실행을 시도합니다 . 처럼env/usr/bin/google-chrome-stable사용자1686지적했듯이 필요한 환경 변수는 자동으로 하위 프로세스에 상속되므로 더 이상 필요하지 않습니다.

systemctl reload polkit.service또는 가 필요할 수도 있지만 systemctl restart polkit.service파일을 변경하는 것을 잊어버렸음에도 불구하고 그것이 처음에는 작동하지 않는 이유라고 생각했기 때문에 그것에 대해 잘 모르겠습니다 .desktop.

이제 예상대로 작동합니다.

답변1

GParted가 이를 처리하는 방법은 다음과 같습니다.

<?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>The GParted Project</vendor>
    <vendor_url>https://gparted.org</vendor_url>
    <icon_name>gparted</icon_name>
    <action id="org.gnome.gparted">
        <description>Run GParted as root</description>
        <message>Authentication is required to run the GParted Partition Editor as root</message>
        <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/gparted</annotate>
        <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
    </action>
</policyconfig>

두 개의 <annotate/>태그에 주목하세요.

이 정책이 설치되면 간단한 pkexec /usr/bin/gparted정책에는 다른 정책 키트 "작업 ID"가 자동으로 할당됩니다(따라서 다른 기본값을 정의하고 사용자 정의 규칙에서 일치시킬 수 있음). 또한 $DISPLAY를 수동으로 전달할 필요가 없습니다. pkexec는 필요한 모든 변수를 자동으로 복사합니다.

관련 정보