温馨提示×

tigervnc在ubuntu上的权限设置

小樊
41
2026-01-01 13:35:06
栏目: 智能运维

Ubuntu 上 TigerVNC 的权限设置要点

一 用户与认证权限

  • 建议为 VNC 创建专用系统用户,避免使用 root 直接运行 VNC,降低风险。示例:sudo adduser vncuser。随后切换到该用户设置 VNC 口令:vncpasswd(仅设置该用户的口令,不要用 sudo 执行,否则会写入 root 的口令文件)。口令文件位于 ~/.vnc/passwd。如使用 systemd 服务,服务单元中的 User= 也应设为该用户。为进一步提升隔离,可创建 vncusers 组并将用户加入:sudo usermod -aG vncusers vncuser,服务单元中可加 Group=vncusers

二 文件与目录权限

  • 确保 ~/.vnc 目录及启动脚本 ~/.vnc/xstartup 的属主与权限正确:属主应为对应用户,权限建议为 700/755(目录)与 755/700(脚本,至少可执行)。示例:chmod 700 ~/.vncchmod 755 ~/.vnc/xstartup。如使用 systemd 服务,服务单元中指定 User=WorkingDirectory= 可避免权限错乱;必要时显式设置 Group=。上述做法可避免“无法写入 pid/日志”“脚本无法执行”等常见权限问题。

三 桌面会话与访问控制

  • 桌面环境选择:在 Ubuntu 22.04 上,GNOME 与 TigerVNC 原生兼容性较差,常见做法是改用 XfceGNOME Flashback(Metacity)。示例 xstartup(Xfce):#!/bin/sh + unset SESSION_MANAGER + unset DBUS_SESSION_BUS_ADDRESS + exec startxfce4;GNOME Flashback 示例:#!/bin/sh + export XKL_XMODMAP_DISABLE=1 + export XDG_CURRENT_DESKTOP="GNOME-Flashback:GNOME" + export XDG_MENU_PREFIX="gnome-flashback-" + gnome-session --session=gnome-flashback-metacity --disable-acceleration-check,并确保脚本可执行。会话权限方面,TigerVNC 支持设置**只读(view-only)**口令:执行 vncpasswd 时选择设置“仅查看”密码,客户端可用只读口令连接,实现同屏不同权限控制。

四 网络安全与端口权限

  • 端口与防火墙:显示号 :1 对应端口 5901,:2 对应 5902,以此类推。若启用 UFW,按需放行:sudo ufw allow 5901/tcp;更安全的做法是仅允许受信网段:sudo ufw allow from 192.168.1.0/24 to any port 5901。如使用云平台安全组,同样仅放通必要来源 IP 与端口。加密与访问控制:优先通过 SSH 隧道访问 VNC(本地执行 ssh -L 5901:localhost:5901 user@server,客户端连接 localhost:5901),避免明文暴露 5901。如使用 Ubuntu 18.04 的“屏幕共享”(基于 VNC 协议),可在 dconf-editor 中调整 org.gnome.desktop.remote-access 项(如关闭 require-encryption)以适配部分客户端,但更推荐保持加密并通过 SSH 隧道访问。

五 systemd 服务与最小权限示例

  • 创建服务文件 /etc/systemd/system/vncserver@.service,为指定用户(示例为 vncuser)以最小权限运行。示例要点:设置 User=vncuserGroup=vncusers(可选)、WorkingDirectory=/home/vncuserPIDFile=/home/vncuser/.vnc/%H%i.pid;启动前清理旧实例:ExecStartPre=/usr/bin/vncserver -kill :%i >/dev/null 2>&1 || :;按需开启共享与会话:ExecStart=/usr/bin/vncserver :%i -geometry 1920x1080 -alwaysshared -localhost no;停止:ExecStop=/usr/bin/vncserver -kill :%i。启用服务:sudo systemctl daemon-reload && sudo systemctl enable --now vncserver@1.service。如需仅本地访问,可将 -localhost no 改为 -localhost yes 并配合 SSH 隧道。

0