要让RealVNC只允许特定人员、在特定时间、从特定IP访问,必须编辑服务端配置文件(如~/.vnc/config设localhost=yes)、用ufw或iptables精准放行IP段、修改xstartup添加-localhost no参数;创建nologin专用用户并独立生成vncpasswd;在RealVNC管理界面手动分配策略组绑定用户;Enterprise版可设时间策略,Free版需用systemd timer定时启停服务。

要让RealVNC只允许特定人员、在特定时间、从特定IP访问,必须绕过默认的“全开”配置逻辑——直接编辑服务端配置文件、启用策略组、绑定系统级用户权限,三者缺一不可。
限制访问IP地址
方法一:通过vncserver配置参数强制绑定本地回环
编辑用户级配置文件:~/.vnc/config,在末尾添加一行:localhost=yes。这会让RealVNC仅响应127.0.0.1发起的连接,外部网络请求全部被拒绝。注意:该设置仅对virtual模式生效,x11模式下需配合iptables或ufw使用。
方法二:用系统防火墙精准放行指定IP段
运行以下命令,仅允许192.168.10.0/24网段访问5901端口:sudo ufw allow from 192.168.10.0/24 to any port 5901 proto tcp。执行后必须运行sudo ufw enable激活规则,否则配置不生效。
方法三:修改xstartup启动脚本注入-rfbport参数
打开~/.vnc/xstartup,找到exec开头的行(如exec /usr/bin/xvnc),在其后追加-localhost no -rfbport 5901。关键点在于-localhost no必须显式声明,否则RealVNC 7.6+版本默认启用localhost-only保护,即使你没写也会自动拦截外网请求。
精细化用户权限控制
第一步:创建专用系统用户并禁用shell登录
运行sudo adduser --shell /usr/sbin/nologin --gecos "" vnc-operator,该用户无法通过SSH或终端登录,仅用于VNC会话隔离。不要跳过--shell /usr/sbin/nologin,否则用户可能被提权利用。
第二步:为每个VNC用户单独生成密码文件
切换到目标用户(如sudo -u vnc-operator bash),执行vncpasswd生成~/.vnc/passwd。RealVNC不会读取系统密码,必须为每个用户独立设置,且密码长度不得少于6位,否则服务启动失败。
第三步:在RealVNC管理界面中绑定用户与策略组
登录https://manage.realvnc.com → Devices → 选择目标设备 → Policies → Assign Policy → 新建策略组。勾选“View only”或“Full control”后,点击“Add users”,输入系统用户名(如vnc-operator)。【策略组必须手动分配,否则用户始终继承默认的Administrator权限】
设置访问时段限制
方法1:使用RealVNC Enterprise版内置时间策略
进入https://manage.realvnc.com → Policies → 创建新策略 → Time Restrictions → 启用“Restrict access to these hours” → 设置周一至周五 08:00–18:00。该策略实时同步至客户端,非工作时间连接请求直接返回“Access denied”。
方法2:Linux系统级定时启停服务(适用于Home/Free版)
创建两个systemd timer单元:/etc/systemd/system/vnc-start.timer和vnc-stop.timer,分别触发vnc-start.service与vnc-stop.service。其中stop服务内容为ExecStart=/bin/sh -c 'vncserver -kill :1 2>/dev/null || true'。启用timer后,RealVNC服务将在设定时间自动关闭,无需人工干预。

















