web-dev-qa-db-ja.com

sudo経由で別のユーザーとしてssh経由でGUIアプリケーションを実行する方法

サーバーでsshを構成しましたが、グラフィカルアプリケーションを実行する必要がある場合があります。 -Xオプションで接続するとうまく機能します。私は例えば走ることができますgoogle-chrome。ただし、Sudo -i -u other_userでユーザーを変更すると、このユーザーとしてGUIアプリを実行できなくなります。

環境とディスプレイのあるものだと思いますが、どうしたらいいのかわかりません。 -Eを追加しようとしましたが、-iでは使用できないというエラーメッセージが表示されました。別のユーザーとしてssh経由でGUIアプリを実行するにはどうすればよいですか?

3
amorfis

最も簡単な方法は、ssh -Xを使用して他のユーザーとしてコマンドを実行することです。ただし、これにより、ローカルでもアプリケーションの実行速度が著しく低下します。


-iオプションは、Sudoに環境を再初期化するように指示します。 Xアプリケーションには$DISPLAYおよび(一部のセットアップでは)$XAUTHORITYが必要であり、ロケール設定などの他の環境変数を使用する場合があります。 -iなしで試すか、-iを使用する必要がある場合は、

Sudo -i -u other_user \
  env DISPLAY="$DISPLAY" XAUTHORITY="${XAUTHORITY-$HOME/.Xauthority}" \
  xapplication

-iを削除した場合でも、XAUTHORITYを明示的に指定する必要がある場合があります。デフォルトでは(変数が設定されていない場合)、ホームディレクトリの.Xauthorityです。

これまでのところ、他のユーザーがあなたの$XAUTHORITYを読み取ることができると想定してきました。ただし、そうしない限り、そうではありません(たとえば、setfacl -m user:other_user:r $XAUTHORITYを使用)。

または、他のユーザーに$XAUTHORITYを読み取らせるのではなく、ユーザーが読み取れる別のファイルに適切なCookieをコピーすることもできます。

xauth extract -f - "$DISPLAY" |
Sudo -u other_user xauth -f ~other_user/.Xauthority merge -

別のユーザーにディスプレイへのアクセスを許可すると、偽のキー押下をアプリケーションに送信するなど、ほとんどすべてのことが可能になることに注意してください。したがって、分離のためにユーザーを変更する場合、多くは得られません。