引言:为什么选择 xrdp 实现 CentOS Stream 远程桌面

在现代服务器管理中,远程桌面访问是一项至关重要的功能,特别是对于习惯使用图形界面的用户来说。CentOS Stream 作为 RHEL 的上游版本,虽然稳定可靠,但默认并不提供图形界面的远程访问方案。xrdp 正是解决这一问题的完美方案——它是一个开源的远程桌面协议(RDP)服务器,允许用户通过 Windows 远程桌面连接(mstsc)或其他 RDP 客户端直接连接到 Linux 系统的图形桌面环境。

与 VNC 相比,xrdp 具有以下显著优势:

  • 原生 RDP 支持:无需安装额外的 VNC 客户端,直接使用 Windows 自带的远程桌面工具
  • 更好的性能:RDP 协议在图形渲染和压缩方面更高效
  • 多用户支持:允许多个用户同时连接,每个用户有自己的独立会话
  • 会话管理:支持断开重连,保持工作状态

系统准备与环境检查

确认系统版本与更新状态

首先,确保你的 CentOS Stream 系统是最新的。打开终端,执行以下命令:

# 检查系统版本 cat /etc/centos-release # 更新系统包 sudo dnf update -y # 检查内核版本(建议 3.10 以上) uname -r 

检查网络连接与防火墙配置

远程桌面需要特定的网络端口,确保这些端口是开放的:

# 检查当前防火墙状态 sudo firewall-cmd --state # 查看已开放的端口 sudo firewall-cmd --list-all 

安装 xrdp 与图形桌面环境

安装 EPEL 仓库(如果尚未安装)

xrdp 通常不在 CentOS Stream 的默认仓库中,需要先启用 EPEL(Extra Packages for Enterprise Linux):

# 安装 EPEL 仓库 sudo dnf install epel-release -y # 验证 EPEL 仓库是否启用 sudo dnf repolist 

安装 xrdp 和图形桌面环境

如果你的服务器还没有图形桌面环境,需要一并安装。推荐使用 GNOME 桌面,这是 CentOS Stream 的默认桌面环境:

# 安装 xrdp 和 GNOME 桌面 sudo dnf install xrdp gnome-classic-session gnome-terminal -y # 或者,如果你只需要最小化的图形环境,可以安装 XFCE(更轻量) # sudo dnf install xrdp xfce4-session xfce4-terminal -y 

启动并设置 xrdp 开机自启

# 启动 xrdp 服务 sudo systemctl start xrdp # 设置开机自启 sudo systemctl enable xrdp # 检查服务状态 sudo systemctl status xrdp 

配置 xrdp 与图形桌面环境

配置 GNOME 桌面环境

对于 GNOME 桌面,需要创建一个配置文件,确保 xrdp 能正确启动 GNOME 会话:

# 创建 xrdp 启动脚本 sudo nano /etc/xrdp/startwm.sh 

在文件末尾添加以下内容(注意:确保脚本在 exit 0 之前):

# 配置 GNOME 会话 export GNOME_SHELL_SESSION_MODE=ubuntu export XDG_CURRENT_DESKTOP=GNOME export XDG_CONFIG_DIRS=/etc/xdg/xdg-gnome:/etc/xdg # 启动 GNOME 会话 exec /usr/bin/gnome-session 

配置 XFCE 桌面环境(可选)

如果你选择 XFCE,配置更简单:

# 创建 xrdp 启动脚本 sudo nano /etc/xrdp/startwm.sh 

在文件末尾添加:

# 启动 XFCE 会话 exec startxfce4 

配置 xrdp 会话

编辑 xrdp 配置文件,允许更多并发连接和更好的性能:

# 编辑 xrdp.ini sudo nano /etc/xrdp/xrdp.ini # 在 [Globals] 部分,调整以下参数 max_bpp=32 xrdp8=no crypt_level=low 

防火墙与 SELinux 配置

配置防火墙规则

xrdp 默认使用 3389 端口,需要在防火墙中开放:

