いくつかの理由から、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 ツールには表示されなかったためです。
今、私を悩ませている唯一のことは、別のアプリケーション (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 は必要な変数をすべて自動的にコピーします。