サーバエンジニアになりたい無職の生活

元メジャー通信技術のマイナーエンジニアで今はサーバエンジニアになろうかなと思ってる無職ですが

CentOS6.7にVNCサーバ導入

複数台のPC立ち上げて作業する時に、
操作するPCを変更する度に移動したりするのが面倒なので
CentOS6.7上にVNCサーバ導入してWindows7から接続した時のメモ。


環境
サーバ側
OS: CentOS 6.7 64bit
サーバソフト: tigervnc (公式サイト)

クライアント側
OS: Windows7 Professional
クライアントソフト: VNC Viewer (公式サイト)


注意
自宅で使うだけなのでこの手順では暗号化は考慮していない。
暗号化する場合はsshポートフォワーディングを使う


tigervncサーバの起動方法について
お便利サーバー.com(http://www.obenri.com/_vnc/vnc_server1.html)によると
tigervncサーバの起動方法は2つあるらしい。

1: /etc/sysconfig/vncserversに利用するアカウント情報を記載して
   起動スクリプトから起動する方法
2: 任意のユーザでvncserverコマンドを実行してデーモンを起動する方法

1つ目の方法の方が一般的だと思うので、
今回は1つ目の方法で導入して、2つ目は試してみるだけ試してみます。


手順
1. サーバ側設定
2. 動作確認
おまけ: 任意のユーザでデーモンを起動する


1. サーバ側設定
サーバ側の手順は、
パッケージインストール →
/etc/sysconfig/vncserverにVNCを使用するアカウントを追加 →
ログインパスワード設定 →
デーモン起動 →
必要ならiptablesの設定を行う。

まず、パッケージインストールする


[root@localhost ~]# yum install tigervnc-server

================================================================================
パッケージ アーキテクチャ
バージョン リポジトリー
容量
================================================================================
インストールしています:
tigervnc-server x86_64 1.1.0-16.el6.centos base 1.0 M

トランザクションの要約
================================================================================
インストール 1 パッケージ

総ダウンロード容量: 1.0 M
インストール済み容量: 2.6 M


インストールされたファイル見てみる。
起動スクリプト、設定ファイル、コマンド、manページっていう感じ。


[root@localhost ~]# rpm -ql tigervnc-server
/etc/rc.d/init.d/vncserver
/etc/sysconfig/vncservers
/usr/bin/Xvnc
/usr/bin/vncconfig
/usr/bin/vncpasswd
/usr/bin/vncserver
/usr/bin/x0vncserver
/usr/share/man/man1/Xvnc.1.gz
/usr/share/man/man1/vncconfig.1.gz
/usr/share/man/man1/vncpasswd.1.gz
/usr/share/man/man1/vncserver.1.gz
/usr/share/man/man1/x0vncserver.1.gz


次に設定ファイル「/etc/sysconfig/vncserver」にVNCを使用するアカウント情報を追加する。
このファイルに記載した内容は起動スクリプト内で解釈されてデーモン起動時に引数として渡される。

   VNCSERVERSの設定
   ディスプレイ番号とユーザ名を設定する。
   ディスプレイ番号0は通常のディスプレイで使用済み。
   5900+ディスプレイ番号がTCPのポート番号となる。
   書式: VNCSERVERS="ディスプレイ番号1:ユーザ名1 [ディスプレイ番号2:ユーザ名2 ...]"

   VNCSERVERARGSの設定
   -geometryは画面サイズを指定する
   (デフォルトが1024x768なので、-geometry 1024x768は省略しても同じ結果)
   -nolisten tcpを指定すると、X用のTCPポート番号6001での待受が行われない。
   書式: VNCSERVERARGS[ディスプレイ番号]="設定"


ということで設定する。


[root@localhost ~]# vi /etc/sysconfig/vncservers
...
VNCSERVERS="1:test" #追記
VNCSERVERARGS[1]="-geometry 1024x768 -nolisten tcp" #追記


次にログインするユーザにスイッチしてパスワード設定する。


[test@localhost ~]$ which vncpasswd
/usr/bin/vncpasswd
[test@localhost ~]$ vncpasswd
Password:
Verify:


manページ(man vncserver)によると、
$HOME/.vnc配下にpasswdファイルが保存されているとあるので見てみる。
(logなども同じフォルダに保存されるらしい。)


[test@localhost ~]$ ls -l .vnc
合計 4
-rw-------. 1 test test 8 12月 29 03:53 2015 passwd
[test@localhost ~]$ cat passwd
cat: passwd: そのようなファイルやディレクトリはありません
[test@localhost ~]$ cat .vnc/passwd
セッ・リ
→平文ではなく暗号化されて保存されていました。


デーモン起動する、自動起動も設定する。


[root@localhost ~]# chkconfig --list vncserver
vncserver 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@localhost ~]# chkconfig vncserver on
[root@localhost ~]# service vncserver status
Xvnc は停止しています
[root@localhost ~]# service vncserver start
VNC サーバー を起動中: 1:test xauth: creating new authority file /home/test/.Xauthority

