SUSE Linux 15 (openSUSE Leap 15)の vncserver,VNC接続をする。

- はじめに -

MovaXterm で Mac の VNC 接続を始めたら、やめられなくてもう一度、 vncserver の事を、復習してみます。

参考ドキュメント

8 VNCによるリモートアクセス
https://documentation.suse.com/ja-jp/sles/15-SP1/html/SLES-all/cha-vnc.html



- vncserver のインストール -

tigervnc がインストールされているか。YaST > Software Manegement で確認して、なければチェックしてインストールします。

SUSE Linux 15 (openSUSE Leap 15)の vncserver,VNC接続をする。_a0056607_13282884.png


opensuse151:~ # vncserver --help

usage: vncserver [:<number>] [-name <desktop-name>] [-depth <depth>]
[-geometry <width>x<height>]
[-pixelformat rgbNNN|bgrNNN]
[-fp <font-path>]
[-fg]
[-autokill]
[-noxstartup]
[-xstartup <file>]
<Xvnc-options>...

vncserver -kill <X-display>

vncserver -list



上の SLE15 のマニュアルにはこんな簡単な説明がありました。

手順 8.2: vncserverを使用した永続的VNCセッションの開始 REPORT DOCUMENTATION BUG#

1. シェルを開き、VNCセッションを所有するユーザとしてログインしていることを確認します。

2. VNCセッションで使用されるネットワークインタフェースがファイアウォールで保護されている場合は、ファイアウォール内でセッションによって使用されるポートを手動で開く必要があります。複数のセッションを開始する場合は、一連のポートを開くことができます。ファイアウォールの設定方法の詳細については、Chapter 16, Masquerading and Firewallsを参照してください。
vncserverは、ディスプレイ:1にはポート5901、ディスプレイ:2にはポート5902という順序でポートを使用します。永続的セッションの場合、VNCディスプレイとXディスプレイは、通常、同じ番号です。

3. 1024x768ピクセルの解像度と16ビットの色数でセッションを開始するには、次のコマンドを入力します。

vncserver -alwaysshared -geometry 1024x768 -depth 16

vncserverコマンドは、何も指定されない場合、未使用のディスプレイ番号を選択し、その選択内容を出力します。追加オプションについては、man 1 vncserverを参照してください。



opensuse151:~ # vncserver :0

You will require a password to access your desktops.

Password:12345678
Verify:12345678
Would you like to enter a view-only password (y/n)? n

New 'opensuse151:0 (root)' desktop is opensuse151:0

Creating default startup script /root/.vnc/xstartup
Creating default config /root/.vnc/config
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/opensuse151:0.log

opensuse151:~ #


※ desktop is opensuse151:0":0" に注意

- 仮想ホストの制限 -

※ 因みに SLES11, 以降の XEN/KVN の仮想 HVM を使っている場合、 lib-virt が使っているので vncserver :0 などの低いディスプレー番号は使えないようです。二桁以上のディスプレイ番号を使うと上手く動きました。

あるいは、単にディスプレー番号を指定せず vncserver .... を実行すると、最初に空きがある番号に自動的に割り当てられます。


sle15:~ # vncserver :10 <-- 怒られた
A VNC server is already running as :10
sle15:~ # vncserver :11 <-- 11 番は使えた

New 'corsair:11 (knakaj)' desktop is corsair:11

Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/corsair:11.log

sle15:~ #
sle15:~ # vncserver <-- 番号を指定しないで単純起動

New 'corsair:6 (root)' desktop is corsair:6 <-- :6 が割り当てられた

Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/corsair:6.log

sle15:~ #



- MobaXtermにより接続 -

MobaXterm
https://mobaxterm.mobatek.net

Session > VNC (必要に応じて "network settings" タブで SSH gateway 経由をチェック) で VNC 接続できました。

SUSE Linux 15 (openSUSE Leap 15)の vncserver,VNC接続をする。_a0056607_13290893.png

接続を切ります。

