Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

RHEL/CentOS 7/8 VNC Server 完整部署指南:從安裝到防火牆、SELinux、多用戶隔離實戰

編輯:Linux 教學

VNC 架構基礎

VNC(Virtual Network Computing)採用 Client-Server 模式:

  • VNC Server:在 Linux 上運行,為每個用戶建立獨立的 X 會話(桌面環境),監聽 5900 + Display號 埠(如 :1 → 5901)。
  • VNC Viewer:客戶端連接工具(Windows/Linux/Mac 均有),透過 RFB 協議呈現遠端桌面。
  • Web 瀏覽器訪問:可選啟用內建 HTTP 服務,監聽 5800 + Display號 埠,支援 Java Applet(現代瀏覽器已棄用,建議改用 noVNC/WebSocket 方案)。

環境準備

# 1. 確認桌面環境已安裝(GNOME/KDE/XFCE 任一)
dnf groupinstall "Server with GUI" -y   # CentOS/RHEL 8
yum groupinstall "GNOME Desktop" -y     # CentOS/RHEL 7

# 2. 安裝 VNC 套件
dnf install tigervnc-server -y          # CentOS/RHEL 8
yum install tigervnc-server -y          # CentOS/RHEL 7

# 3. 關閉預設圖形化啟動(可選,純遠端桌面場景)
systemctl set-default multi-user.target

多用戶配置核心:/etc/tigervnc/vncserver.users

現代 TigerVNC(CentOS 7+)採用 systemd 實例化服務,拋棄舊版 /etc/sysconfig/vncservers。每個用戶對應一個獨立服務實例 vncserver@:<display>.service。

  1. 建立用戶與映射關係
    # 建立業務用戶(非 root)
    useradd -m -s /bin/bash vncuser
    passwd vncuser
    
    # 編輯映射檔:Display 編號 : 用戶名
    vi /etc/tigervnc/vncserver.users
    # 內容範例:
    :1=vncuser
    :2=developer
    :3=admin
  2. 為每個用戶設定 VNC 密碼
    # 切換到目標用戶
    su - vncuser
    vncpasswd
    # 輸入兩次密碼(僅存儲加密雜湊),會建立 ~/.vnc/passwd
    
    # 可選:設定唯讀密碼(僅觀看,不可操作)
    vncpasswd -r
    # 輸入唯讀密碼
  3. 自訂桌面啟動腳本 ~/.vnc/config(現代方式,取代 xstartup)
    # 以 vncuser 身份編輯
    vi ~/.vnc/config
    # 內容範例:
    session=gnome
    geometry=1920x1080
    depth=24
    dpi=96
    localhost=false   # 允許非本地連接(配合 SSH 隧道建議保持 true)
    alwaysshared=true # 允許多客戶端同時連接同一桌面

    註:若需相容舊版,可保留 ~/.vnc/xstartup 並設定執行權限,內容為 exec /etc/X11/xinit/xinitrc 或 gnome-session &。

  4. 啟動並設定開機自啟
    # 啟動 display :1 對應的服務
    systemctl start vncserver@:1.service
    systemctl enable vncserver@:1.service
    
    # 檢查狀態
    systemctl status vncserver@:1.service
    
    # 查看監聽埠
    ss -tlnp | grep 5901

防火牆與 SELinux 開放

層面指令說明
firewalldfirewall-cmd --permanent --add-port=5901-5903/tcp
firewall-cmd --reload
開放 5901~5903 埠(對應 :1~:3)
iptables/nftablesiptables -A INPUT -p tcp --dport 5901:5903 -j ACCEPT傳統防火牆規則
SELinuxsetsebool -P allow_vnc_server on允許 VNC Server 讀取家目錄、連接網路
SELinux 家目錄標籤restorecon -R -v /home/vncuser/.vnc修正 ~/.vnc 目錄安全上下文

安全強化:SSH 隧道加密傳輸

VNC 協議明文傳輸(密碼雖加密,但畫面數據裸奔),生產環境必須配合 SSH 隧道:

# 客戶端建立隧道(本地 5901 轉發到遠端 5901)
ssh -L 5901:localhost:5901 vncuser@server_ip -N -f

# VNC Viewer 連接
vncviewer localhost:5901
# 或
vncviewer localhost:1

此時防火牆無需開放 5901,僅開放 SSH 埠(22)即可,極大降低攻擊面。

常見問題排查

現象可能原因解決方案
連接後灰屏/只有 X 終端機桌面環境未啟動、xstartup/config 錯誤確認 session=gnome、安裝 gnome-session、檢查 ~/.vnc/config 語法
Authentication failed密碼錯誤、passwd 檔權限錯誤重新 vncpasswd、確認 chmod 600 ~/.vnc/passwd
Connection refused服務未啟動、防火牆阻擋、localhost 綁定systemctl status vncserver@:1、檢查防火牆、設定 localhost=false
藍屏/花屏/效能差色深不匹配、網路延遲高調整 depth=24、啟用壓縮編碼、使用 SSH 隧道+壓縮 ssh -C
Root 用戶無法啟動systemd 限制、安全策略強烈建議勿用 root 運行 VNC,改用普通用戶 + sudo 權限

進階:systemd 覆蓋配置(自訂參數)

# 建立覆蓋目錄
mkdir -p /etc/systemd/system/vncserver@:1.service.d/

# 編輯覆蓋檔
vi /etc/systemd/system/vncserver@:1.service.d/override.conf
[Service]
# 限制記憶體/CPU(防止單用戶佔盡資源)
MemoryLimit=2G
CPUQuota=200%
# 環境變數
Environment="LANG=zh_TW.UTF-8"
Environment="XDG_RUNTIME_DIR=/run/user/1000"
# 重啟策略
Restart=on-failure
RestartSec=5

重新載入生效:systemctl daemon-reload && systemctl restart vncserver@:1

總結

現代 VNC 部署核心在於:systemd 實例化管理多用戶、SSH 隧道加密傳輸、SELinux/防火牆最小權限開放。拋棄舊版 /etc/sysconfig/vncservers 手動配置模式,擁抱聲明式配置,才能構建安全、可維運、資源可控的遠端桌面服務。

Copyright © Windows教程網 All Rights Reserved