# 允许 RDP 端口(3389) sudo firewall-cmd --permanent --add-port=3389/tcp # 或者,更精确地允许服务 sudo firewall-cmd --permanent --add-service=rdp # 重新加载防火墙规则 sudo firewall-cmd --reload # 验证端口是否开放 sudo firewall-cmd --list-ports 

处理 SELinux 问题

如果 SELinux 处于 enforcing 模式,可能会阻止 xrdp 正常工作:

# 检查 SELinux 状态 sestatus # 临时设置为 permissive 模式(用于测试) sudo setenforce 0 # 如果问题解决,可以永久设置为 permissive(不推荐生产环境) # sudo nano /etc/selinux/config # 设置 SELINUX=permissive # 或者,为 xrdp 设置 SELinux 策略(推荐) sudo ausearch -c 'xrdp' --raw | audit2allow -M my-xrdp sudo semodule -i my-xrdp.pp 

用户配置与安全设置

创建专用远程桌面用户(推荐)

为了安全起见,建议创建一个专门用于远程桌面的用户:

# 创建新用户 sudo useradd -m -s /bin/bash rdpuser # 设置密码 sudo passwd rdpuser # 将用户加入 wheel 组(如果需要 sudo 权限) sudo usermod -aG wheel rdpuser 

配置 PAM 会话限制(可选)

限制并发会话数量,防止资源滥用:

# 编辑 PAM 配置 sudo nano /etc/pam.d/xrdp-sesman # 在文件末尾添加(限制每个用户最多 2 个会话) session required pam_limits.so 

然后编辑 limits.conf:

sudo nano /etc/security/limits.conf # 添加以下行 rdpuser hard maxsyslogins 2 rdpuser soft maxsyslogins 2 

启动服务与验证连接

重启相关服务

# 重启 xrdp 服务 sudo systemctl restart xrdp # 检查服务状态 sudo systemctl status xrdp # 检查 xrdp-sesman 服务(会话管理器) sudo systemctl status xrdp-sesman 

验证端口监听

# 检查 3389 端口是否在监听 netstat -tlnp | grep 3389 # 或者使用 ss 命令 ss -tlnp | grep 3389 

从 Windows 客户端连接

  1. 在 Windows 电脑上,按 Win + R,输入 mstsc 并回车
  2. 输入 CentOS Stream 服务器的 IP 地址
  3. 点击“连接”
  4. 在 xrdp 登录界面,选择会话类型(Xorg 或 Xvnc)
  5. 输入用户名和密码
  6. 点击“OK”连接

常见问题排查

问题1:连接后立即断开或黑屏

原因:通常是图形桌面环境配置不正确。

解决方案

# 检查 startwm.sh 文件权限 sudo chmod +x /etc/xrdp/startwm.sh # 检查用户主目录下的 .Xauthority 文件权限 ls -la /home/rdpuser/.Xauthority # 如果权限不对,修复: sudo chown rdpuser:rdpuser /home/rdpuser/.Xauthority 

问题2:无法连接,端口不通

原因:防火墙或 SELinux 阻止。

解决方案

# 检查防火墙 sudo firewall-cmd --list-all # 临时关闭防火墙测试 sudo systemctl stop firewalld # 检查 SELinux sestatus # 如果是 enforcing,临时设置为 permissive sudo setenforce 0 

问题3:xrdp 服务启动失败

原因:端口被占用或配置错误。

解决方案

# 检查端口占用 sudo lsof -i :3389 # 查看日志 sudo journalctl -u xrdp -f # 检查配置文件语法 sudo xrdp -v 

问题4:中文输入法或字体显示问题

解决方案

# 安装中文字体 sudo dnf install google-noto-cjk-fonts -y # 安装输入法框架 sudo dnf install ibus-libpinyin -y # 配置环境变量(在用户 .bashrc 中) echo 'export GTK_IM_MODULE=ibus' >> ~/.bashrc echo 'export QT_IM_MODULE=ibus' >> ~/.bashr echo 'export XMODIFIERS=@im=ibus' >> ~/.bashrc 

高级配置与优化

