「xrdp」- 使用 Windows 远程 Linux 主机

  CREATED BY JENKINSBOT

xrdp

xrdp,是 RDP 协议的服务端实现,基于 FreeRDP 和 rdesktop 的工作,xrdp 使用 RDP(远程桌面协议)向用户呈现图形化界面。该项目提供一个功能齐全的 RDP 服务端,能够接受来自 rdesktop、freerdp、微软自己的远程桌面客户端的连接。与 Windows NT/2000/2003/2008/2012 服务器不同,xrdp 不会显示 Windows 桌面,而是显示 X Window 桌面。

基本原理

xrdp 并不直接提供桌面的显示功能,而是使用Xvnc或X11rdp来管理X Session,并显示桌面

RDP Client

RDP的客户端,用于连接RDP Server。

RDP Server

xrdp,RDP的服务端,用于接受来自于RDP Client的连接请求,xrdp可以接受freerdp、rdesktop、Windows内建的远程桌面的连接,并向用户显示一个登录界面,该界面用于输入Username、Password并选择桌面管理模块。

xrdp包含RDP、Security、MCS、ISO、TCP层、一个简单的窗口管理器、一些控件。它是一个多线程单进程的服务进程,正是在这个单进程中,进行着会话的中央管理。中央管理包括会话投影、管理给用户的弹出窗口。

xrdp 由 xrdp.ini 配置文件控制。

在RDP Server和RDP Client之间有3个安全级别。低、中、高:

  • 低:40位,从Client到Server的数据是加密的;
  • 中:40位,双向加密;
  • 高:128位,双向加密;

xrdp支持的3个加密级别在xrdp.ini文件中配置。在Client连接之前,RSA密钥交换使用Client和Server的随机值来创建RC4密钥。

桌面管理模块在运行时才进行加载,以提供真正的功能。可以创建许多不同的模块来向用户展示多种不同的桌面中的一种。这些可加载模块用以节省内存,并且支持GPL和非GPL模块。

多线程来提供最佳的用户性能。一个Client不会导致整体性能下降。使用任何模块进行会话投影也需要一个多线程进程。模块不必考虑投影,投影由xrdp负责。例如,可以使用相同的投影工具来映射VNC、RDP、自定义模块会话。

用于发送弹窗给任何用户的xrdp的内建窗口管理器与桌面管理模块无关,可以在任何模块下运行,也可以用作提供连接错误、提示。

xrdp可以连接到与xorgxrdp驱动程序在本地创建的X.org会话,或者到VNC X11服务器,并转发到另一台RDP服务器。

桌面管理模块

libvnc
用在xrdp中的VNC模块。libvnc提供了到VNC Server的连接,是一个简单的客户端,只提供了集中简单的编码(raw, cursor, copyrect),重点在于快和小。通常情况下,xrdp Server和Xvnc Server在同一台机器上,所以位图的压缩编码只会拖慢Session。

librdp
xrdp的RDP模块,用于提供到RDP Server的连接。当前只支持RDP4.

sesman
session管理器。sesman是xrdp的会话管理器。xrdp连接到sesman以验证用户名、密码,并且如果凭证正常,还启动用户会话。 这是一个多进程、仅Linux的会话管理器。会话可以通过sesrun从命令行启动或查看。

xorgdriver
xrdp可以使用xorgdriver连接到一个本地创建的X.org Session。

在xorgxrdp(替代了X11RDP)和VNC模式中,xrdp提供了全功能的的Linux终端服务,向用户提供了X-Window桌面。

在RDP或者VNC的转发模式中,任何使用任何类型的桌面。

搭建 xrdp 服务(Linux)

第一步、安装服务

# Kali GNU/Linux Rolling
apt-get install x11-session-utils xfonts-100dpi xfonts-75dpi \
	xfonts-scalable xorg xorg-docs-core xorgxrdp xrdp

# Ubuntu 20.04
apt-get install xrdp

第二步、启动服务

# 设置窗口管理器,我使用的是fvwm:
# echo 'exec fvwm' > $HOME/.xsession

# 启动 xrdp 服务
systemctl enable xrdp
systemctl start xrdp

第三步、客户端连接

在 Linux 下,使用 rdesktop、Remmina 等客户端远程;在 Windows 下,可以直接使用远程桌面进行连接。

我们使用 Ubuntu 20.04 LTS 进行实验,我们没有深入研究,但是发现以下特征:
1)当用户在物理机登录时,远程桌面可以连接,但是远程桌面是黑屏状态;
2)物理机用户需要退出登录,远程桌面才可以成功显示桌面;
3)通过远程登录的用户,即使关闭连接(没有退出登录),物理机依旧无法登录该用户。

参考文献

Xrdp – Wikipedia
xrdp by neutrinolabs
How to Establish Remote Desktop Access to Ubuntu From Windows