本文来自 ChatGPT 问答,本人仅对文章的部分内容进行了删减、补充、调整。
0.前言
在 Linux 上安装远程桌面的方案很多,如:VNC、RDP、类向日葵的软件,但最通用的方案还是 VNC。VNC 的实现项目很多,其中 TigerVNC 在 GitHub 上的星星最多,于是我便选择它作为本次的实验对象。
以下便是由 ChatGPT 整理好的一套 在 Ubuntu Server 上安装 TigerVNC + XFCE 桌面环境 的标准流程:
目标架构:
text
Windows 客户端
|
| VNC Viewer
|
↓
Ubuntu Server
|
├── TigerVNC Server
|
└── XFCE Desktop
适用于:
- Ubuntu Server 22.04 / 24.04
- 无 GUI 的纯服务器环境
- 运维远程桌面场景
软件架构:
text
/etc/tigervnc/
│
├── vncserver-config-defaults
│ |
│ └── 全局 XFCE 配置
│
└── vncserver.users
|
├── :1=user1
├── :2=user2
└── :3=user3
/home/user1/
└── .vnc/
└── passwd
└── config 用户 XFCE 配置
/home/user2/
└── .vnc/
└── passwd
└── config 用户 XFCE 配置
1. 更新软件源
bash
sudo apt update
2. 安装 XFCE 桌面环境
Ubuntu Server 默认没有桌面,需要安装。
推荐 XFCE(轻量):
bash
sudo apt install xfce4 xfce4-goodies -y
注:仅安装 xfce4 而不安装显示管理器的话,在本机上是无法正常登录的,因此我建议将
sudo apt install gdm3也安装上。但如果没有本地登录的需求,仅仅只是远程登录的话,那是否还需要安装显示管理器?这个未实验,情况不明。【各种桌面环境项目的示例,可参考此文章。】
检查:
bash
which startxfce4
正常:
text
/usr/bin/startxfce4
3. 安装 TigerVNC Server
Ubuntu 官方源:
bash
sudo apt install tigervnc-standalone-server tigervnc-tools -y
确认版本:
bash
vncserver --version
例如:
text
TigerVNC server version 1.13.1
4. 创建 VNC 用户密码
切换到你的普通用户:
例如:
bash
su bot007
执行:
bash
vncpasswd
输入密码。【注:这个密码是登录 vnc 时的独立密码,和用户登录 ssh 时的密码不是一回事。】
生成:
bash
~/.vnc/passwd
检查:
bash
ls -la ~/.vnc/
应该看到:
text
passwd
5. 配置"用户-窗口"映射
Ubuntu 新版 TigerVNC 使用:
text
/etc/tigervnc/vncserver.users
创建:
bash
sudo vim /etc/tigervnc/vncserver.users
加入:
ini
:1=bot007
含义:
text
显示编号 :1
|
用户 bot007
对应端口:
text
5900 + 1 = 5901
6. 配置全局默认参数
编辑:
bash
sudo vim /etc/tigervnc/vncserver-config-defaults
Ubuntu 的 TigerVNC 1.13 通常使用 Perl 格式:
perl
$session="xfce"; # 控制远程桌面时使用哪个桌面环境
$geometry="1920x1080";
$localhost="no"; # 控制 VNC 服务是否只能在本机开放
$alwaysshared="yes"; # 打开桌面会话共享功能,使得同一个账户的 VNC 画面可以被实时显示给不同的连接客户端。
注意:每行末尾必须有封号。
6. 配置用户默认参数【可选】
注:用户默认参数和全局默认参数是类似的,但用户的优先级要高于全局。
编辑:
bash
vim ~/.vnc/config
加入:
perl
localhost=no
geometry=1920x1080
session=xfce
alwaysshared
以上 ~/.vnc/config 的效果和 /etc/tigervnc/vncserver-config-defaults 的效果是一样的。
注:此外,如果还想控制远程桌面的会话被启动时,还可以一同去启动其它应用,那么可以自定义 xstartup 脚本,例如:
bashcat ~/.vnc/xstartup #!/bin/bash unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS #exec gnome-session exec startxfce4 exec firefox如果你想尝试 GNOME 桌面环境,则需要安装
sudo apt install ubuntu-desktop gnome-session gnome-shell -y,然后将上面注释的 gnome-session 那行取消注释即可,亦或者直接在 参数配置文件中进行指定。
7. 启动 systemd 服务
启动:
bash
sudo systemctl enable tigervncserver@:1
sudo systemctl start tigervncserver@:1
查看:
bash
sudo systemctl status tigervncserver@:1
正常:
text
Active: active (running)
8. 测试连接
查看:
bash
vncserver -list
例如:
text
TigerVNC server sessions:
X DISPLAY # RFB PORT
:1 5901
然后在 Windows 安装 TigerVNC Viewer 连接:
TigerVNC 官方客户端下载链接,其中 tigervnc-X.Y.Z.exe 是 VNC 客户端安装版,vncviewer-X.Y.Z.exe 是 VNC 客户端免装版,tigervnc-winvnc-X.Y.Z.exe 是 VNC 服务端的 Windows 安装包。
text
服务器IP:5901
例如:
text
192.168.1.100:5901
输入 VNC 密码。
正常应该进入:
text
XFCE Desktop
9. 新增用户
新增 VNC 用户,需要先在 Linux 系统中创建该用户,然后 su 切换到该用户的 shell 环境,然后按照步骤4、5、7 的动作即可。总的操作流程如下:
bash
#(1)新增用户
sudo adduser test
#(2)切换到新用户的 shell 环境
su test
#(3)为新用户设置 vnc 登录密码
vncpasswd
#(4)为新用户分配 VNC 窗口
cat /etc/tigervnc/vncserver.users
:1=ubuntu
:2=test
#(5)启动专属于新用户的 VNC 桌面服务
sudo systemctl start tigervncserver@:2
#(6)VNC 客户端连接 ip:5902
10. 安全建议(生产环境)
由于 VNC 的登录只验证 VNC 密码,不需要经过 shell 环境的账户密码登录,因此只要 VNC 密码正确,登录者便可以直接进入到机器的桌面环境。这对于攻击者来说,通过密码爆破非常容易做到。因此在公网环境下,非常不推荐暴露 tcp/590X 端口,更推荐通过 SSH 建立本地隧道。然后通过 VNC 客户端去连接。具体做法就是:
VNC 服务器保持:
perl
$localhost="yes";
VNC 客户端处先建立 ssh 隧道:
bash
ssh -L 5901:localhost:5901 user@server-ip
然后再通过 VNC 客户端连接本地的隧道端口:
text
localhost:5901
如此一来,一样可以对 inux 发起远程桌面连接,而且在认证上还加了两道保险:(1)ssh 隧道的建立需要验证 Linux 系统的账户密码。(2)连接VNC 需要验证 VNC 密码。