Configuración del servicio VNC en CentOS

Hoy voy a documentar la configuración para activar el servicio VNC en CentOS. Esta guía fue adaptada a partir de un artículo que había redactado para mi blog anterior, en el cual se utilizaba el sistema operativo Red Hat Enterprise Linux 4 U6 como plataforma de prueba, entorno que ha sido reemplazado en este artículo por CentOS debido a su licencia y a su similitud con RHEL.

Este nueva edición del artículo abarca la configuración de dos sesiones VNC para los usuarios root y gabriel. Las sesiones funcionarán de forma independiente a la sesión que se visualiza en un monitor conectado directamente al equipo, ya que para acceder remotamente a esta última se necesita utilizar otra aplicación como x11vnc, de la que probablemente hablaré en otro artículo. Los pasos de esta guían van a continuación.


Instalación del paquete

  1. Antes que nada debemos comprobar que el paquete del servicio VNC llamado vnc-server se encuentra instalado, esto lo podemos hacer utilizando el comando rpmquery:
    [root@testsrv ~]# rpmquery vnc-server
    el paquete vnc-server no está instalado
  2. Si el paquete no se encuentra disponible podemos instalarlo mediante yum como se muestra a continuación:
    [root@testsrv ~]# yum install vnc-server


Configuración de las sesiones VNC

A continuación nos toca configurar las sesiones gráficas VNC para los usuarios gabriel y root, asignándoles las sesiones 1 y 2 respectivamente.
  1. Para habilitar la sesión 1 destinada al usuario gabriel nos tenemos que conectar con ese usuario y ejecutar el comando vncserver :1 como se muestra a continuación:
    [root@testsrv ~]# su - gabriel
    [gabriel@testsrv ~]$ vncserver :1


    You will require a password to access your desktops.

    Password:
    Verify:

    xauth: creating new authority file /home/gabriel/.Xauthority
    xauth: (stdin):1: bad display name "testsrv.gknet.local:1" in "add" command

    New 'testsrv.gknet.local:1 (gabriel)' desktop is testsrv.gknet.local:1

    Creating default startup script /home/gabriel/.vnc/xstartup
    Starting applications specified in /home/gabriel/.vnc/xstartup
    Log file is /home/gabriel/.vnc/testsrv.gknet.local:1.log

    [gabriel@testsrv ~]$
    Si es la primera vez que ejecutamos el comando vncserver :1, este nos pedirá que registremos la contraseña que deseamos usar para acceder remotamente al entorno de ese usuario.

  2. Para el usuario root repetimos los mismos pasos pero sustituyendo el número de sesión:
    [gabriel@testsrv ~]$ exit
    [root@testsrv ~]# vncserver :2
  3. Luego de hacer esto ya podríamos conectarnos desde nuestros clientes VNC, pero nos aparecerá un escritorio liviano muy sencillo. Si queremos que aparezca el mismo escritorio que usamos de forma local (gnome, kde, etc.) tenemos que realizar unas pequeñas modificaciones en el archivo xstartup que se encuentra en el directorio .vnc del HOME de cada usuario. En primer lugar realizamos una copia de seguridad del archivo correspondiente al usuario gabriel, luego lo editamos...
    [root@testsrv ~]# cp /home/gabriel/.vnc/xstartup /home/gabriel/.vnc/xstartup.orig
    [root@testsrv ~]# vi /home/gabriel/.vnc/xstartup

    y reemplazamos todo su contenido por lo que sigue a continuación:
    #!/bin/sh
    unset SESSION_MANAGER
    exec /etc/X11/xinit/xinitrc
  4. El mismo paso tenemos que realizar con el archivo del usuario root, copia de seguridad y edición del archivo:
    [root@testsrv ~]# cp /root/.vnc/xstartup /root/.vnc/xstartup.orig
    [root@testsrv ~]# vi /root/.vnc/xstartup

    y le colocamos el mismo contenido que el que especificamos en el punto anterior.

  5. Para que la nueva configuración esté disponible tenemos que finalizar la ejecución de las sesiones VNC creadas anteriormente que se encuentran en plena ejecución (hay un proceso por cada usuario que tenga una sesión VNC activa) y volver a iniciar cada sesión con los siguientes comandos:
    [root@testsrv ~]# su - gabriel
    [gabriel@testsrv ~]$ vncserver -kill :1
    [gabriel@testsrv ~]$ vncserver :1
    [gabriel@testsrv ~]$ exit
    [root@testsrv ~]# vncserver -kill :2
    [root@testsrv ~]# vncserver :2

  6. El siguiente paso consiste en habilitar los puertos TCP 5901 y 5902 para la sesión 1 y 2 respectivamente en el firewall de CentOS, para ello editamos el archivo /etc/sysconfig/iptables,
    [root@testsrv ~]# vi /etc/sysconfig/iptables
    y le agregamos la directiva resaltada en la línea 11...
    # Firewall configuration written by system-config-firewall
    # Manual customization of this file is not recommended.

    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 5901:5902 -j ACCEPT
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT
  7. Guardamos los cambios y reiniciamos el servicio de firewall con el siguiente comando:
    [root@testsrv ~]# service iptables restart
    iptables: Guardando las reglas del cortafuegos: [ OK ]
    iptables: Poniendo las cadenas de la política ACCEPT: filte[ OK ]
    iptables: Descargando módulos: [ OK ]
    iptables: Aplicando reglas del cortafuegos: [ OK ]
    [root@testsrv ~]#
  8. Con esta configuración ya deberíamos poder tener acceso a las sesiones de ambos usuarios, para acceder a la sesión 1 correspondiente al usuario gabriel tendremos que colocar en nuestra aplicación cliente de VNC la dirección con el formato ip_servidor:1. Para acceder al entorno correspondiente al usuario root tendremos que reemplazar el indicador de sesión 1 por el 2 quedando como sigue:
    ip_servidor:2
    Luego deberíamos introducir la contraseña y con eso ya tendría que funcionar.

  9. Si con las configuraciones anteriores el servicio aún sigue sin funcionar se podría probar desactivar el SELinux, siendo responsabilidad del administrador evaluar si esto pone en riesgo o no la seguridad del servidor. Para ello editamos el archivo /etc/selinux/config,
    [root@testsrv ~]# vi /etc/selinux/config
    y le configuramos la directiva SELINUX con el valor disabled:
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    # enforcing - SELinux security policy is enforced.
    # permissive - SELinux prints warnings instead of enforcing.
    # disabled - No SELinux policy is loaded.

    SELINUX=disabled
    # SELINUXTYPE= can take one of these two values:
    # targeted - Targeted processes are protected,
    # mls - Multi Level Security protection.

    SELINUXTYPE=targeted
    Como los cambios anteriores solo toman efecto luego de reiniciar el sistema operativo, podemos parar el SELinux en el entorno de ejecución actual con el siguiente comando:
    [root@testsrv ~]# setenforce 0
    O bien para asegurar la partida, reiniciar el servidor.


