権限のないユーザーへのパスワードなしの 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 ""&& trueGnomeでは動作しないので、これさえあれば実行してデフォルトのブラウザとして設定しますxdg-settings set default-web-browser chrome-sandboxed.desktop以前はデフォルトのアプリケーションを選択するための GUI ツールには表示されなかったためです。

今、私を悩ませている唯一のことは、別のアプリケーション (Thunderbird など) のリンクをクリックするたびに、pkexec別のユーザーとして認証してプログラムを実行するためにパスワードを入力しなければならないことです (その場合、すでにプロセスが実行中であることが認識され、既存のウィンドウの新しいタブでリンクが開かれますが、そのロジックはアプリケーション自体に実装されているため、認証が行われてプロセスが開始された後でのみ機能すると考えられます)。

ユーザーがユーザーのコンテンツにアクセスできることは気にしないので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>

2つの<annotate/>タグに注意してください。

このポリシーがインストールされると、シンプルにpkexec /usr/bin/gparted異なるポリシーキット「アクション ID」が自動的に割り当てられます (異なるデフォルトを定義したり、カスタム ルールで一致させたりできます)。また、$DISPLAY を手動で渡す必要もありません。pkexec は必要な変数をすべて自動的にコピーします。

関連情報