サーバー構成で許可されていない場合、SSH経由でX11を転送する


10

マシンAからマシンBにSSH経由でログインしていて、マシンAでXセッションがあり、BでXプログラムを実行したい状況を考えてみます。

ssh -X Bこれを透過的に動作させます。しかし、サーバー構成が不足X11Forwarding yesしていて、サーバーに対するroot権限がなく、サーバー管理者が無関心な場合はどうなりますか?

SSHチャネルを介して何でも転送できるため、X11接続を転送することは明らかに可能です。実際、ローカルXサーバーがTCP接続を許可している場合、それはssh -R 6010:localhost:6000(表示番号を調整する)と同じくらい簡単です。ローカルXサーバーがソケット接続のみを許可する一般的なケースはどうですか?最小限のインストール要件(特にB)で​​、X転送を便利かつ安全に行うにはどうすればよいですか?

回答:


2

@デミの答えは良いですが、私はそれを記入することは大きな助けになると思います。

  • local-Xserverを提供するローカルマシン。
  • remote-Xserverに送られるデータを駆動するアプリケーションを提供するリモートマシン

リモート/etc/ssh/sshd_config

X11Forwarding no
X11DisplayOffset 10
X11UseLocalhost yes

リモート~/.Xauthorityが空であるか、存在しません

ローカル:

Xephyr -ac -screen 1280x800 -br -reset   :2 &
DISPLAY=:2 ssh  -fR 6010:/tmp/.X11-unix/X2  user@remote "DISPLAY=:10 xeyes"

テストでは、ローカルはUbuntu 18.05を実行し、リモートはDebian Jesseを実行していました。


6

ソケットと通信するときにTCPポートと通信するときにプロトコルX11が異なるのですか?

おそらく、の独自の使用方法を組み合わせてssh -R 6010:localhost:6000X11データをポート転送経由で取り込み、tcpポートとX11ソケットリスナーの間のローカルギャブをncのようにブリッジすることができます。

nc -l -p 6000 > /tmp/.X11-unix/X0

はい、それがアイデアです。しかし、私は「.ssh/configクライアント側と.profileサーバー側にこれを入れて、ただ実行するssh B」という答えを望んでいました。
Gilles 'SO-悪をやめる'

1
簡単な「これを設定に入れる」という答えがあります。問題は、必要なオプションがBのsshd_config側にあるため、質問の資格でそれを除外することです。挿入されたブロックを回避しようとしています不注意でセキュリティの問題が発生しにくくするための場所。
カレブ、

3
私は(私の経験では非常に一般的ですが)、管理者が気にせずデフォルトの設定をそのままにしておくケースをターゲットにしています。X11転送はポリシーによって禁止されていません。sysadminの無関心による不便です。とにかく、X11転送ではサーバーがクライアントを攻撃できるため、サーバー側で禁止することはあまり意味がありません。
Gilles 'SO-悪をやめる'

@ギレス私はデフォルトが本当に何かを保護しないことに同意します。では、デフォルトの変更を上流に取得するようロビー活動を行う必要がありますか?
カレブ

私にとって/tmp/.X11-unix/X0は、FIFOではなくUNIXドメインソケットであるため、リダイレクトの試行はで終了しENXIO: No such deviceます。
Samveen

2
  1. Xephyrを使用して追加のXサーバーを起動します。これはセキュリティのためです。リモートシステムがセキュリティを侵害するのを防ぎます。

  2. SSHを使用して、リモートソケットをXephyrソケットに転送します。SSHは、Unixソケットの転送もサポートしています。

  3. リモートサーバーの環境変数を正しく設定します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.