Configuración del servicio VNC

Hasta aquí solo hemos configurado y probado las sesiones VNC de cada usuario, ahora pasamos a configurar el servicio "standalone" VNC en si.
  1. Lo primero es especificarle al servicio VNC que sesiones de las configuradas anteriormente serán gestionadas por él, para ello editamos el archivo /etc/sysconfig/vncservers..
    [root@testsrv ~]# vi /etc/sysconfig/vncservers
    y agregamos bien al final la siguiente línea:
    VNCSERVERS="1:gabriel 2:root"
  2. Configuramos los niveles de ejecución para que el servicio VNC se inicie automáticamente con el próximo arranque del sistema operativo:
    [root@testsrv ~]# chkconfig --level 345 vncserver on
  3. Paramos los procesos de las sesiones VNC arrancadas independientemente si es que aún se encuentran activas.
    [root@testsrv ~]# su - gabriel
    [gabriel@testsrv ~]$ vncserver -kill :1
    [gabriel@testsrv ~]$ exit
    [root@testsrv ~]# vncserver -kill :2

  4. Y finalmente arrancamos el servicio:
    [root@testsrv ~]# service vncserver start
    Y ya está, eso es todo..


Detalles a tener en cuenta

  • Para cambiar la contraseña de acceso VNC de un usuario, por ejemplo gabriel, debemos conectarnos con el mencionado usuario y luego ejecutar el comando vncpasswd en la línea de comandos.
    [gabriel@testsrv ~]$ vncpasswd
    Password:
    Verify:
    [gabriel@testsrv ~]$
  • En CentOS no he tenido problemas, pero en RHEL 4 U6 aveces se presentaron inconvenientes con el servicio VNC durante el arranque del sistema operativo. Esto se debía a que los archivos temporales de las sesiones VNC ubicadas en el directorio /tmp/.X11-unix/ se quedaban bloqueados debido a un apagado incorrecto. La solución a este inconveniente era borrar los archivos temporales:
    [root@testsrv ~]# rm /tmp/.X11-unix/X1
    [root@testsrv ~]# rm /tmp/.X11-unix/X2

    y reiniciar el servicio VNC nuevamente.
    [root@testsrv ~]# service vncservice restart


Capturas de pantalla

A continuación les dejo con dos capturas de pantalla correspondientes a las dos sesiones VNC configuradas anteriormente.
 
 

Comentarios

  1. El unico articulo que realmente me sirvio para configurar correcta y facilmente el vncserver y las conecciones desde vnc cliente. Excelente!! Gracias!

    ResponderEliminar
    Respuestas
    1. Hola ominvest, gracias por el comentario, de hecho ni me acordaba de este artículo.

      Eliminar

Publicar un comentario