- 追加された行はこの色です。
- 削除された行はこの色です。
*x11vnc [#xf37753b]
Linuxサーバをリモートデスクトップみたいに操作するソフト(モジュール)。
他にはRealVNCやらVNCServer等がある。
x11vncの特徴としては、複数のユーザが同時ログインした際に、
“それぞれのVNCクライアントに同じ(Linux)画面”が出力出来る。
*xrdp [#z05446e5]
[[xrdp>+http://www.xrdp.org/]]
Linuxでリモートデスクトップを待ち受けるソフトウェア。
実際は、ローカルでVNCやconsole接続を行い、それらのパケットをRDPに変換(カプセリング?)する事で、
WindowsのRDPクライアントでも操作出来るようにする物。
その為、xrdp単体でLinuxをリモートGUIで操作はできず、何らかのリモートソフトと組み合わせる事が必須になる。
~
*構築環境 [#c7e9aa20]
*構築環境 [#bbe8febd]
今回検証した環境はこちら
-CentOS 6.4 x86_64
-※同時に複数端末でログインしても、同じ画面が表示される事を確認
-openSUSE Leap 42.1
~
*構築 [#zffc5a38]
&size(16){&font(b){1. インストール};};
ソースからmakeするのが筋なのだろうが、面倒だったのでyumでインストール。
apt-getでも同様に行ける。筈
# yum install x11vnc
*構築 [#l9e166c9]
&size(16){&font(b){0. 注意事項};};
xrdpを動かすには最低限、Xvnc(TigerVNC)かX11rdp(後述)が必須になる。
今回は、構築が一番楽なXvnc+xrdpの構築メモを記述。
~
&size(16){&font(b){2. パスワードファイルの作成};};
デフォルトのままだと、パスワード認証が掛かってないので、パスワードのマップ(ファイル)を作成する。
なお、パスワードファイル6文字以上・8文字以下にする事。
(今回の設定方法の)x11vncではパスワードにDESを利用しているので、最大8文字しか認識出来ない。
もし、9文字以上を入力しても、8文字目までしか認識を行わないので意味が無い。
# x11vnc -storepasswd
---
Enter VNC password:
Verify password:
Write password to /root/.vnc/passwd? [y]/n
Password written to: /root/.vnc/passwd
さすがに、rootのフォルダに置いておくのはどうかと思うので、お好みにより移動させる。
# mv /root/.vnc/passwd /etc/passwdvnc
&size(16){&font(b){1. パッケージインストール};};
-openSUSE
既にビルドされているパッケージからインストールする場合、
openSUSEのオフィシャルに用意されているympファイルを使う。
~
&size(16){&font(b){3. xinetd - x11vncの自動起動};};
xinetdからx11vncを起動させる為に設定を追記していく。
自分の環境では、vncの応答ポート番号に5920を使用している。
デフォルトは5900番なのだが、良く攻撃対象ポートになるので変更する事を推奨。
各オプションの詳細については以下参照
-[[VNC server for real X displays>+http://www.karlrunge.com/x11vnc/x11vnc_opts.html]]
-[[Allow VNC connections to real X11 displays>+http://manpages.ubuntu.com/manpages/hardy/man1/x11vnc.1.html]]
# vi /etc/xinetd.d/x11vnc
---
service x11vnc
{
port = 5920
protocol = tcp
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/x11vnc
server_args = -display :0 -geometry 1024x768 -rfbauth /etc/passwdvnc b-allow 192.168.1.11 -o /var/log/x11vnc.log -auth guess -inetd -noncache -xkb -repeat -forever -bg -shared -enablehttpproxy -nolookup
}
-xinetd(x11vnc連携)補足
&font(b){port = };xinetdがx11vncを待ち受けるポート番号。"-rfbport"と被ってはいけない。
&font(b){user = };x11vncを実行するユーザ。"-auth"読み取り権限の関係でrootを推奨。
&font(b){server = };x11vncのバイナリ。『# which x11vnc』で調べられる。
&font(b){server_args = };x11vncの引数。詳細は下参照
ympファイルをダウンロードしたら、そのままWebブラウザからyastを起動させるか、
OCICLIコマンドを使って個別にインポートすればxrdpをインストールする事が出来る。
[[Open Source remo desktop protocol (RDP) server>+https://software.opensuse.org/package/xrdp]]
~
&size(16){&font(b){4. server_argsの設定};};
server_argsの設定が結構厄介。x11vncを構築する各環境に合わせて調整していく事になる。
- -display :0
Linuxの端末番号。もし、ここを“:1”に変更したらクライアントからの接続ポート番号は“5921”番になる。
- -geometry 1024x768
クライアントで表示するVNC接続先の解像度。
- -rfbauth /etc/passwdvnc
パスワードファイルのPATH。
- -allow 192.168.1.11
接続を許可するクライアントのIPアドレス。“,”区切りで複数指定、“192.168.1.”で/24を想定した範囲も可。
- -o /var/log/x11vnc.log
x11vncの動作ログ保存先。各接続毎に新規作成される。
- -auth guess
XServerの管理番号ファイルの指定。gdm/kdm/xdmで色々変わる。公式だと、
gdm: -auth /var/gdm/:0.Xauth
gdm: -auth /var/lib/gdm/:0.Xauth
kdm: -auth /var/lib/kdm/A:0-crWk72
kdm: -auth /var/run/xauth/A:0-crWk72
xdm: -auth /var/lib/xdm/authdir/authfiles/A:0-XQvaJk
dtlogin: -auth /var/dt/A:0-UgaaXa
が推奨らしいが、&font(b){殆どの場合で違うので書き換え必須。};
CentOSで使用しているgdmだと、
/var/run/gdm/auth-for-[UserName]-***
なのだが、[UserName]はユーザ毎に変わり、***の中はランダムなので、
xinetd経由でのx11vnc起動オプションから上のディレクトリを決め打ちをする事が出来ない。
よって、&font(b){『-auth guess』を指定};して可変適応させる。
- -inetd
デーモンとして稼働。
- -noncache
クライアントに対して、Linuxの画面をキャッシュしない。
noncacheにすると、VNCクライアントで解像度違いによるバグが起きなくなる。
- -xkb
LinuxのXKeyboardを拡張する。LinuxでもShiftとかが打てる様になる。
- -repeat
クライアントからの接続保持?
- -forever
指定しないと、セッションが終了する毎にx11vncが落ちる。
指定をすると、セッションが終了しても、x11vncが待機状態になりクライアントから再度接続する事が可能になる。
- -bg
x11vncをバックグラウンドで動作。
- -shared
複数ユーザで同じ画面を共有する。
- -enablehttpproxy
http-proxyを使用可能にする。
-CentOS / Debian
xrdpユーザ会で、CentOS用とDebian用のビルドツールが用意されている。
また、yumとかapt-getでも用意されているので、用途に合った方を使えばOK
CentOS版 [[X11RDP-o-Matic>+https://xrdp.vmeta.jp/X11RDP-o-Matic]]
Debian版 [[X11RDP-RH-Matic>+https://xrdp.vmeta.jp/X11RDP-RH-Matic]]
[CentOS] # yum install xrdp
[Debian] # apt-get install xrdp
~
&size(16){&font(b){5. ポートとサービスの対応付};};
ポート5920はx11vncという事を設定する。
# vi /etc/services
---
※最下行に追記
x11vnc 5920/tcp # X11 VNC Server
x11vnc 5920/udp # X11 VNC Server
必要に応じて、iptablesの設定も変更する事。
上記が全て完了したらLinux機の再起動をする
&size(16){&font(b){2. ビルドインストール};};
通常はパッケージで入れれば良いが、別途特殊オプションをenableにする場合はソースから入れる。
また、パッケージで入れた際にキーボードマップが日本語106で認識しない場合には、
ソースからマップファイルをコピーすれば認識する様になる。
~
*接続 [#q9f109b6]
適当なVNCクライアントを使用して、Linux機に接続をする。接続する際には
[Linux機のIPアドレス]::[ポート番号]
を指定する(クライアントによって変化)。
ビルドでのインストールは未検証なのでコマンドの羅列のみ。
[[オフィシャルのドキュメント>+http://www.xrdp.org/index.php?option=com_content&view=article&id=32:building-xrdp-in-opensuse-13x&catid=2:documents&Itemid=7]]に詳しく書いてあるので、そっち参照を推奨。
# cd /usr/local/src
# git clone "https://github.com/neutrinolabs/xrdp.git"
# cd xrdp
# ./bootstrap
# ./configure --prefix=/usr/local/xrdp --enable-fuse
# make
# make install
# /usr/local/xrdp/bin/xrdp-keygen xrdp auto
# cp /usr/local/xrdp/etc/pam.d/* /etc/pam.d/
~
*注意事項 [#vd09a8dd]
- -look
&font(b){server_argsには"-look"オプションがある};のだが、これと"-inetd , -forever , -repeat"を同時に使用すると、
x11vncがgdm等のXauthを取得出来なくなり、接続毎にゾンビが発生してしまうので、
"-look"オプションは使用しない事を推奨。
- -rfbport
&font(b){server_argsには"-rfbport"という、“VNCの待ち受けポート番号を個別に指定出来る”オプションがある};のだが、
こっちも指定すると、xinetdの方で指定したport番号と競合を起こす可能性があるので、非推奨。
だが、常に指定したディスプレイ番号(20以上とか)でVNCを待ち受けしたい時には使える。
その場合、クライアントは最初xinetdのポートへ接続を行い、
わざとエラーでクライアントを落とした後、"-rfbport"で指定したポート番号に対して再度接続をする事になる。
1度目→[Linux機のIPアドレス]::5920
※接続しに行くと必ず落ちる。
2度目→[Linux機のIPアドレス]::[-rfbportで指定したポート番号]
※接続が出来る。
&size(16){&font(b){3. キーボードマップの更新};};
xrdpのログイン画面で、&font(b){[Shift]+[2]};を押した時に&color(#ff0000){&font(b){[@]};};が出力されるなら&color(#ff0000){必須};
# cd /usr/local/src
# git clone "https://github.com/neutrinolabs/xrdp.git"
# cd xrdp/instfiles
# ls *.ini | grep -v e0 | xargs -i cp {} /etc/xrdp/
# cd /etc/xrdp
# ln -s km-0411.ini km-e0010411.ini
# ln -s km-0411.ini km-e0200411.ini
# ln -s km-0411.ini km-e0210411.ini
# ln -s km-0411.ini km-e0220411.ini
~
&size(16){&font(b){4. WindowManagerの変更};};
デフォルトではRDP接続した時、WMがgnomeになるのでお好みに合わせて変更する。
実際には、xrdpのセッションを張った時に実行されるstartwm.shスクリプトの中にWMが定義されているので、
使いたいWMに合わせて入れ替える事になる。
# vi /etc/xrdp/startwm.sh
=====
・gnome
SESSIONS="gnome-session blackbox fluxbox startxfce4 startkde xterm"
-----
・kde
SESSIONS="startkde gnome-session blackbox fluxbox startxfce4 xterm"
-----
・xterm
SESSIONS="xterm gnome-session blackbox fluxbox startxfce4 startkde"
~
&size(16){&font(b){5. 証明書認証};};
デフォルトでは証明書も入っていないので、必要ならば証明書も作成する
※xrdpがver0.8.1以上でないと使えないので注意
# cd /etc/xrdp
# openssl req -x509 -newkey rsa:2048 -nodes -keyout xrdp.key -out xrdp.cert -days 1095
# vi /etc/xrdp/xrdp.ini
-----
>> # security layer can be 'tls', 'rdp' or 'negotiate'
>> # for client compatible layer
>> security_layer=tls
>> # X.509 certificate and private key
>> # openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365
>> certificate=/etc/xrdp/xrdp.cert
>> key_file=/etc/xrdp/xrdp.key
-----
# systemctl restart xrdp