Ubuntu 上 TigerVNC 的权限设置要点
一 用户与认证权限
sudo adduser vncuser。随后切换到该用户设置 VNC 口令:vncpasswd(仅设置该用户的口令,不要用 sudo 执行,否则会写入 root 的口令文件)。口令文件位于 ~/.vnc/passwd。如使用 systemd 服务,服务单元中的 User= 也应设为该用户。为进一步提升隔离,可创建 vncusers 组并将用户加入:sudo usermod -aG vncusers vncuser,服务单元中可加 Group=vncusers。二 文件与目录权限
chmod 700 ~/.vnc、chmod 755 ~/.vnc/xstartup。如使用 systemd 服务,服务单元中指定 User= 与 WorkingDirectory= 可避免权限错乱;必要时显式设置 Group=。上述做法可避免“无法写入 pid/日志”“脚本无法执行”等常见权限问题。三 桌面会话与访问控制
#!/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 时选择设置“仅查看”密码,客户端可用只读口令连接,实现同屏不同权限控制。四 网络安全与端口权限
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 服务与最小权限示例
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 隧道。