New 'localhost.localdomain:1 (test)' desktop is localhost.localdomain:1

Starting applications specified in /home/test/.vnc/xstartup
Log file is /home/test/.vnc/localhost.localdomain:1.log

[ OK ]


CentOS6.7はデフォルトでiptablesが有効なので設定する。
一応TCPポート番号確認しておく


[root@localhost ~]# netstat -atnp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 23959/Xvnc
...


各チェーンで上から順番に評価されるので、
既存設定確認後に挿入→保存→設定ファイル確認する。


[root@localhost ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
...

[root@localhost ~]# iptables -I INPUT 5 -m state --state NEW -m tcp -p tcp --dport 5901 -j ACCEPT
[root@localhost ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:5901
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
...

[root@localhost ~]# iptables-save > /etc/sysconfig/iptables
[root@localhost ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Tue Dec 29 05:40:04 2015
∗filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [231:45307]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5901 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Tue Dec 29 05:40:04 2015


2. 動作確認
クライアント側のソフトはVNC Viewerを使いました。
IPアドレス、ポート番号、パスワード入力するだけです。

f:id:girochinful:20151229071646j:plain

f:id:girochinful:20151229071652j:plain


おまけ: 任意のユーザでデーモンを起動する
上記の続きでやるので、デーモン止めます。


[root@localhost ~]# service vncserver stop
VNC サーバー を停止中: 1:test [ OK ]

接続するユーザにスイッチしてパスワードなどのファイルを消す(消さなくても良い)。


[test@localhost ~]$ ls -l .vnc/
合計 16
-rw-rw-r--. 1 test test 7772 12月 29 06:12 2015 localhost.localdomain:1.log
-rw-------. 1 test test 8 12月 29 03:53 2015 passwd
-rwxr-xr-x. 1 test test 654 12月 29 04:37 2015 xstartup
[test@localhost ~]$ rm -rf .vnc/
[test@localhost ~]$ ls -l .vnc/
ls: cannot access .vnc/: そのようなファイルやディレクトリはありません

ディスプレイ番号を指定してデーモン起動する

  • geometryは画面サイズを指定する(デフォルトが1024x768なので、-geometry 1024x768は省略しても同じ結果)
  • nolisten tcpを指定すると、X用のTCPポート番号6001での待受が行われない。

上でパスワードファイルを消しているので、入力を求められる。


[test@localhost ~]$ vncserver :1 -geometry 1024x768 -nolisten tcp

You will require a password to access your desktops.

Password:
Verify:

New 'localhost.localdomain:1 (test)' desktop is localhost.localdomain:1

Creating default startup script /home/test/.vnc/xstartup
Starting applications specified in /home/test/.vnc/xstartup
Log file is /home/test/.vnc/localhost.localdomain:1.log

ちゃんと起動している(接続も問題なし)


[test@localhost ~]$ ps aux | grep vnc
test 26584 0.3 2.4 129476 24544 pts/0 S 06:32 0:00 /usr/bin/Xvnc :1 -desktop localhost.localdomain:1 (test) -auth /home/test/.Xauthority -geometry 1024x768 -rfbwait 30000 -rfbauth /home/test/.vnc/passwd -rfbport 5901 -fp catalogue:/etc/X11/fontpath.d -pn -nolisten tcp


終了は"vncserver -kill :1"です。


[test@localhost ~]$ vncserver -kill :1
Killing Xvnc process ID 26584