opensuse151:~ # ps ax | grep vnc*
14306 pts/0 Sl 0:01 /usr/bin/Xvnc :0 -auth /root/.Xauthority -desktop opensuse151:0 (root) -fp /usr/share/fonts/misc,/usr/share/fonts/75dpi,/usr/share/fonts/100dpi,/usr/share/fonts/Type1 -geometry 1024x768 -pn -rfbauth /root/.vn /passwd -rfbport 5900 -rfbwait 30000
15198 pts/0 S+ 0:00 grep --color=auto vnc*
opensuse151:~ #
opensuse151:~ # vncserver -kill :0
Killing Xvnc process ID 14306
opensuse151:~ #



- MacOS から VNC 接続 -

Finder > 移動 > サーバーに接続 > URL に

vnc://IP_Address:590n

(n は vncserver を立ち上げた時に指定した :0 のディスプレイ番号のパラメータ)

SUSE Linux 15 (openSUSE Leap 15)の vncserver,VNC接続をする。_a0056607_13333603.png


- セキュリティ -

- デフォルトポートの変更

デフォルトでは 5900 番台のポートが使われるので、いたずら対策にこのポートを変えておく事です。

/usr/bin/vncserver スクリプトの

$vncPort = 5900 + $displayNumber;


の行を任意の違うポートに変えておくと良い。

SUSE Linux 15 (openSUSE Leap 15)の vncserver,VNC接続をする。_a0056607_13365237.png


あるいは "vncserver :1000" の様に、一桁多いディスプレイ番号を割り当てる。

- ファイアウォール

ファイアウォールはポート 5900 から開けておくこと。勿論、 vncserver のポートを変えた場合ほそのポートを開ける事になります。

- パスワード

接続するパスワードは vncpasswd コマンドで変更され。 ~: .vnc に保管される。もし動作が妖しければ、このディレクトリの中を削除すればリセットされる。vnc パスワードは最長8バイトであり脆弱である事に注意します。頻繁に変えるか、使う予定がなければ vncserver を立ち上げっぱなしにしない事をお勧めします。(そういう時に使いたくなるんですけど....)


opensuse151:~/.vnc # vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
opensuse151:~/.vnc # ls -l
total 64
-rw-r--r-- 1 root root 332 Feb 27 14:56 config
-rw------- 1 root root 8 Feb 28 13:24 passwd
-rwxr-xr-x 1 root root 639 Feb 27 14:56 xstartup
-rw-r--r-- 1 root root 34652 Feb 28 11:12 opensuse151:0.log
-rw-r--r-- 1 root root 6 Feb 28 11:09 opensuse151:0.pid
-rw-r--r-- 1 root root 8788 Feb 27 18:10 opensuse151:1.log


- 暗号化

vnc プロトコルは、telnet 同様、暗号化されない平文通信なので、デリケートなケースでは安易に使わない事。 SSH によるポート転送との組み合わせを勧めます。少なくとも MovaXterm には VNC 接続の中に SSH ゲートウェイの設定があるのは単純にすごい。

Mac の ”画面共有” は暗号化されないので注意。SSH トンネリングする方法があるので "mac vnc ssh トンネル" などで検索してください。


- まとめ -

一つしかないモニタに複数のホストを扱う事は、システム管理にとっては便利な機能です。しかし、vncserver を改めて研究してみると、そこには大きな脆弱性や欠陥が見えてきました。便利な反面、セキュリティホールでもあるんですね。

今回は Windows の RDP については説明はしませんが、やっぱり RDP 接続も脆弱性があるので、何だかなぁ、という気分です。事業所内のプライベートネットワークであればまだしも、「働き方改革」なんかで、自宅からリモート接続したい、などの要求は高まるばかり。利便さと脆弱性との両立って難しいのです。

ますますインフラ系の技術者にとっては厳しい要求があるのですね。









by islandcenter | 2020-02-29 13:30 | SUSE | Comments(0)