1. はじめに
以前のエントリーでは、VcXsrv(Xming)やVNCなどを使い、WindowsクライアントでLinuxサーバーのGUIアプリを起動する方法を説明した。
-
Windowsクライアントを使って、クラウド上のLinuxサーバでGUIアプリを実行したい(1) (2) (3) (4)
→全体像とXcXsrv - クラウドでVNCサーバ&クライアントを構成する Part 1 Part 2 →VNC
ポートフォワーディングや踏み台利用なども含めて出し尽くしたと思っていたが、xrdpは本文中で紹介したのに詳細は説明していなかった。
そこで今回はxrdpについて説明する。なお前提知識として「Windowsクライアントを使って…(1)」 と「クラウドでVNCサーバ&クライアントを構成する Part 1 」は読んでいるものとする。
1-1. 前提条件
- RHEL系Linux OS(6/7/8/9)
- パブリック・クラウド・サービスを利用(ただし本文中ではOracle Cloud Infrastructureを利用)
※「Amazon Linux=6系」「Amazon Linux 2=7系」として読み替えてほしい。
2. xrdpとは
xrdpとは、LinuxにRDP(Microsoft Remote Desktop Protocol)を提供するサーバー・プログラムである。xrdpをインストールすることで、Windowsクライアントからリモート・デスクトップを使ってグラフィカル・リモート・ログインできる。
おもな特徴は以下のとおり。
- Windowsクライアントのリモート・デスクトップから接続できるので、クライアント側はインストール不要
- フル・デスクトップ環境を利用できる
- VNCとは違い、通信内容は暗号化される
このなかで「Windowsクライアントに何もインストールする必要が無い」のが一番のメリットだろう。企業ユースでは踏み台サーバーの権限が制限されていることが多く、一般ユーザーがプログラムをインストールできないことがあるからだ。
そして注意することが一つある。暗号化されていても、VPNなどを使わずに素のインターネットを使用するときは必ずポートフォワーディングすることだ。
なぜならば、リモートデスクトップのポート番号は3389であり、攻撃対象になりやすい。そのため、ファイアウォールでアクセス元IPを制限してないと、誰でもログイン画面を表示できてしまう。
2-1. xrdpとVNCの比較
次の表はxrdpとVNCを比較したものだ。セキュリティ方式に違いがあるが、どちらも基本的にはポートフォワーディングと併用した方がいいだろう。VNCは使用するユーザー分のポートが必要なので、マルチユーザーアクセスが必要なシステムでは注意したい。
クライアント側に追加のソフトウェア | OSユーザーのパスワード設定 | 接続セキュリティ | 伝送路 | 利用するポート | |
---|---|---|---|---|---|
xrdp | 不要 | 必須 | OSのユーザー名/パスワード | 暗号化される | 3389のみ |
VNC | 必要 | オプション | VNCパスワード | 暗号化されない | 5901から利用する人数分 |
2-2. 設定手順
設定手順は以下のとおり。xrdpは、VNCのアドオン的な実装のため、設定方法はほとんど同じになっている。
1.xrdpを設定する
- デスクトップ環境をインストールする
- VNCサーバーをインストールする
- xrdpをインストールする
- xrdpを起動する
2.Linuxユーザーのパスワードを設定する
3.ファイアウォールを設定する
- クラウドのファイアウォールを設定する
- サーバーのファイアウォールを設定する
4.ポートフォワーディングする
5.Windowsクライアントからリモートデスクトップ接続する
3. xrdpを設定する
VNCと、ほとんど同じ手順なので簡潔に説明する。
3-1. デスクトップ環境をインストールする
7/8/9系Linux OS
yum groupinstall graphical-server-environment -y
6系Linux OS
yum groupinstall basic-desktop general-desktop japanese-support -y
3-2. VNCサーバーをインストールする
Linux OS共通
yum install tigervnc-server -y
3-3. EPELリポジトリを有効化する
xrdpはEPELから提供されている。そのため先にEPELリポジトリを有効にする。ただしAWSやOracle CloudではEPELを有効にする方法が異なるので注意すること。EPELの詳細は「あらためてEPELリポジトリの使い方をまとめてみた」を参照のこと。
9系Linux OS
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm -y
8系Linux OS
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y
7系Linux OS
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -y
6系Linux OS
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm -y
Amazon Linux 2
Amazon Linux 2ではEPELを有効にするコマンドが提供されている。
sudo amazon-linux-extras install epel
3-4. xrdpをインストールする
コマンドは同じだが、7系と6系ではインストールされるパッケージは異なる。
7/8/9系Linux OS
# yum install xrdp -y
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
xrdp x86_64 1:0.9.10-1.el7 epel 422 k
Installing for dependencies:
xorgxrdp x86_64 0.2.10-4.el7 epel 63 k
xrdp-selinux x86_64 1:0.9.10-1.el7 epel 17 k
Transaction Summary
================================================================================
Installed:
xrdp.x86_64 1:0.9.10-1.el7
Dependency Installed:
xorgxrdp.x86_64 0:0.2.10-4.el7 xrdp-selinux.x86_64 1:0.9.10-1.el7
Complete!
6系Linux OS
# yum install xrdp -y
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
xrdp x86_64 0.6.1-4.el6 epel 244 k
Transaction Summary
================================================================================
Installed:
xrdp.x86_64 0:0.6.1-4.el6
Complete!
3-5. xrdpを起動する
7/8/9系Linux OS
xrdpのサービスを起動する。
# systemctl start xrdp
# systemctl enable xrdp
次のように3389がリスニングされていれば正常に動作している。
# netstat -antup | grep xrdp
tcp 0 0 127.0.0.1:3350 0.0.0.0:* LISTEN 12222/xrdp-sesman
tcp 0 0 0.0.0.0:3389 0.0.0.0:* LISTEN 12223/xrdp
6系Linux OS
# service xrdp start
# chkconfig xrdp on
4. Linuxユーザーのパスワードを設定する
xrdpで接続するときは、sshログインではなくコンソール・ログインになる。そのためxrdpでログインするLinux OSユーザーにパスワードを設定する必要がある。
なお、ここでパスワードを設定しても、sshでパスワード・ログインが有効にはならないので安心してほしい。sshのパスワード・ログインの可否は/etc/ssh/sshd_configで設定できる。次のようにnoになっていれば、パスワードログインできない。
# grep ^Password /etc/ssh/sshd_config
PasswordAuthentication no
4-1. パスワードポリシーを理解する
LinuxではOSパスワードのポリシーを指定できる。ISOイメージからインストールしたときは何も設定されていないが、クラウド・サービスの提供イメージでは設定されていることがある。そのときにはパスワード・ポリシーに従ったパスワードの設定が必要だ。
なおパスワード・ポリシーの設定はLinuxディストリビューションによって異なる。RHEL7系とRHEL6系について説明する。
- RHEL7系以降(Amazon Linux 2含む)
- RHEL6系(Amazon Linux含む)
- Ubuntu
このあたりの詳細は以下の記事を参照のこと。
4-1-1. RHEL7/8/9系
現在のパスワード・ポリシーは以下のコマンドで確認できる。表示されないときには設定されていない。
$ grep -v -e '^\s*#' /etc/security/pwquality.conf
$ grep -v -e '^\s*#' /etc/security/pwquality.conf.d/*.conf
Amazon EC2のAmazon Linux 2では何も設定されていなかった。Oracle Cloud Infrastructure ComputeのOracle Linux 7/8/9ではoci.conf
が追加され、次のように設定されていた。
difok = 3 # 過去3回のパスワードは利用不可
minlen = 8 # パスワードが8文字以上
dcredit = -1 # 数字が1文字以上
ucredit = -1 # 大文字アルファベットが1文字以上
lcredit = -1 # 小文字アルファベットが1文字以上
ocredit = -1 # 記号が1文字以上
gecoscheck = 1 # /etc/passwdエントリのGECOSフィールドの単語が含まれていない
minclass=4 # 文字種別の数。4は数値、大文字、小文字、記号が必須
maxrepeat=3 # 連続した文字の最大数
4-1-2. RHEL6系
RHEL6系のパスワード・ポリシーはpam_pwqualityではなくpam_pam_cracklibで管理している。設定値は次のコマンドで確認できる。
$ grep -v -e '^\s*#' /etc/pam.d/system-auth | grep ^password
何も表示されなければ設定されていない。先ほどと同様にOracle Cloud Infrastructure ComputeのOracle Linux 6では次のように設定されている。
password requisite pam_cracklib.so retry=3 minlen=8 difok=3 gecoscheck ocredit=-1 dcredit=-1 ucredit=-1 lcredit=-1 enforce_for_root
password requisite pam_pwhistory.so use_authtok enforce_for_root remember=4
password sufficient pam_unix.so sha512 shadow try_first_pass use_authtok remember=4
password required pam_deny.so
どのように設定されているかは、クラウド・サービスやLinux OSによって異なる。以下のファイルやヘルプを調べてほしい。
man pam_pwquality
/etc/security/pwquality.conf
/etc/pam.d/system-auth
4-2. パスワードを設定する
パスワードポリシーを理解したところで、必要なユーザー数分のパスワードを設定する。強度の高いパスワードを使用するにはpwmakeやpwgenで生成してもいいだろう。
# passwd <OSユーザー名>
Changing password for user XXX.
New password: ★新しいパスワードを入力
Retype new password: ★確認のため同じパスワードを入力
passwd: all authentication tokens updated successfully.
5. ファイアウォールを設定する
Windowsクライアントから、どのようにLinuxサーバーに接続するかで、必要なファイアウォール設定は異なる。クラウドでは、次の3通りの接続方法が考えられる。
ファイアウォールの設定は、以前「クラウドでVNCサーバ&クライアントを構成する Part 1」の「5. ファイアウォールを設定する」説明している。前回はVNCの5901番ポートだったのに対し、今回は3389番ポートになっただけだ。したがって具体的な説明は省略する。
5-1. クラウドのファイアウォールを設定する
「2.インターネット経由(踏み台あり)」と「3.専用線/インターネットVPN」のときは、Linuxサーバーに疎通できるように、クラウドのファイアウォールを設定する。
5-2. サーバーのファイアウォールを設定する
「2.インターネット経由(踏み台あり)」と「3.専用線/インターネットVPN」のときは、サーバーのファイアウォール(iptables/firewalld)でポートを開ける必要がある。具体的なコマンドは「ソフトウェアファイアウォールの設定」を見てほしい。
6. ポートフォワーディングする
接続方式の中で「1.インターネット経由(踏み台なし)」と「2.インターネット経由(踏み台あり)」のときはポートフォワーディングが必要になる。こちらも以前「6. ポートフォワーディングを設定する」でPutty/Tera Termのそれぞれについて説明しているので、そちらを読んでほしい。
7. Windowsクライアントからリモートデスクトップ接続する
すべての準備が整ったので、WindowsクライアントからLinuxサーバーに接続しよう。
-
「リモートデスクトップ接続」を起動する。入力する文字はポートフォワーディングの有無によって異なる。ポートフォワーディングなしのときは**「IPアドレス」を入力する。ありのときは「localhost:<転送元ポート>」もしくは「127.0.0.1:<転送元ポート>」**を入力する。
localhostで失敗するときは127.0.0.1を試すこと。
ポートフォワーディングなしのとき
ポートフォワーディングありのとき
8. まとめ
-
Windowsのリモート・デスクトップから接続できるので、クライアント側はインストール不要。管理者権限を持っていないWindowsクライアントでも利用できる
-
xrdpを使うと、WindowsクライアントでLinuxのフルデスクトップ環境を利用できる
-
ポートフォワーディングを併用すると、踏み台やクラウドのようなネットワークにも対応できる
9. 参考
-
Windows のデスクトップ機能を使用して RHEL 7.3 の Amazon EC2 Linux インスタンスに接続するにはどうすればよいですか?
https://aws.amazon.com/jp/premiumsupport/knowledge-center/connect-to-rhel-73-windows/ -
TigerVNC + XRDP on RHEL 7 (this shouldn't be so hard!)
https://access.redhat.com/discussions/2020503 -
Install xrdp on CentOS 7 / RHEL 7
https://www.itzgeek.com/how-tos/linux/centos-how-tos/install-xrdp-on-centos-7-rhel-7.html -
HOW TO CONFIGURE XRDP REMOTE DESKTOP SERVER IN RHEL/CENTOS 7
https://www.itsmarttricks.com/how-to-configure-xrdp-remote-desktop-server-in-rhel-centos-7/ -
How To Install xrdp on Red Hat Enterprise Linux 8
https://www.itzgeek.com/how-tos/linux/centos-how-tos/how-to-install-xrdp-on-red-hat-enterprise-linux-8.html