在 CentOS 上配置 VNC 权限,通常涉及用户权限、访问权限、防火墙、SELinux、以及 VNC 自身认证几个方面。下面按常见场景给你说明。
VNC 一般是按用户启动的,每个用户一个 VNC 服务。
# 假设给用户 test 配置
su - test
vncpasswd
设置的是 VNC 登录密码(不是系统密码)。
编辑(CentOS 6/7):
/etc/sysconfig/vncservers
示例:
VNCSERVERS="1:test"
VNCSERVERARGS[1]="-geometry 1024x768"
CentOS 8 / Rocky / Alma(systemd):
cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
然后修改:
ExecStart=/usr/bin/vncserver -geometry 1024x768 :1
User=test
firewall-cmd --add-port=5901/tcp --permanent
firewall-cmd --reload
5900 + 显示号(:1 → 5901)
否则可能连不上或黑屏:
setsebool -P vnc_enabled on
如还报错:
ausearch -m avc -ts recent
按提示修正。
vncserver :1 -localhost
然后通过 SSH 隧道:
ssh -L 5901:localhost:5901 user@centos
如果是 X11 + VNC:
xhost +192.168.1.100
或在 ~/.vnc/config:
# 仅允许特定网段
默认 不推荐 root 直接 VNC,如必须:
vncpasswd
并修改服务文件 User=root
⚠️ 安全风险极高
| 问题 | 原因 |
|---|---|
| 黑屏 | SELinux / 桌面环境缺失 |
| 连不上 | 防火墙 / 服务未启动 |
| 拒绝访问 | vncpasswd 未设置 |
| 无权限启动 | 非 root 无 systemd 权限 |
yum install tigervnc-server
useradd test
su - test
vncpasswd
vncserver :1
firewall-cmd --add-port=5901/tcp --permanent
firewall-cmd --reload
setsebool -P vnc_enabled on
如果你能说明:
我可以给你精确命令。