RHEL/CentOS 7에서 VNC server 설치
RHEL7 VNC Server 설정법을 설명합니다.
VNC user로 root, foobar 계정으로 세팅하는 법을 예로 들겠습니다.
과정 중에 프롬프트 표시가 "#", "$"의 차이가 있음에 유의하여 진행합니다.
1, 패키지 설치 & 시스템 방화벽 설정
# yum -y install tigervnc-server tigervnc
# firewall-cmd --permanent --zone=public --add-port 5901/tcp
# firewall-cmd --permanent --zone=public --add-port 5902/tcp
※ firewalld가 disabled 된 경우 skip
서버<->클라이언트 간 TCP 5901(root용), 5902(foobar용) 포트가 오픈되어야 합니다.
root 이외의 계정 n개를 vnc server 설정한다면 TCP 5901~(5901+n) 범위의 포트를 시스템 또는 네트워크 방화벽 open하여야 합니다.
2. VNC 액세스를 할 시스템 계정을 위한 VNC user 계정 생성 및 패스워드 설정
# useradd foobar
# passwd foobar
3. vncpassword 설정
3.1. root의 vncpassword 설정
# vncpasswd <-- root의 패스워드와는 달라도 상관 없습니다.
3.2. foobar 시스템 계정의 vncpassword 설정
# su - foobar
$ vncpasswd <-- 시스템 계정(foobar)의 패스워드와는 달라도 상관 없습니다.
4. foobar의 xtartup 파일 설정 및 퍼미션 변경
$ vim .vnc/xstartup
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec /etc/X11/xinit/xinitrc
$ chmod 755 .vnc/xstartup
5. VNC user를 위해 original VNC config 파일을 copy & edit
# cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service <-- root용
# cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:2.service <-- foobar용
# vim /etc/systemd/system/vncserver@:1.service
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i -geometry 1280x1024"
PIDFile=/root/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
# vim /etc/systemd/system/vncserver@:2.service
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/sbin/runuser -l foobar -c "/usr/bin/vncserver %i -geometry 1280x1024"
PIDFile=/home/foobar/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
6. 설정을 reload
# systemctl daemon-reload
7. vnc service를 enable & start
# systemctl enable vncserver@:1.service
# systemctl enable vncserver@:2.service
# systemctl start vncserver@:1.service
# systemctl start vncserver@:2.service
방화벽 포트 오픈 반드시 필요
[root@localhost firewalld]# firewall-cmd --permanent --zone=public --add-port 5902/tcp
success
[root@localhost firewalld]# firewall-cmd --permanent --zone=public --add-port 5901/tcp
success
[root@localhost zones]# systemctl restart firewalld
8. vnc service에 의한 포트 listen 여부 확인(tcp 5901, 5902, 6001, 6002)
[root@localhost ~]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 2736/Xvnc
tcp 0 0 0.0.0.0:5902 0.0.0.0:* LISTEN 2924/Xvnc
tcp 0 0 0.0.0.0:6001 0.0.0.0:* LISTEN 2736/Xvnc
tcp 0 0 0.0.0.0:6002 0.0.0.0:* LISTEN 2924/Xvnc
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 792/sshd
tcp6 0 0 :::6001 :::* LISTEN 2736/Xvnc
tcp6 0 0 :::6002 :::* LISTEN 2924/Xvnc
tcp6 0 0 :::22 :::* LISTEN 792/sshd
[root@localhost ~]#
8. vnc 클라이언트로 접속
root -> IP ADDRESS:5901
foobar -> IP ADDRESS:5902