性能优化配置

对于低带宽网络环境,可以调整 xrdp 配置:

# 编辑 xrdp.ini sudo nano /etc/xrdp/xrdp.ini # 在 [xrdp1] 部分添加或修改 code=10 lib=libxrdp.so ip=127.0.0.1 port=3350 username=ask password=ask # 添加压缩和缓存设置 max_bpp=16 crypt_level=low 

配置 SSL/TLS 加密(增强安全)

# 生成自签名证书 sudo openssl req -x509 -newkey rsa:4096 -keyout /etc/xrdp/key.pem -out /etc/xrdp/cert.pem -days 365 -nodes # 配置 xrdp 使用 SSL sudo nano /etc/xrdp/xrdp.ini # 在 [Globals] 部分添加 certificate=/etc/xrdp/cert.pem key_file=/etc/xrdp/key.pem ssl_protocols=TLSv1.2, TLSv1.3 

多用户并发连接配置

xrdp 默认支持多用户,但需要确保系统资源充足:

# 检查系统资源限制 ulimit -a # 修改系统限制(可选) sudo nano /etc/security/limits.conf # 添加以下行(根据服务器配置调整) * soft nproc 65535 * hard nproc 65535 * soft nofile 65535 * hard nofile 65535 

自定义 xrdp 登录界面

修改登录界面标题和提示:

# 编辑登录界面配置 sudo nano /etc/xrdp/xrdp.ini # 在 [Globals] 部分修改 tcp_nodelay=yes keepalive=30 # 自定义标题 title=CentOS Stream Remote Desktop 

安全加固建议

1. 使用非默认端口

# 修改 xrdp 监听端口 sudo nano /etc/xrdp/xrdp.ini # 在 [Globals] 部分修改 port=3390 # 更新防火墙规则 sudo firewall-cmd --permanent --remove-port=3389/tcp sudo firewall-cmd --permanent --add-port=3390/tcp sudo firewall-cmd --reload 

2. 限制访问 IP

# 使用防火墙限制特定 IP 访问 sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3389" accept' sudo firewall-cmd --permanent --remove-port=3389/tcp sudo firewall-cmd --reload 

3. 使用 fail2ban 防止暴力破解

# 安装 fail2ban sudo dnf install fail2ban -y # 创建 xrdp jail 配置 sudo nano /etc/fail2ban/jail.local # 添加以下内容 [xrdp] enabled = true port = 3389 filter = xrdp logpath = /var/log/xrdp-sesman.log maxretry = 3 bantime = 3600 findtime = 600 # 创建 filter 文件 sudo nano /etc/fail2ban/filter.d/xrdp.conf # 添加 [Definition] failregex = ^.*INFO .+ IP <HOST> login failed for user .*$ ignoreregex = 

4. 定期更新系统

# 设置自动更新(可选) sudo dnf install dnf-automatic -y sudo systemctl enable dnf-automatic.timer sudo systemctl start dnf-automatic.timer 

总结

通过以上步骤,你已经成功在 CentOS Stream 上配置了 xrdp 远程桌面服务。这套方案提供了稳定、安全且高效的远程访问体验。关键要点包括:

  1. 正确安装和配置图形桌面环境:确保 GNOME 或 XFCE 能通过 xrdp 正常启动
  2. 防火墙和 SELinux 配置:这是最常见的问题来源,务必正确配置
  3. 用户管理:创建专用用户并设置适当权限
  4. 安全加固:使用非默认端口、IP 限制和 fail2ban 等工具增强安全性

记住,远程桌面服务暴露在公网时,安全是第一位的。建议始终使用强密码,定期更新系统,并监控日志文件以检测异常活动。对于生产环境,考虑使用 VPN 或跳板机来进一步保护远程访问。

如果在配置过程中遇到任何问题,可以查看日志文件获取详细信息:

  • xrdp 主日志:/var/log/xrdp.log
  • 会话管理器日志:/var/log/xrdp-sesman.log
  • 系统日志:journalctl -u xrdp

祝你配置顺利!