CentOS 6.x 環境でローカルサーバーにVNC Xサーバーをセットアップする手順です。以前にも紹介している手順と同じですが、CentOS5 以降、RealVNC から TigerVNC がデフォルトのVNCサーバーとなっています。
VNC Server 自身にはセキュリティに関する機能は、ほぼ皆無と言って良いので、外部ネットワークから接続するような用途においては、SSHやトンネリングツールなどを使った通信経路の暗号化による保護は必須と言えます。
LAN内での利用であっても、扱う情報の気密性など用途によっては通信経路のの暗号化は必須と考え、サーバーにアクセス権を持つ全てのユーザーではなく、サーバー管理者など特定のユーザーに対して提供する事を目的とします。
また、ユーザーを限定するのか、接続するネットワーク先を限定するのか、などといったセキュリティに対する配慮によって、それぞれの目的にあった起動方法を考える必要もあります。
特にこのようなリモートデスクトップサービスは、CPUやネットワーク帯域のリソースを大量に浪費する上、セキュリティの観点からも運用については細心の注意が必要になります。
VNC Server をセットアップにあたっての前提条件としては、 Xserver がインストール済みで、既にグラフィカルモードで Linuxが起動している環境が整っている必要があります。CentOS5 以降は vnc-server ではなく tigervnc-server でインストールします。
この操作で依存関係のある x11フォント類がインストールされます。昔はx11フォント関係で VNCを日本語環境で動かすのに苦労したのが懐かしいです。
VNCサーバの起動方法は幾つかの方法があります。VNCに限った話ではありませんが、デーモンで通常待ち受けるサービスにするか、要求に応じて呼び出すか(xinetd)等々です。
CentOS6.x では tigervnc server をインストールした直後は、システムブート時に起動するサービスとは起動するようにはなっていません。chkconfig で確認するには以下のようにします。
システム起動時に起動するサービスとする場合は、以下のようにします。
ただ、この場合だとLinuxアカウントを持つユーザーに VNCサービスを提供することになるので、利用者を限定したい場合は、off にします。
ちなみにこの場合の VNCサーバーの設定は /etc/sysconfig/vncservers で行います。ここでは、VNCサーバーを起動を許可するユーザーと起動時因数のの2行を追加します。hoghoge ユーザーに許可する場合です。
VNCSERVERS="1:hogehoge"
VNCSERVERARGS[1]="-geometry 800x600 -nolisten tcp"
上記例では 1はディスプレイ番号、解像度は 800x600 としています。
VNCサーバーを特定のユーザー単位で起動させて利用する場合は、そのユーザー権限で VNCサーバーを起動します。24bitフルカラー、解像度は 1920×1200で起動させる場合です。
初回起動時は、パスワードが要求されますので任意の専用のパスワードを入力します。くれぐれも hogehogeユーザーと同じパスワードにしないで、専用のパスワードを設定します。
この作業でユーザーのホームディレクトリに ~/.vnc が生成され、底にパスワードも保存されます。このパスワードは8文字しか受け付けないので非常に脆弱性があります。終了する場合は以下の様にします。
LAN内からSSHで保守管理を行っているroot権限を持たない管理者用のアカウントに対しての利用を想定しているので、必要に応じてコマンドを叩けばVNCサーバーの起動、終了操作が行えます。
実際に使用してみて、面倒であれば rc.local に記述して起動時のそのユーザーの実行権限で VNCサーバーを自動起動するようにしても構いませんし、そもそも、X ログインは必要ないと判断すれば、そもそも VNC自体が不要です。
SSHで一々叩くのではなく、VNCを常用したい場合は、 rc.local に以下のように記述します。
su - hogehoge -c 'vncserver :1 -depth 24 -geometry 1920x1200'
これでシステムブート時に hogehogeユーザーで VNCサーバーが起動します。
xinetd 経由で wrapper 起動、つまりスーパーデーモンとしての運用する方法もありますが割愛します。この場合 xinetd 側で接続先を限定するなどセキュリティ皆無のVNCに一定のセキュリティ対策が施せます。
ここでは iptables(ファイアウォール)とトンネリング、通信経路を暗号化でセキュリティを確保します。(後述)
とりあえず、VNCの動作を確認するため、ローカルネットワーク上のクライアントPCから、VNCサーバーに接続できるか確認します。VNC は 5900:5901 を使いますので、iptables でポートを一時的に開いて置きます。
また、このポートは後述する Zebedee で使用するポートにトンネリングして通信経路を暗号化しますので、接続が確認できたら、iptables で 5900:5901 ポートはまた閉じることになるので忘れないようにします。
Windows、Mac OX-X で動作する VNCクライアントは、以下で配布されているVNCクライアントを使用します。
起動して接続先にサーバーのアドレスとポート番号を指定します。
192.168.15.135:1
1は先に定義したディスプレイ番号になります。VNCサーバーに問題なく接続できるか確認がとれたら、次は Zebedee というツールを用いてポートフォワーディングと通信経路の暗号化を行います。
SSHでも同様のことが出来ますが、Zebedee を使います。VNCサーバーが問題なく動作していることが確認できたら、iptables のポート番号は閉じて、戸締まりは忘れないようにしておきます。