配置 xrdp 和 Mstsc (windows远程桌面连接) 从远程机器转发图形
介绍
在使用windows远程桌面连接到 Linux 机器时,你可能会遇到当尝试从其他机器使用 DISPLAY 环境变量转发图形时的问题。本指南说明了如何配置系统以允许从远程机器转发 DISPLAY,并讨论了相关的风险。
参照上篇的方法,这里简单讲配置步骤
配置步骤
- 更新 linux机器上 xrdp 配置
xrdp 的默认配置可能会限制 TCP 连接,这可能会干扰从其他机器转发 DISPLAY:
- 编辑 xrdp 会话管理文件:
sudo vi /etc/xrdp/sesman.ini
- 找到并删除或注释掉
-nolisten tcp
选项:[Xvnc] #param=-nolisten #param=tcp
- 重启xrdp-sesman服务
systemctl restart xrdp-sesman
删除这个选项允许 X 服务器接受来自其他机器的连接。
修改Xvnc还是Xorg,取决于使用wstsc登录linux机器时,选择的session类型
- 编辑 xrdp 会话管理文件:
- 配置 X11 访问控制
在 Linux 机器上,允许来自任何 IP 地址的 X 服务器连接:
- 运行以下命令:
xhost +
这个命令禁用访问控制,允许任何远程机器连接到 X 服务器。
- 运行以下命令:
- 设置 DISPLAY 环境变量
在运行图形应用程序的远程机器上:
- 从 Linux 机器获取 DISPLAY 端口:
env | grep DISPLAY
- 设置 DISPLAY 环境变量:
export DISPLAY=<linux_machine_ip>:<display_port>
将
<linux_machine_ip>
替换为 Linux 机器的 IP 地址,<display_port>
替换为从env
命令中获得的端口号。 - 从 Linux 机器获取 DISPLAY 端口:
风险和注意事项
- 安全风险
xhost +
:使用xhost +
禁用访问控制会带来显著的安全风险,因为它允许任何远程机器连接到你的 X 服务器。这可能会暴露敏感数据或允许未经授权的访问你的图形会话。-nolisten tcp
的风险:删除/etc/xrdp/sesman.ini
中的-nolisten tcp
选项会使 X 服务器不再仅限于本地回环地址 (localhost
) 监听。这样,X 服务器将接受来自网络中其他机器的连接。虽然这使得远程机器可以访问 X 服务器,但也增加了安全风险,因为 X 服务器的图形会话可能会暴露给网络上的所有机器,可能导致数据泄露或未经授权的访问。
xauth
验证- X11 认证:由于 X11 使用
xauth
进行验证,确保客户端能够连接到 X 服务器。验证文件.Xauthority
位于用户的 home 目录下,因此只有相同用户才能使用这个 DISPLAY 端口。远程机器必须具有适当的 X11 认证信息才能访问图形会话。 - 建议:将
.Xauthority
文件从本地机器复制到远程机器,或者使用xauth
进行远程认证。如果可能,考虑使用更严格的配置和访问控制,例如在xhost
命令中指定允许的 IP 地址,或使用特定配置的 SSH 隧道端口转发。
- X11 认证:由于 X11 使用
- 网络配置
- 防火墙设置:确保 Linux 机器上的防火墙允许 X 服务器端口的传入连接。这通常涉及配置
iptables
或firewalld
以允许 X 服务器端口的流量。 - 网络安全:注意网络的潜在暴露。仅在安全且受信任的环境中启用这些设置。
- 防火墙设置:确保 Linux 机器上的防火墙允许 X 服务器端口的传入连接。这通常涉及配置
总结
通过遵循上述步骤,你可以配置你的 Linux 机器以接受来自远程机器的 DISPLAY 转发。确保你了解这些配置的安全影响,并谨慎应用,以维护系统和数据的安全。由于 X11 使用 xauth
进行认证,因此确保同一用户能够访问 DISPLAY 端口。如果问题仍然存在,检查 X11 配置的详细日志可能会提供进一步的线索。
为了额外的安全性,考虑咨询你的网络管理员或安全专家,以根据你的具体需求和环境调整配置。