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)通過遠程登錄的用戶,即使關閉連接(沒有退出登錄),物理機依舊無法登錄該用戶。
參考文獻
WikiNotes/使用 Windows 遠程 Linux 主機
Xrdp - Wikipedia
xrdp by neutrinolabs
How to Establish Remote Desktop Access to Ubuntu From Windows