여러 가지 이유로 저는 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
.
편집하다
먼저 (아직 없는 경우) 원하는 프로그램에 대해 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는 필요한 모든 변수를 자동으로 복사합니다.