Xデスクトップでは、他のユーザー(ルートを含む)でGUIアプリケーションを使用またはgksudo
実行します。sudo somegui
私は最近(2018年初め)Waylandデスクトップではこれが不可能であることを最近発見しました。すべてのアプリケーションは現在デスクトップユーザーとして実行する必要があり、そのユーザーに制限された権限があります。
これは(設計上)Waylandの永続的な機能ですか、それともsu型の使用がまだ実装されていない拡張機能ですか?
私は好みや意見ではなく、文書化された説明(ロードマップ、デザインページ...)を探しています。
答え1
これはWaylandの永続的な機能ですか(意図的)
いいえ、これはウェイランド契約とは何の関係もありません。これは実際に環境設定の問題です。
Waylandは名前がWAYLAND_DISPLAY
。XDG_RUNTIME_DIR
ただし、ルートにもアクセスできます。 (一部のアプリケーションでは、XDG_SESSION_TYPE
どれが値を持つことができるかを検討するwayland
か、x11
Xを使用するかWaylandを使用するかを決定します。)
sudo
XDG_RUNTIME_DIR
とを含むほとんどの環境変数を削除しますWAYLAND_DISPLAY
。
Waylandアプリケーションをrootとして実行できます。
sudo env XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR WAYLAND_SOCKET=$WAYLAND_SOCKET waylandapplication
または、短く設定して-EH
ほぼすべての環境変数を保存します(ただしHOME
に設定/root
)。これにはDISPLAY
XwaylandXAUTHORITY
へのアクセスも含まれます。
sudo -EH application
ただし、rootとして実行されているアプリケーションに何かを書き込むと、XDG_RUNTIME_DIR
ユーザーアプリケーションのファイル権限の問題が発生する可能性があります。
しかし、グラフィカルアプリケーションをrootとして実行する際のセキュリティ問題は、X11よりもWaylandでははるかに少ない。
誤ってX11を使用しないようにするには、次の方法で実行できますDISPLAY
。
sudo -EH env DISPLAY= waylandapplication
私は好みや意見ではなく、文書化された説明(ロードマップ、デザインページ...)を探しています。
これウェールランド文書言及しましたが、WAYLAND_DISPLAY
それについて何も見つかりませんでしたXDG_RUNTIME_DIR
。しかし、すべてのWaylandシンセサイザー(参照実装を含む)weston
はXDG_RUNTIME_DIR
。
別の場所にいる場合、WAYLAND_DISPLAY
同じWaylandディスプレイでユーザーのアプリケーションを実行するのに問題はありません。しかし、XDG_RUNTIME_DIR
指定済みログインしたユーザーを制限し、ユーザーに関連付けられているソケットを含める必要があります。
$XDG_RUNTIME_DIRは、ユーザー固有の非必須ランタイムファイルと他のファイルオブジェクト(ソケット、名前付きパイプなど)を保存する相対ベースディレクトリを定義します。ディレクトリはユーザーが所有し、そのディレクトリへの読み取りおよび書き込みアクセス権を持つ唯一の人である必要があります。 Unixアクセスモードは0700でなければなりません。
Waylandで他のユーザーやルートを実行する問題は、XDG_RUNTIME_DIR
Wayland自体ではなく仕様に関連しています。任意のアクセスでカスタムを指定するとXDG_RUNTIME_DIR
(/tmp
したがって仕様に違反する)、すべてのユーザーがウェイランド表示を使用できるようになります。
今後は必要ありませんが、XDG_RUNTIME_DIR
実装によって異なります。Waylandドキュメンタリー第4章:
Wayland 1.15以降、実装では、WAYLAND_DISPLAYをサーバーエンドポイントが受信する絶対パスに設定することで、ファイルシステム上の任意の場所にあるサーバーソケットエンドポイントをオプションでサポートできます。
答え2
ego
このユースケースのために(Alter Ego)を作成しました。 GUIアプリケーションではありませんが、コンソールから他のユーザーとしてGUIアプリケーションを起動でき、xhostとWaylandとPulseAudioソケットの共有を自動的に処理します。https://github.com/intgr/ego
秘密は、Posix ACLを使用して他のユーザーにWayland / PulseAudioソケットへのアクセスを許可し、ターゲットユーザーのアプリケーションがどのように接続するかを知るために環境変数を設定することです。
問題が発生した場合は、GitHubに問題を提出してください。
答え3
かなり簡単な2つの解決策があります。次の例ではシナプティックを起動しますが、他のコマンドも機能します。
- SSHを使用してrootにXを渡す(rootログインを有効にするか、
/etc/ssh/sshd_config
キー認証を設定する必要があるかもしれません):
$ ssh -Y root@:: synaptic
- 推奨されるようにsocatとsudoを使用してください。bober の RedHat バグ #1274451。以下の例では、#0を表示し、#1は無料であると仮定しています。
socat UNIX-LISTEN:/tmp/.X11-unix/X1 UNIX-CONNECT:/tmp/.X11-unix/X0 & sudo DISPLAY=:1 synaptic
いずれにしても、解決策はユーザー所有プロセスをX11ソケットに接続してトンネルを提供することだと思います。
答え4
あなたの質問に直接答えることはありませんでしたが、一部の人は同じ問題を抱えてここに来ることができると思いました。
以下はグラフィックアプリケーションです(例:編集者、シナプスまたはゴポット) ルートとして渡されるSudo中ウェイランド会議:
https://gist.github.com/wachambo/bd22e12db2d5a46dc109bd0d553733be
ここからインポート:
#!/usr/bin/env bash
#
# Enable root access to x-windows system.
#
# Motivation: Trying to run a graphical application as root via su, sudo in a
# Wayland session (e.g. GParted or Gedit), will fail. Apps which use polkit to
# request administrator permissions for just certain operations and only when
# needed are not affected (they are not started as root right away).
# [1] https://bugzilla.redhat.com/show_bug.cgi?id=1274451
#
# Based on a Reddit comment.
# [2] https://www.reddit.com/r/Fedora/comments/5eb633/solution_running_graphical_app_with_sudo_in/
if (( $# != 1 )); then
echo "Illegal number of parameters."
echo
echo "Usage: wsudo [command]"
exit 1
fi
for cmd in sudo xhost; do
if ! type -P $cmd &>/dev/null; then
echo "$cmd it's not installed. Aborting." >&2
exit 1
fi
done
xhost +SI:localuser:root
sudo $1
#disable root access after application terminates
xhost -SI:localuser:root
#print access status to allow verification that root access was removed
xhost