Algo de Linux: 2017

jueves, 20 de abril de 2017

Establecer la impresora por defecto mediante comandos

Si queremos ver qué impresoras tenemos configuradas en un equipo desde la línea de comandos, no tenemos más que ejecutar:
# lpstat -p
Ahora bien, si lo que nos interesa es saber cuál es la impresora predeterminada, lo que tenemos que usar es el parámetro -d:
# lpstat -d
Y si lo que queremos es establecer una impresora como predeterminada haremos uso de lpadmin:
# lpadmin -d "nombre-impresora"
Sabiendo ésto, podemos configurar fácilmente una impresora como pretederminada mediante puppet. Por ejemplo:
exec { "lpadmin -d Copiadora_BN":
       unless => "lpstat -d | grep Copiadora_BN"
}
Publicado por primera vez en http://enavas.blogspot.com.es

Configuración para que Arduino IDE contacte con la placa Arduino

En febrero preparé un paquete que nos permite instalar Arduino IDE en nuestros equipos. Si tenéis problemas para que el entorno de desarrollo se comunique con la placa Arduino, probablemente sea porque no habéis añadido vuestro usuario al grupo dialout. La forma más sencilla de que todos nuestros usuarios tengan dicho grupo es añadirlo al archivo /etc/security/group.conf:
*;*;*;Al0000-2400;audio,cdrom,floppy,plugdev,video,lp,lpadmin,netdev,games,fuse,dialout
Publicado por primera vez en http://enavas.blogspot.com.es

Utilizar dig para testear resolución de nombres

dig es una herramienta muy útil para testear resolución de nombres.

Esta herramienta se encuentra disponible en el paquete dnsutils. Si lo no tenéis instalado, podéis hacerlo fácilmente desde los repositorios:
# apt-get install dnsutils
Una vez instalado, podéis hacer una consulta sobre un nombre de host:
# dig a25-pro.valledeljerte3
O sobre una dirección IP:
# dig -x 172.19.144.106
Si tenéis varios servidores DNS y queréis consultar a uno en concreto:
# dig @ip-servidor-dns a25-pro.valledeljerte3
Por ejemplo:
# dig @172.19.144.4 a25-pro.valledeljerte3
Publicado por primera vez en http://enavas.blogspot.com.es

Optimización de resolución de nombres en clientes

Como ya he comentado en varias ocasiones, en mi centro tengo configurados dos servidores de nombres en la vlan por defecto:
search valledeljerte3
nameserver 172.x.y.3
nameserver 172.x.y.2
Si configuro los clientes para que utilicen solamente mis dos servidores de nombres, sería interesante añadir la opción "options rotate" al fichero /etc/resolv.conf de los clientes para repartir la carga de las consultas entre los diferentes servidores DNS.

Por otra parte, también al tener dos servidores, sería interesante reducir el timeout de las consultas DNS, de manera que si un servidor de nombres no responde, se tarde menos en consultar al siguiente. Para ello, utilizaremos la opción timeout, reduciendo por ejemplo el tiempo de espera a 1 segundo: "options timeout:1"

Por último, también sería útil reducir el número de intentos por servidor. Por ejemplo: "options attempts:1".

Nuestros clientes Ubuntu tienen instalado el paquete resolvconf. Así que podemos aplicar dichas opciones simplemente añadiendo la línea siguiente al fichero de configuración /etc/resolvconf/resolv.conf.d/base:
options timeout:1 attempts:1 rotate
Y ejecutar el siguiente comando para actualizar el fichero /etc/resolv.conf:
# resolvconf -u
Una vez hecho ésto, podemos comprobar que la línea se ha añadido al fichero /etc/resolv.conf.

Realizar estos cambios en los clientes mediante puppet, no tiene ninguna dificultad:
   file { '/etc/resolvconf/resolv.conf.d/base':
      content => 'options timeout:1 attempts:1 rotate',
      notify => Exec ['update-resolvconf']
   }

   exec { 'update-resolvconf':
      command => 'resolvconf -u',
      refreshonly => true
   }
Publicado por primera vez en http://enavas.blogspot.com.es

Orden de los servidores de nombres en /etc/resolv.conf

Supongamos que tenemos un /etc/resolv.conf como el siguiente en nuestros clientes:
search valledeljerte3
nameserver 172.x.y.3
nameserver 172.x.y.2
Las entradas nameserver nos permiten especificar diferentes direcciones de servidores de nombres que podrían ser consultados por el resolver.

De acuerdo con la ayuda (man resolv.conf), se listan hasta un máximo de MAXNS (actualmente 3) servidores de nombre, uno por palabra clave. 

Si en el fichero de configuración incluimos múltiples servidores de nombres, como en el ejemplo inicial, la biblioteca resolver los consultará en el orden listado. No obstante, es posible modificar ese comportamiento haciendo que se consulten mediante un mecanismo round-robin incluyendo la siguiente opción en el fichero de configuración:
options rotate
Lo que nos aporta esta opción es repartir la carga de las consultas entre los diferentes servidores DNS.
Publicado por primera vez en http://enavas.blogspot.com.es

Instalar manpages en español

Como todos sabéis, las páginas de ayuda de linux son un bien muy preciado que nos permiten consultar en cualquier momento la ayuda de cualquier comando, con tan sólo utilizar el comando man.

Si hacéis un dpkg -l | grep manpages, comprobaréis que al menos se encuentra instalado en el sistema el paquete manpages, que contiene las páginas de ayuda en inglés.

Si queréis disponer de las páginas de ayuda en español tanto en Ubuntu como en Debian, tan sólo tenéis que instalar dos paquetes:
  • manpages-es
  • manpages-es-extra
# apt-get install manpages-es manpages-es-extra
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 19 de abril de 2017

Limpiar la cache de squid3 de nuestro servidor Debian Jessie

Podemos limpiar fácilmente la caché de squid3 de la siguiente manera:

Primero.- Paramos el servicio squid3:
# systemctl stop squid3.service
Segundo.- Borramos el contenido de la caché:
rm -Rf /var/spool/squid3/*
Tercero.- Regeneramos la estructura de directorios de la caché:
# squid3 -z
Cuarto.- Iniciamos el servicio squid3:
# systemctl start squid3.service
Podemos convertir estos cuatro pasos en un script para simplificar nuestra tarea: Podéis instal este script fácilmente en vuestro servidor con tan sólo ejecutar los siguientes comandos:
# wget --no-check-certificate -O /usr/local/sbin/clean-squid3-cache https://github.com/algodelinux/clean-squid3-cache/raw/master/clean-squid3-cache
# chmod 755 /usr/local/sbin/clean-squid3-cache
Publicado por primera vez en http://enavas.blogspot.com.es

martes, 18 de abril de 2017

Instalar Master PDF Editor en Debian Jessie

Master PDF Editor es una excelente herramienta para editar ficheros PDF en Linux, Windows o Mac OS X que se encuentra disponible tanto en versión comercial como free.

Como ya comentamos en el post donde explicábamos como instalarlo en Ubuntu, la versión free tan sólo puede utilizarse con fines no comerciales, como por ejemplo, para propósitos educativos o uso en casa y tiene algunas funciones bloqueadas:
  • "Paste to Multiple Pages"
  • "Save Optimized As..."
  • "Document Actions"
  • "Document JavaScript"
  • "Page Properties"
  • "Signing PDF with digital signature"
Si queréis disponer de estas funciones, tendréis que adquirir una licencia. 

Instalarlo en Debian Jessie es sencillo:

Primero.- Descargamos el paquete, que se encuentra disponible tanto para 32 como 64 bits, desde el sitio web. Por ejemplo:
# wget http://get.code-industry.net/public/master-pdf-editor-4.1.30_qt5.amd64.deb
La 4.1.30 es la última versión disponible a día de hoy.

Segundo.- Instalamos el paquete:
# dpkg -i master-pdf-editor-4.1.30_qt5.amd64.deb
Tercero.- Y por último, instalamos sus dependencias:
# apt-get -f install
Publicado por primera vez en http://enavas.blogspot.com.es

clean-homes: Script para hacer limpieza en homes de alumnos y/o profesores mediante Bleachbit

En un post del 6 de abril, hablamos de BleachBit, una interesante herramienta que nos permite hacer limpieza y liberar espacio en disco.

Para liberar espacio en el servidor nfs del centro, escribí un script (clean-homes) con el que liberar espacio en los directorios HOME de profesores y/o alumnos haciendo uso de BleachBit.

Podéis instalarlo fácilmente en vuestro servidor con tan sólo ejecutar los siguientes comandos:
# wget --no-check-certificate -O /usr/local/sbin/clean-homes https://github.com/algodelinux/clean-homes/raw/master/clean-homes
# chmod 755 /usr/local/sbin/clean-homes
Aquí podéis ver el código completo: El script es muy sencillo de utilizar. Tan sólo tendremos que indicar si deseamos limpiar homes de alumnos, profesores o todos:
# clean-homes -c profesor
# clean-homes --clean profesor
# clean-homes -c alumnos
# clean-homes --clean alumnos
# clean-homes -c all
# clean-homes --clean all
No olvidéis que debéis instalar el paquete bleachbit en el servidor. Publicado por primera vez en http://enavas.blogspot.com.es

Puppet: Asegurar que un servicio está corriendo

Si administráis un entorno de clientes Ubuntu Trusty y Xenial o incluso Debian mediante Puppet, habréis notado que en algún caso, al aplicar algún módulo que gestiona un servicio, Puppet no encuentra el servicio. 

En ese caso, lo más probable es que debamos cambiar el proveedor del servicio por defecto. Ésto es algo muy sencillo de lograr, puesto que el recurso puppet "service" nos proporciona una propiedad "provider" con la que podemos indicar al servicio qué proveedor debe utilizar.

Teniendo en cuenta lo anterior, en nuestros módulos podemos distinguir tipos de máquinas en función del facter $lsbdistcodename para asegurar que el servicio esté corriendo con un proveedor diferente para cada tipo de máquina. Por ejemplo:

   case $lsbdistcodename {
      'trusty': {
         service { "ntp":
            provider => 'upstart',
            ensure => running
         }
      }
      default: {
         service { "ntp":
            provider => 'systemd',
            ensure => running
         }
      }
   }
Ésto me permitiría usar "systemd" como proveedor de servicio por defecto (algo necesario para máquinas con Debian Jessie o Ubuntu Xenial, que utilizan systemd) y "upstart" como proveedor de servicio para "trusty".
Publicado por primera vez en http://enavas.blogspot.com.es

Reempaquetar un paquete instalado en el sistema

Alguien me preguntaba cómo podía obtener un paquete que ya no encontraba en los repositorios pero que tenía instalado en su máquina. La solución es sencilla: Haciendo uso de dpkg-repack.

Éste es un post que publiqué en 2013 y que quizás alguien haya descartado por ser antiguo. Lo vuelvo a publicar tal cual porque sigue funcionando.

A veces hemos instalado algún software en nuestro sistema y, a pesar de que sigue instalado, ya no disponemos del paquete con el que lo hemos instalado, sea porque ya no se encuentra en los repositorios, no tenemos actualmente configurados los repositorios desde los que lo instalamos, es un paquete que creamos nosotros mismos y lo hemos perdido, etc... En este caso, podemos volver a crear el paquete haciendo uso de una herramienta muy útil para estos casos: dpkg-repack.

Veamos cómo usarla con un ejemplo:

Supongamos que hace tiempo instalamos en nuestro sistema el paquete gpdftk, queremos instalarlo en otra máquina y no sabemos de dónde sacarlo.

Primero instalamos los paquetes fakeroot y dpkg-repack:
# apt-get -y install fakeroot dpkg-repack

Una vez instalados, no tenemos más que usarlos:
$ fakeroot -u dpkg-repack  gpdftk

Y de este modo tan sencillo, obtendremos el paquete gdftk.
Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 14 de abril de 2017

El comando ls: Listar ficheros ordenados por fecha de modificación

Podemos listar ficheros ordenando la salida por fecha de modificación y mostrando los más nuevos primero mediante el parámetro -t del comando ls:
# ls -lt
Y si queremos mostrar una ordenación inversa (los más antiguos primero), tan sólo tenemos que añadir el parámetro -r al comando anterior:
# ls -ltr
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 6 de abril de 2017

Bleachbit: Una herramienta Opensource muy útil para liberar espacio en disco

BleachBit es una interesante herramienta que nos va a permitir hacer limpieza y liberar espacio en disco. Tres de sus principales ventajas frente a otras herramientas de propósito similar son:
  • Es OpenSource.
  • Se encuentra disponible tanto para Linux como para Windows. 
  • Podemos utilizarlo mediante su interfaz gráfica o desde la línea de comandos.
Con BleachBit podemos: Liberar espacio de caché, eliminar cookies, borrar el historial de los navegadores, triturar archivos para evitar su recuperación una vez borrados, etc...

Instalarlo tanto en Debian como en Ubuntu es realmente trivial puesto que se encuentra en los repositorios: 
# apt-get update && apt-get -y install bleachbit
Un ejemplo de limpieza de la caché del sistema, los paquetes de idioma, la papelera y archivos temporales:
# bleachbit --clean system.cache system.localizations system.trash system.tmp
Publicado por primera vez en http://enavas.blogspot.com.es

El comando find: Buscar archivos modificados en las últimas 24 horas

Podemos buscar los archivos modificados en las últimas 24 horas simplemente utilizando el comando find:
# find directorio-de-busqueda -mtime -1 -type f 
Ejemplo:
# find /usr/local/sbin/ -mtime -1 -type f 
Es importante decir que el símbolo "-" significa que el archivo cambió en un día o menos.
Si utilizamos el símbolo "+" estaremos buscando archivos que hayan cambiado en un día o mas.
Y si no utilizamos ningún símbolo, estaremos indicando que queremos buscar archivos que hayan cambiado exactamente en un día.

martes, 4 de abril de 2017

Lyx: "Package babel Error: You haven't specified a language option" al generar documento PDF

Al tratar de generar un documento PDF escrito en otra máquina con Lyx me aparecía el siguiente error:
Package babel Error: You haven't specified a language option
La solución ha sido instalar el paquete texlive-lang-spanish:
# apt-get install texlive-lang-spanish
Publicado por primera vez en http://enavas.blogspot.com.es

Pulseaudio: Configurar salida de audio combinada

Todos hemos tenido problemas con usuarios a los que, por alguna razón que desconozco, se les cambia la salida de audio de analógica a hdmi y deja de escucharse el sonido. 

Una de las soluciones para resolver el problema consiste en deshabilitar el perfil de audio HDMI. Otra, sería habilitar la salida de audio combinada a todos los dispositivos. Esta segunda posibilidad es la que yo he decidido aplicar. Para ello, no tenemos más que añadir la siguiente línea al final del fichero de configuración /etc/pulse/default.pa:
load-module module-combine-sink sink_name=combined
Una vez añadida, reiniciamos pulseaudio:
# killall pulseaudio
Convertir ésto en un módulo puppet es muy sencillo. Os muestro a continuación cómo habría que crear la clase:
# cat /etc/puppet/modules/pulseaudio/manifests/init.pp 
class pulseaudio {

   file { '/etc/pulse/default.pa':
      source => "puppet:///modules/pulseaudio/default.pa",
      owner => root, group => root, mode => 644,
      notify => Exec ['restart_pulseaudio']
   }

   exec { 'restart_pulseaudio':
      command => '/usr/bin/killall pulseaudio',
      refreshonly => true
   }
}
No olvidéis colocar el fichero default.pa modificado en el directorio files del módulo puppet.
Publicado por primera vez en http://enavas.blogspot.com.es

domingo, 2 de abril de 2017

Detectar y matar procesos zombie en nuestro sistema

Un proceso zombie es un proceso que ha terminado pero sigue apareciendo en la tabla de procesos. Para detectar si en nuestro sistema hay procesos zombie, podemos ejecutar la siguiente combinación de comandos:
# ps -A -ostat,ppid | awk '/[zZ]/{print $2}')
Un proceso zombie ya es un proceso muerto, y, por tanto, no se le puede matar. Así que, si matamos al proceso padre conseguiremos eliminar el hijo. Para eliminar los procesos zombie, añadiremos un kill a la secuencia de comandos anterior:
# kill $(ps -A -ostat,ppid | awk '/[zZ]/{print $2}')
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 29 de marzo de 2017

Controlar el acceso de usuarios al equipo vía lightdm

pam_access es el módulo pam que nos permite realizar un control de acceso al equipo. 

En este post nos vamos a centrar tan sólo en ver la configuración que debemos aplicar para controlar qué usuarios pueden hacer login vía lightdm. Para lograrlo, tan sólo vamos a tocar dos ficheros:
  • /etc/pam.d/lightdm (donde habilitaremos el uso del módulo pam_access desde lightdm)
  • /etc/security/access.conf (donde definiremos las reglas de acceso)
Como podéis comprobar, en el fichero /etc/pam.d/lightdm de nuestros clientes Ubuntu no se está utilizando el módulo pam_access:
# nano /etc/pam.d/lightdm
#%PAM-1.0
auth    requisite       pam_nologin.so
auth    sufficient      pam_succeed_if.so user ingroup nopasswdlogin
@include common-auth
auth    optional        pam_gnome_keyring.so
auth    optional        pam_kwallet.so
@include common-account
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
#session required        pam_loginuid.so
session required        pam_limits.so
@include common-session
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
session optional        pam_gnome_keyring.so auto_start
session optional        pam_kwallet.so auto_start
session required        pam_env.so readenv=1
session required        pam_env.so readenv=1 user_readenv=1 envfile=/etc/default/locale
@include common-password
Para habilitarlo, añadimos la siguiente línea al fichero de configuración /etc/pam.d/lighdm:
account  required       pam_access.so
Es importante destacar que debemos añadirla en el lugar que se muestra en el siguiente fichero:
# nano /etc/pam.d/lightdm
#%PAM-1.0
auth    requisite       pam_nologin.so
auth    sufficient      pam_succeed_if.so user ingroup nopasswdlogin
@include common-auth
auth    optional        pam_gnome_keyring.so
auth    optional        pam_kwallet.so
account  required       pam_access.so
@include common-account
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
#session required        pam_loginuid.so
session required        pam_limits.so
@include common-session
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
session optional        pam_gnome_keyring.so auto_start
session optional        pam_kwallet.so auto_start
session required        pam_env.so readenv=1
session required        pam_env.so readenv=1 user_readenv=1 envfile=/etc/default/locale
@include common-password
Una vez añadida, no tenemos más que editar el fichero /etc/security/access.conf para insertar las reglas de acceso que queramos.
No vamos a entrar en muchos detalles sobre cómo deben añadirse las reglas de accceso a este fichero, puesto que está bastante claro en los comentarios que vienen dentro del mismo, pero sí vamos a destacar lo más importante:
  • Cualquier línea que comience por el símbolo "#" se considera un comentario.
  • El orden en que definamos reglas de acceso es importante, puesto que se examinarán de arriba a abajo.
  • Cada regla se compone de tres campos separados por el símbolo ":"
    • permisos : usuarios : orígenes
  • El primer campo debería ser:
    • Un símbolo "+" para conceder acceso.
    • Un símbolo "-" para denegar acceso.
  • El segundo campo debe ser una lista de uno o más nombres de usuarios, de grupos o la palabra reservada ALL que representa a todos. Es posible indicar un patrón del tipo usuario@host para controlar el acceso de un usuario en concreto desde un determinado host.
  • El tercer campo debe ser una lista de uno o más nombres de terminal que indican un acceso local, nombres de hosts, nombres de dominio (comenzando por ".") direcciones de hosts, la palabra reservada ALL que representa a todos, la palabra reservada NONE que representa que no se está usando un terminal o el login no es de red o la palabra reservada LOCAL que representa cualuquier cadena que con contenga un carácter "."
  • Además podemos utilizar el operador EXCEPT para especificar excepciones en las reglas
Veamos unos ejemplos sencillos:

Supongamos que queremos denegar el acceso a todos los usuarios excepto a aquellos cuyo nombre sea teachers o pertenezcan al grupo teachers:
- : ALL EXCEPT teachers : ALL
Ahora bien, si lo que nos interesa es denegar el acceso a todos los usuarios excepto a aquellos que pertenezcan al grupo teachers, eliminando la posiblidad de que pueda hacer login un usuario con el nombre teachers, colocaremos el nombre entre paréntesis:
- : ALL EXCEPT (teachers) : ALL
Si queremos añadir  más usuarios y/o grupos a la regla, no tenemos más que separarlos por espacios. Por ejemplo, supongamos que nos interesa que el usuario root también pueda acceder al equipo:
- : ALL EXCEPT (teachers) root : ALL
Como ya comenté en el post anterior, utilizo un módulo puppet al que he llamado (linex-config-ldapclient) para gestionar los ficheros de configuración que establece el paquete linex-config-ldapclient. Podríamos usarlo también para gestionar los ficheros /etc/pam.d/lightdm y /etc/security/access.conf
Publicado por primera vez en http://enavas.blogspot.com.es

Configuración de ldap en clientes del IES

Para configurar los equipos de los centros como clientes ldap,  se utiliza el paquete linex-config-ldapclient:
# dpkg -l|grep linex-config-ldapclient
ii  linex-config-ldapclient                     0.5                                     all          linex ldap autentication and mount system.
Tan sólo tenéis que examinar el paquete para ver qué ficheros se modifican y cómo se realiza la configuración. 
# tree /usr/share/linex-config-ldapclient/
/usr/share/linex-config-ldapclient/
├── actualiza_cache_passwd
├── autofs-restart
├── group.conf
├── ldap.conf
├── nslcd.conf
├── nsswitch.conf
├── nsswitch.conf.dpkg-dist
├── nsswitch.conf.lwidentity.bak
├── nsswitch.conf.lwidentity.orig
├── pam.d
│   ├── common-account
│   ├── common-auth
│   ├── common-password
│   ├── common-session
│   ├── common-session-noninteractive
│   └── gdm3-autologin
└── update_cache_passwd
Una cosa que debéis tener en cuenta es que los ficheros de configuración se colocan en /usr/share/linex-config-ldapclient/ y en el directorio donde debería ir el fichero, lo que se hace es un enlace al fichero ubicado en el directorio anterior. Por ejemplo:
# ls -l /etc/nsswitch.conf
lrwxrwxrwx 1 root root 48 jul 19  2016 /etc/nsswitch.conf -> /usr/share/linex-config-ldapclient/nsswitch.conf

# ls -l /etc/ldap/ldap.conf
lrwxrwxrwx 1 root root 44 mar 28 13:22 /etc/ldap/ldap.conf -> /usr/share/linex-config-ldapclient/ldap.conf

# ls -l /etc/nslcd.conf
lrwxrwxrwx 1 root root 45 mar 28 13:21 /etc/nslcd.conf -> /usr/share/linex-config-ldapclient/nslcd.conf
Ésta es una cuestión importante que debéis tener en cuenta. Evitaréis problemas colocando los ficheros de configuración en la ubicación correcta.

Por si os sirve la idea, yo utilizo un módulo puppet al que he llamado del mismo modo (linex-config-ldapclient) para gestionar estos ficheros de configuración. De momento, tan sólo controla tres ficheros (ldap.conf, nslcd.conf y group.conf), básicamente porque en los clientes defino como servidores ldap a los que consultar, el principal y una de las réplicas de ldap que tengo montadas en el centro; y porque necesitaba asignar el grupo dialout a los clientes para que pudieran utilizar arduino.
Publicado por primera vez en http://enavas.blogspot.com.es

martes, 28 de marzo de 2017

Expulsar a un usuario del sistema

Hay varias formas de "expulsar" a un usuario del sistema. Una de las más sencillas consiste en usar el comando pkill, que sirve para matar procesos.

Primero.- Nos conectamos mediante ssh a la máquina donde queremos cerrar la sesión de usuario.

Segundo.- Comprobamos qué usuarios y en qué terminal han iniciado sesión:
root@a22-pro:~# who
ponente  :0           2017-03-28 12:27 (:0)
root     pts/0        2017-03-28 12:25 (recursos.valledeljerte3)
Como podéis ver en el ejemplo anterior, hay dos usuarios:
  • El usuario ponente, que ha iniciado sesión en el terminal gráfico.
  • El usuario root, conectado de forma remota desde la máquina recursos.valledeljerte3. Este usuario es el que he usado para conectarme remotamente y cerrar la sesión del usuario ponente.
Tercero.- Matamos todos los procesos del usuario ponente haciendo uso del parámetro -u, y con eso habremos cerrado su sesión:
root@a22-pro:~# pkill -u ponente
Publicado por primera vez en http://enavas.blogspot.com.es

lunes, 27 de marzo de 2017

CUPS: Reconfigurar para que muestre el nombre de usuario que imprime cada trabajo

Si accedemos al interfaz de administración de CUPS, podemos obtener información acerca de los trabajos enviados a la impresora:
  • El usuario que realizó la impresión.
  • El nombre del trabajo.
  • Fecha y hora de impresión.
  • Cantidad de páginas impresas.
Ahora bien, en la configuración por defecto de CUPS no se muestra el nombre de usuario que realizó la impresión, y, en su lugar, se muestra un mensaje como el siguiente:
{job_originating_user_name}
Para modificar este comportamiento, tan sólo tenemos que cambiar el valor del parámetro JobPrivateValues en el fichero de configuración /etc/cups/cupsd.conf
JobPrivateValues default
Por:
JobPrivateValues none
Publicado por primera vez en http://enavas.blogspot.com.es

CUPS: Cambiar la interfaz de escucha

Si os fijáis en el fichero de configuración /etc/cups/cupsd.conf, por defecto, CUPS escucha solamente conexiones desde la máquina local:
# Only listen for connections from the local machine.
Listen localhost:631
Podemos cambiar este valor para hacer que escuche en una determinada interfaz. Por ejemplo:
Listen 192.168.0.10:631
O incluso, que escuche en todas las interfaces. Algo interesante cuando tenemos varias redes y queremos que nuestro servidor de impresión preste servicio en varias de ellas:
Listen *:631
Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 17 de marzo de 2017

tr: Concatenar las líneas de un archivo en una sola

A veces, un comando no tiene un parámetro que permita tomar los datos desde un fichero y necesitamos obtener los datos del fichero en una sola línea. 
La forma más sencilla de hacerlo es usar el comando tr para transformar cada carácter de nueva línea en un espacio: tr '\n' ' ' 

Un ejemplo:
# cat /etc/dsh/machines.list | tr '\n' ' '
Publicado por primera vez en http://enavas.blogspot.com.es

nmap: Excluir del escaneo una serie de máquinas mediante un fichero

Es posible excluir del escaneo una serie de máquinas mediante un fichero si utilizamos el parámetro:
 --excludefile.

Un ejemplo:
# nmap -e eth1 -p 135 192.168.100.0/22 --excludefile=/tmp/noscan
Publicado por primera vez en http://enavas.blogspot.com.es

nmap: Detectar el sistema operativo instalado en una máquina

En versiones recientes de nmap, podemos utilizar el parámetro -A para tratar de detectar el sistema operativo instalado en una máquina. Por ejemplo:
# nmap -v -A 192.168.101.16

Starting Nmap 6.47 ( http://nmap.org ) at 2017-03-17 10:53 CET
NSE: Loaded 118 scripts for scanning.
NSE: Script Pre-scanning.
Initiating ARP Ping Scan at 10:53
Scanning 192.168.101.16 [1 port]
Completed ARP Ping Scan at 10:53, 0.22s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 10:53
Completed Parallel DNS resolution of 1 host. at 10:53, 5.50s elapsed
Initiating SYN Stealth Scan at 10:53
Scanning 192.168.101.16 [1000 ports]
Discovered open port 22/tcp on 192.168.101.16
Discovered open port 135/tcp on 192.168.101.16
Completed SYN Stealth Scan at 10:53, 19.44s elapsed (1000 total ports)
Initiating Service scan at 10:53
Scanning 2 services on 192.168.101.16
Completed Service scan at 10:53, 6.01s elapsed (2 services on 1 host)
Initiating OS detection (try #1) against 192.168.101.16
Retrying OS detection (try #2) against 192.168.101.16
NSE: Script scanning 192.168.101.16.
Initiating NSE at 10:54
Completed NSE at 10:54, 4.05s elapsed
Nmap scan report for 192.168.101.16
Host is up (0.00052s latency).
Not shown: 998 filtered ports
PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 7.4 (protocol 2.0)
|_ssh-hostkey: ERROR: Script execution failed (use -d to debug)
135/tcp open  msrpc   Microsoft Windows RPC
MAC Address: 50:65:F3:2D:38:BB (Unknown)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose|router|firewall
Running (JUST GUESSING): FreeBSD 6.X (93%), Juniper JUNOS 9.X|10.X|12.X (87%), m0n0wall FreeBSD (87%), Netasq embedded (87%)
OS CPE: cpe:/o:freebsd:freebsd:6.2 cpe:/o:juniper:junos:9 cpe:/o:m0n0wall:freebsd cpe:/o:juniper:junos:10 cpe:/o:juniper:junos:12 cpe:/h:netasq:u70
Aggressive OS guesses: FreeBSD 6.2-RELEASE (93%), Juniper Networks JUNOS 9.0R2.10 (87%), m0n0wall 1.3b11 - 1.3b15 FreeBSD-based firewall (87%), Juniper SRX100-series or SRX200-series firewall (JUNOS 10.4 - 12.1) (87%), Netasq U70 firewall (87%), FreeBSD 6.3-RELEASE (86%)
No exact OS matches for host (test conditions non-ideal).
Uptime guess: 1.977 days (since Wed Mar 15 11:26:54 2017)
Network Distance: 1 hop
TCP Sequence Prediction: Difficulty=259 (Good luck!)
IP ID Sequence Generation: Incremental
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

TRACEROUTE
HOP RTT     ADDRESS
1   0.52 ms 192.168.101.16

NSE: Script Post-scanning.
Read data files from: /usr/bin/../share/nmap
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 40.27 seconds
           Raw packets sent: 3108 (141.968KB) | Rcvd: 42 (2.128KB)
En este caso, como podemos comprobar, el sistema operativo de la máquina detectada es Windows: Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 16 de marzo de 2017

Añadir el módulo zentyal-radius con mschap a zentyal 4.2

Por alguna razón, los desarrolladores de Zentyal decidieron quitar el soporte de radius a partir de la versión 4.0 de Zentyal Community Edition, que por cierto, en versiones posteriores pasaron a llamar Zentyal Development Edition.

Si queréis añadir el soporte para radius en versiones 4.0, 4.2 o 5.0, podéis recurrir al foro de Zentyal, donde el usuario julio tiene publicadas las instrucciones para descargar el código del módulo zentyal-radius_3.5.1, aplicarle un parche que lo adapta a las siguientes versiones y volver a construir el paquete.

Siguiendo sus instrucciones, he generado el paquete que instala el módulo en la versión 4.2 y funciona perfectamente:
# sudo apt-get install zbuildtools build-essential fakeroot dpkg-dev -y
# mkdir ~/tmp
# cd ~/tmp
# wget 'http://archive.zentyal.org/zentyal/pool/main/z/zentyal-radius/zentyal-radius_3.5.1.tar.gz' -O zentyal-radius_3.5.1.tar.gz
# tar -xf zentyal-radius_3.5.1.tar.gz
# mv zentyal-radius-3.5.1 zentyal-radius-4.2
# wget 'https://drive.google.com/uc?export=download&id=0B4_d-7xL0AS_MWRMOS10Y2c1S2s' -O zentyal-radius-4.2.patch
# patch -t -p1 -i zentyal-radius-4.2.patch
# cd zentyal-radius-4.2
# dpkg-buildpackage -rfakeroot -b -tc
# cd ..
# sudo dpkg -i zentyal-radius_4.2_all.deb
# sudo apt-get install -f -y
De este modo, podreḿos controlar qué grupo de usuarios del servidor Zentyal pueden acceder a la red vía freeradius, algo muy interesante porque vamos a poder configurar nuestro portal cautivo en pfSense para que utilice el servicio radius de Zentyal.
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 15 de marzo de 2017

Realizar consulta para obtener usuarios, grupos y máquinas en la B.D. LDAP de Zentyal 4.2

Tengo implementado el controlador de dominio Windows mediante Zentyal 4.2. Para obtener información de usuarios en la B.D. LDAP, podemos realizar la siguiente consulta desde un terminal:
# ldapsearch -xLLL -H ldap://127.0.0.1 -D "adminies@instituto.extremadura.es" -b "cn=Users,dc=instituto,dc=extremadura,dc=es" -W
Para obtener información de grupos en la B.D. LDAP, podemos realizar la siguiente consulta desde un terminal:
# ldapsearch -xLLL -H ldap://127.0.0.1 -D "adminies@instituto.extremadura.es" -b "cn=Groups,dc=instituto,dc=extremadura,dc=es" -W
Para obtener información de máquinas en la B.D. LDAP, podemos realizar la siguiente consulta desde un terminal:
# ldapsearch -xLLL -H ldap://127.0.0.1 -D "adminies@instituto.extremadura.es" -b "cn=Computers,dc=instituto,dc=extremadura,dc=es" -W
Siendo adminies@instituto.extremadura.es un usuario administrador del dominio. Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 10 de marzo de 2017

Error: VM is locked (backup) en Proxmox

Si en algún momento tratáis de hacer un backup de una máquina virtual en Proxmox y os aparece el siguiente error cuando no se está realizando ningún backup:
Error: VM is locked (backup)
Es posible que se haya producido algún error y se mantenga el bloqueo de la máquina virtual. Para eliminar dicho bloqueno no tenemos más que utilizar
# qm unlock <vmid>
Donde será el identificador de la máquina virtual a desbloquear. Por ejemplo:
# qm unlock 102
Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 8 de marzo de 2017

Instalación de OMV-Extras en OpenMediaVault 3.0

OMV-Extras.org es un plugin que nos permite, entre otras cosas:
  • Instalar otros plugins en OpenMediaVault.
  • Instalar un kernel de backports.
  • Añadir repositorios personalizados.
En este post, vamos a ver cómo instalar este plugin en OMV 3.0 desde la línea de comandos:

Primero.- Instalamos el paquete apt-transport-https, si no lo teníamos instalado aún:
# apt-get install apt-transport-https
Segundo.- Descargamos el paquete que contiene el plugin:
# wget http://omv-extras.org/openmediavault-omvextrasorg_latest_all3.deb
Tercero.- Una vez descargado, lo instalamos:
# dpkg -i openmediavault-omvextrasorg_latest_all3.deb
Cuarto.- Por último actualizamos los índices de los repositorios:
# apt-get update
Una vez hecho ésto, ya podemos buscar plugins de openmediavault:
# apt-cache search openmediavault
Publicado por primera vez en http://enavas.blogspot.com.es

Cambiar/establecer etiqueta en una partición/volumen LVM

Es muy fácil cambiar o establecer una etiqueta para una partición o volúmen LVM con tan sólo utilizar el comando e2label. Un par de ejemplos:
# e2label /dev/openmediavault-vg/backup backup
# e2label /dev/openmediavault-vg/publico publico
Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 3 de marzo de 2017

Restaurar objetos de directiva de grupo

Es conveniente tener un backup de nuestros objetos de directiva de grupo, para poder restaurarlos en caso de que haya algún problema.

Primero.- Seleccionamos "Objetos de directiva de grupo":


Segundo.- Hacemos clic con el botón derecho del ratón sobre "Objetos de directiva de grupo". Se nos desplegará un menú de contexto. Haremos clic sobre la opción "Administrar copias de seguridad...":



Tercero.- Se nos mostrará un cuadro de diálogo donde seleccionaremos la ubicación de la copia de seguridad y el/los objeto/s de directiva de grupo que queramos restaurar. Una vez seleccionados, pulsaremos el botón "Restaurar":


Cuarto.- Se nos abrirá un cuadro de diálogo que nos pedirá confirmación antes de restaurar. Pulsamos en "Aceptar":


Y comenzará el proceso de restauración. Cuando termine, pulsamos el botón "Aceptar" y habremos restaurado los objetos de política de grupo seleccionados.


Publicado por primera vez en http://enavas.blogspot.com.es

Realizar un Backup de todos los objetos de directiva de grupo

Veamos cómo hacer un backup de los objetos de directiva de grupo de nuestro dominio:

Primero.- Abrimos la herramienta de administración de directivas de grupo gpmc.msc en el equipo que tiene instalado RSAT y seleccionamos "Objetos de directiva de grupo".


Segundo.- Hacemos clic con el botón derecho del ratón sobre "Objetos de directiva de grupo". En el menú de contexto hacemos clic sobre "Hacer copia de seguridad de todos..." para realizar una copia de seguridad de todos los objetos de directiva de grupo:


Tercero.- Seleccionamos la ruta donde guardar la copia de seguridad, escribimos un comentario en la "Descripción" y hacemos clic sobre el botón "Hacer copia de seguridad".


Cuando termine, pulsamos el botón "Aceptar" y listo:


Publicado por primera vez en http://enavas.blogspot.com.es

Modificación del script update.cmd para actualizar Windows en equipos Infolab sólo en un intervalo horario

En un post del viernes pasado, os mostré un script al que llamé update.cmd que me permite dos cosas:
  • Actualizar el software instalado mediante chocolatey.
  • Aplicar las actualizaciones de Windows Update descargadas mediante WSUS Offline Update en mi NAS.
Esta semana he realizado una actualización del script que tan sólo realizará la actualización del equipo si se encuentra en un determinado intervalo horario, renombrando la versión anterior como "pkgsyncwin.cmd".

La idea es dejar el script pkgsyncwin.cmd para poder lanzarlo de forma manual en cualquier momento y utilizar el script update.cmd mediante una tarea que se ejecute en el inicio de Windows. De este modo, las actualizaciones sólo se realizarán fuera del horario de "actividad".
update.cmd
@echo off

set olddir=%CD%
set hour=%TIME:~0,2%

if %hour% LSS 8 if %hour% GTR 15) (
   bcdedit /set {bootmgr} path \efi\microsoft\boot\bootmgfw.efi
   choco upgrade -y all --except=puppet

   net use t: \\nas\wsus /persistent:no
   t:
   cd client\cmd
   call DoUpdate.cmd /verify /updatecpp /updatetsc /instdotnet4
   cd /d %olddir%
   shutdown -r -t 10   
)
El script hace exactamente lo mismo que la versión anterior, sólo dentro de un horario.
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 2 de marzo de 2017

El interfaz web de Zentyal no carga después de actualizar desde la versión 4.2 a la 5.0

Por lo que he podido comprobar, parece un poco pronto para actualizar desde zentyal development edition 4.2 a 5.0, si nuestro sistema se encuentra en producción.
Uno de los errores que se han producido: El interfaz webadmin no cargaba después de actualizar de una versión a otra.
Al conectarme vía ssh al servidor Zentyal comprobé que el servicio webadmin estaba caído. ¿Cómo lo comprobamos?
# zs webadmin status
Una vez comprobado, podemos iniciarlo de la siguiente manera:
# zs webadmin start

Publicado por primera vez en http://enavas.blogspot.com.es

Eliminar un usuario local de Windows mediante Puppet

Es muy sencillo eliminar un usuario local de Windows mediante Puppet. Tan sólo tenemos que utilizar el recurso puppet "user" del mismo modo que lo hacemos con clientes Linux. Vamos a verlo con un ejemplo aplicado:

El sistema Windows de mis Infolab tiene un usuario local llamado "Usuario". Puesto que tengo un controlador de dominio para estos equipos, y, cada usuario inicia sesión con su propio login y password, no me interesa que puedan iniciar sesión con este usuario local, que, por otra parte, no tiene contraseña. Para eliminarlo, podemos utilizar el recurso user de la siguiente manera:
   user { 'Usuario':
      ensure => absent,
      managehome => true
   }
Para eliminarlo, es suficiente con definir el atributo ensure => absent.

Sin embargo, me gustaría comentar un detalle importante: Podemos utilizar el atributo managehome (y esto es aplicable tanto a clientes Linux como clientes Windows) para eliminar su home local (si estamos usando ensure => absent) o crearlo (si estamos usando ensure => present).

Una vez definido el recurso y aplicado a los clientes, podemos comprobar que el usuario se elimina:
# puppet agent -tv
Info: Caching catalog for infolab-prueba.instituto.extremadura.es Info: Applying configuration version '1488442521' Notice: /Stage[main]/Windows_users/User[Usuario]/ensure: removed Notice: Finished catalog run in 54.99 seconds
Publicado por primera vez en http://enavas.blogspot.com.es

Recuperar el gestor de arranque del DEP-Profe

Los adjudicatarios de un DEP-Profe deben solucionar los problemas de sus dispositivos. En ocasiones, se pierde el arranque dual tras las actualizaciones de Windows. En este caso, es sencillo repararlo siguiendo las instrucciones del manual creado por el CPR de Mérida:

Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 1 de marzo de 2017

Uso de barras invertidas en manifests Puppet para Windows

Cuando escribimos un fichero manifests para clientes Windows, debemos tener en cuenta lo siguiente:
  • En la mayoría de los atributos, Puppet admite tanto las barras (/) como las barras invertidas (\), si bien es cierto que algunos atributos sólo admiten las barras y otros, solamente las barras invertidas.
  • Cuando las barras invertidas se encuentran entre comillas dobles, deben ser "escapadas".
  • Cuando las barras invertidas se encuentran entre comillas simples, podemos elegir "escaparlas" o no.
Ejemplos:
file { "C:\\Windows\\System32\\pkgsyncwin.cmd": }
file { 'C:\Windows\System32\pkgsyncwin.cmd': }
file { 'C:\\Windows\\System32\\pkgsyncwin.cmd': }
Publicado por primera vez en http://enavas.blogspot.com.es

Actualizar pfSense desde la línea de comandos


Normalmente actualizamos pfSense desde el interfaz web, aunque también es posible actualizarlo desde la línea de comandos, algo realmente útil, como por ejemplo, cuando no tenemos un acceso a dicho interfaz pero sí podemos conectarnos remotamente al servidor vía ssh.

Lo primero será conectarnos vía ssh al firewall. Si necesitáis acceder a él desde las interfaces LAN, no hay problema. Pero si lo que queréis es acceder desde la WAN, tendréis que crear una regla que lo permita.

Una vez conectados, ejecutamos el comando: 
# pfSense-upgrade -d
Y comenzará el proceso de actualización. Cuando termine, se reiniciará el sistema automáticamente para aplicar los cambios.
Publicado por primera vez en http://enavas.blogspot.com.es

Copiar scripts a múltiples equipos Windows vía GPO

Aprovechando que necesitaba distribuir el script update.cmd (una especie de pkgsync para windows que me va a permitir mantener actualizados los equipos), he creado un script de inicio copyfiles.cmd con el que distribuir cualquier nuevo script a los clientes:


De este modo, cada vez que necesite distribuir un nuevo script a los clientes Windows, tan sólo tengo que colocarlo en el directorio Netlogon del controlador de dominio.
Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 24 de febrero de 2017

Script update.cmd para actualizar Windows en equipos Infolab

He creado un script update.cmd que me permite dos cosas:
  • Actualizar el software instalado mediante chocolatey.
  • Aplicar las actualizaciones de Windows Update descargadas mediante WSUS Offline Update en mi NAS.
update.cmd
@echo off
bcdedit /set {bootmgr} path \efi\microsoft\boot\bootmgfw.efi
choco upgrade -y all --except=puppet
net use z: \\nas\wsus
z:
cd client\cmd
call DoUpdate.cmd /verify /updatecpp /updatetsc /instdotnet4
shutdown -r -t 10
El script realiza las actualizaciones y reinicia el equipo para que se apliquen aquellas que puedan requerir un reinicio.

La idea es poder usarlo, al menos de momento, de forma manual y, posteriormente encajarlo en el sistema que permita actualizar Ubuntu y Window de forma desatendida.

La línea que contiene el comando bcdedit cambia el arranque por defecto a Windows. Utilizo este mecanismo para forzar un inicio en Windows después de la actualización. En el siguiente reinicio volverá a iniciarse mi cargador de arranque por defecto (rEFInd) porque tengo mecanismos que lo establecen como gestor de arranque por defecto tanto en Windows como en Ubuntu.
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 23 de febrero de 2017

Hacer un debug de un cliente ldap

Para diagnosticar un problema de conexión a un servidor LDAP desde un cliente, podemos realizar una búsqueda en modo debug.

Por ejemplo, supongamos que queremos ver qué sucede al realizar una consulta con el usuario administrador mediante ldap seguro:
# ldapsearch -v -H ldaps://servidor -D cn=admin,ou=People,dc=instituto,dc=extremadura,dc=es -W -x -b dc=instituto,dc=extremadura,dc=es -d1
Ahora bien, supongamos que queremos comprobar qué sucede cuando hacemos una consulta con el usuario replica mediante ldap no seguro:
# ldapsearch -v -H ldap://servidor -D cn=replica,dc=instituto,dc=extremadura,dc=es -W -x -b dc=instituto,dc=extremadura,dc=es -d1
Como podéis imaginar, con "-d num" estamos indicando el nivel de debug.
Publicado por primera vez en http://enavas.blogspot.com.es

Iniciar el servidor LDAP en modo debug

Si tenemos problemas con el servidor LDAP porque no inicia o porque algo no está funcionando bien, podemos parar el servicio y ejecutarlo en modo debug:
# slapd -h "ldapi:/// ldap:// ldaps://" -u openldap -g openldap -F /etc/ldap/slapd.d/ -d 256
Publicado por primera vez en http://enavas.blogspot.com.es

ldap_add: Other (e.g., implementation specific) error (80)

En ocasiones, LDAP puede mostrarnos un error al agregar nuevas entradas que suele estar motivado por un mal apagado:
ldap_add: Other (e.g., implementation specific) error (80)
additional info: index generation failed
Para solucionarlo, lo que podemos hacer es tomar la última copia de seguridad y restaurarla.
En los siguientes posts podéis econtrar información acerca de cómo realizar un backup y restaurarlo:
https://enavas.blogspot.com.es/2016/04/script-backup-ldap-realizar-un-backup.html
https://enavas.blogspot.com.es/2017/02/script-restore-ldap-restaurar-backup-de.html
Publicado por primera vez en http://enavas.blogspot.com.es

Establecer Windows como gestor de arranque por defecto desde Windows

En un post anterior, vimos como establecer rEFInd como gestor de arranque por defecto en Windows.
Si por alguna razón necesitamos hacer que Windows arranque por defecto, tan sólo tenemos que modificar la configuración de arranque de Windows mediante el editor de opciones de arranque bcdedit:
C:\Windows\System32> bcdedit /set {bootmgr} path \EFI\microsoft\boot\bootmgfw.efi
Publicado por primera vez en http://enavas.blogspot.com.es

GPO: Establecer rEFInd como gestor de arranque por defecto en el inicio de Windows

Creé una política que ejecuta bcdedit para establecer rEFInd como gestor de arranque por defecto en el apagado de Windows con el fin de asegurar que rEFInd sea siempre el cargador de arranque. Ahora bien, uno de mis proyectos es realizar un sistema de actualización desatendida tanto de Ubuntu como de Windows en los equipos de Infolab de forma desatendida fuera del horario de actividad. La parte de Ubuntu ya está lista, pero me falta por terminar la parte de Windows.

La cuestión es que, he tenido que cambiar la política que establece rEFInd como gestor de arranque por defecto para que en lugar de ejecutarse en el apagado de la máquina, lo haga en el inicio. De este modo, voy a poder forzar un reinicio en Windows cuando lo necesite.





Publicado por primera vez en http://enavas.blogspot.com.es

miércoles, 22 de febrero de 2017

Script restore-ldap: Restaurar backup de la configuración y/o la B.D. LDAP con configuración OLC

Como ya vimos en un post de abril de 2016, el script backup-ldap permite realizar un backup completo de LDAP con configuración OLC. Ésto significa que no sólo haremos un backup de los datos almacenados en el árbol ldap. También guardaremos la base de datos de configuración:
  • LDAP config (slapcat -n 0)
  • LDAP DIT (slapcat -n 1)
Los backups se guardan en el directorio /var/backups/ con nombres:
  • backup-config-ldap-$TIMESTAMP.ldif 
  • backup-db-ldap-$TIMESTAMP.ldif 
Donde el valor de TIMESTAMP se sustituirá por la fecha del día en que se realiza el backup en formato AAAAMMDD.

Para hacer más cómodo el procedimiento de restauración, he escrito un nuevo script restore-ldap que me permite restaurar la configuración de ldap, los datos almacenados en la B.D. o ambas cosas a la vez.

Sintaxis:
# restore-ldap [-h|--help]
# restore-ldap [-c|--config] backup-config-ldap-file [-d|--data] backup-data-ldap-file

Ejemplos de uso:
# restore-ldap -h
# restore-ldap --help
# restore-ldap -c backup-config-ldap-20170222.ldif
# restore-ldap -d backup-data-ldap-20170222.ldif
# restore-ldap -c backup-config-ldap-20170222.ldif -d backup-data-ldap-20170222.ldif

Publicado por primera vez en http://enavas.blogspot.com.es

martes, 21 de febrero de 2017

GPO: No mostrar la opción "Instalar actualizaciones y Apagar" en el cuadro de diálogo Apagar de Windows

He habilitado la directiva No mostrar la opción "Instalar actualizaciones y Apagar" en el cuadro de diálogo Apagar de Windows para que no se muestre esta opción a los usuarios en el cuadro de diálogo de Apagar.

Para acceder a la configuración de Windows Update abrimos el editor de administración de directivas de grupo gpmc.msc en el equipo que tiene instaladas las herramientas de administración remota rsat y abrimos la siguiente rama de opciones:
Configuración de Equipo
 └── Directivas
     └── Plantillas administrativas
         └── Componentes de Windows
             └── Windows Update

Y se nos mostrarán las directivas disponibles. Seleccionamos la que nos interesa:



Y la habilitamos:


Publicado por primera vez en http://enavas.blogspot.com.es

GPO: Desactivar el reinicio automático de actualizaciones durante las horas activas

Las actualizaciones de Windows Update sin control son un verdadero problema porque impiden el uso del equipo durante el tiempo en que se están aplicando, a veces incluso durante horas...

Para evitar que el sistema operativo se reinicie cuando los usuarios están utilizando Windows, he activado esta directiva que lo bloquea durante las horas de actividad definidas: En mi caso, de 8:00 a 15:00.

Para acceder a la configuración de Windows Update abrimos el editor de administración de directivas de grupo gpmc.msc en el equipo que tiene instaladas las herramientas de administración remota rsat y abrimos la siguiente rama de opciones:

Configuración de Equipo
 └── Directivas
     └── Plantillas administrativas
         └── Componentes de Windows
             └── Windows Update

Y tendremos acceso a las diferentes directivas:


Habilitamos la Directiva y establecemos el período de actividad en el que no deben realizarse reinicios:


Publicado por primera vez en http://enavas.blogspot.com.es

viernes, 17 de febrero de 2017

GPO: Establecer rEFInd como gestor de arranque por defecto en Windows

Tengo montado rEFInd como gestor de arranque en equipos SIATIC e INFOLAB. 

Lo que hice para instalarlo fue crear un módulo puppet que lo instala desde Ubuntu. 

Ahora bien, como en ocasiones se perdía el arranque dual, para evitarlo, creé un script de inicio que se ejecuta en los niveles 0, 1 y 6 de Ubuntu para asegurar que rEFInd sea el gestor de arranque por defecto cuando el usuario arranque Ubuntu. Con ésto ya no lo perdía, pero si el usuario iniciaba Windows, seguía existiendo la posibilidad que se perdiese.

Para evitar que se perdiese el arranque dual de rEFInd al iniciar Windows,  he creado una política que ejecuta bcdedit para establecer rEFInd como gestor de arranque por defecto en el apagado de Windows:


Publicado por primera vez en http://enavas.blogspot.com.es

Gestionar el dominio de Windows implementado con Zentyal

Para gestionar los sistemas operativos Windows del centro, creé un dominio: INSTITUTO.EXTREMADURA.ES implementado mediante Zentyal. Para administrarlo dispongo de dos máquinas virtuales:
  • pdc: Es el controlador de dominio implemnetado mediante Zentyal.
  • rsat: Es una máquina virtual windows con las herramientas rsat instaladas para administrar políticas de grupo.
Puedo conectarme a la máquina rsat de dos formas:
  • Mediante la consola del interfaz de administración de Proxmox, donde se encuentra alojada.
  • O mediante un cliente de escritorio remoto.
El cliente de escritorio remoto que utilizo es remmina, un cliente multiprotocolo que nos permite conectarnos mediante RDP, VNC, NX, XDMCP, SSH y Telepathy.


Si nos conectamos a diferentes máquinas incluso con diferentes protocolos, podemos crear perfiles para no tener que introducir los datos cada vez que realicemos una conexión:


Un ejemplo de conexión a la máquina Windows rsat mediante RDP:


Un ejemplo de conexión a la máquina Zentyal pdc mediante SSH:


Publicado por primera vez en http://enavas.blogspot.com.es

Ver qué políticas de grupo se han aplicado a nuestro equipo y usuario

Cuando aplicamos directivas de grupo mediante el controlador de dominio, nos interesa saber si se han aplicado o no.

La forma más sencilla de ver qué configuración de directivas de grupo se ha aplicado a una máquina o cuenta de usuario es utilizar rsop (Resultant Set of Policy Management Console). 

Para utilizarlo, iniciamos sesión en un cliente Windows, pulsamos la combinación de teclas Win + R para abrir un cuadro de ejecución y escribimos rsop.msc para iniciar la herramienta:


Se abrirá una ventana emergente que muestra cómo Windows obtiene los datos del sistema:


Una vez que se abra la consola, podremos ver qué ajustes se han aplicado a nuestro equipo:


Es importante destacar que sólo se mostrarán los ajustes aplicados al equipo y a la cuenta de usuario.
Publicado por primera vez en http://enavas.blogspot.com.es

jueves, 16 de febrero de 2017

Restaurar una máquina virtual en Proxmox desde la línea de comandos

Podemos restaurar una máquina virtual desde la línea de comandos:
# qmrestore IMAGENVM VMID
donde:
  • IMAGENVM es fichero de backup de la máquina virtual.
  • VMID es el identificador de la máquina virtual.
Por ejemplo: Si queremos restaurar una máquina virtual desde un backup vzdump-qemu-101-2017_02_15-13_19_1a.lzo en una máquina con identificador 101, haríamos lo siguiente:
# qmrestore nas-backup:backup/vzdump-qemu-101-2017_02_15-13_19_1a.lzo 101
Publicado por primera vez en http://enavas.blogspot.com.es

Eliminar una máquina virtual en Proxmox desde la línea de comandos

En ocasiones no tenemos acceso al interfaz web de Proxmox. En ese caso, podemos eliminar una máquina virtual desde la línea de comandos:
# qm destroy VMID
donde VMID es el identificador de la máquina virtual.

Por ejemplo: Si queremos eliminar la máquina virtual con identificador 101, haríamos lo siguiente:
# qm destroy 101
Publicado por primera vez en http://enavas.blogspot.com.es

Actualización de Zentyal 4.2 a Zentyal 5.0

Viendo las características destacadas en la nueva versión de Zentyal 5.0, he dedicido realizar la actualización siguiendo el siguiente procedimiento:

Primero.- Realizamos un apt-get update y un apt-get upgrade para actualizar todos los paquetes de Zentyal 4.2 que se encuentra basado en trusty.

Segundo.- Cambiamos el fichero /etc/apt/sources.list del servidor Zentyal 4.2 para que utilice los repositorios oficiales de Ubuntu en lugar de usar el mirror del centro. El motivo es que tengo mirrorizado trusty pero aún no mirrorizo xenial, principalmente porque aún no tengo muchas máquinas xenial..

Tercero.- Accedemos al interfaz web de administración de Zentyal desde mi máquina y he iniciado la actualización mediante el botón "UPGRADE NOW":


El sistema nos informa de que se va a realizar la actualización y nos recomienda leer las notas de lanzamiento. Las leemos, pulsamos el botón "CONTINUE":


Y comienza el proceso de actualización:


Una vez terminado, nos recomienda reiniciar el servidor para aplicar todas las actualizaciones:


Así que pulsamos el botón "CLOSE" y lo reiniciamos cuando podamos. Es más que conveniente porque se pasa de usar trusty a xenial, pero además se cambia de un kernel 3.x a un kernel 4.x.

Una vez reiniciado, accedemos de nuevo a la interfaz de administración de Zentyal y comprobamos que ya se encuentra actualizado a Zentyal 5.0:


Cuarto.- Para terminar, como este servidor es virtual, es conveniente realizar un nuevo backup de la máquina virtual.
Publicado por primera vez en http://enavas.blogspot.com.es

Compartir almacenamiento del NAS con servidores Proxmox

Hay varios motivos por los que nos interesa configurar nuestros servidores Proxmox como clientes del NAS, como por ejemplo, alojar los backups de las máquinas virtuales.

Teniendo en cuenta mi infraestructura, he realizado la configuración para que mi dos servidores Proxmox utilicen el almacenamiento del NAS:

La configuración del almacenamiento compartido se hace directamente desde el interfaz web:


El almacenamiento compartido vía NFS del NAS se monta localmente en ambos servidores en /mnt/pve/nas-backup/.

En cuanto al NAS, lo tengo implementado con OpenMediaVault:


Por otra parte, he configurado el almacenamiento compartido vía NFS del NAS en un volúmen lógico LVM de manera que se comparta sólo con los dos servidores Proxmox añadiendo la siguiente entrada al fichero de configuración NFS /etc/exports:
/export/backup 172.19.144.2(fsid=2,rw,no_root_squash,subtree_check,secure) 172.19.144.3(fsid=2,rw,no_root_squash,subtree_check,secure)
Publicado por primera vez en http://enavas.blogspot.com.es

Restaurar una máquina virtual en Proxmox

Restaurar una máquina virtual desde la interfaz web de Proxmox es algo realmente simple:

Primero seleccionamos el almacenamiento donde alojamos las copias de seguridad de nuestras máquinas virtuales. 

A continuación hacemos clic en "Contenido" para mostrar las copias de seguridad de que disponemos. 

Seleccionamos la máquina que queremos restaurar.

Y pulsamos el botón "Restaurar":


Nos mostrará información acerca del origen, el destino y nos pedirá que introduzcamos el VMID con el que queremos restaurar la máquina:


Pulsamos el botón "Restaurar" y veremos el progreso de restauración:


Publicado por primera vez en http://enavas.blogspot.com.es

Hacer un backup manual de máquinas virtuales en Proxmox

Una de las ventajas de utilizar un sistema de virtualización es que podemos realizar un backup de las máquinas virtuales, y si sucede un problema, restaurarlas en un tiempo óptimo. 

Es muy sencillo realizar un backup manual de cualquiera de nuestras máquinas desde la interfaz de administración de Proxmox. Tan sólo tenemos que hacer un clic sobre el nodo del cluster donde se encuentra alojada y seleccionar la máquina. Se nos mostrará un menú de acciones que podemos efectuar sobre ella. Tan sólo tenemos que hacer clic en "Respaldo" y, a continuación, realizar un clic  sobre el botón "Respaldar ahora".

Publicado por primera vez en http://enavas.blogspot.com.es

Configurar un cluster Proxmox VE 4 con dos servidores

Proxmox VE 4 nos permite crear clústeres de hasta 32 nodos físicos.

Crear un cluster Proxmox nos aporta interesantes beneficios:
  • Nos proporciona una gestión centralizada, lo que facilita la configuración de los nodos desde un mismo lugar. 
  • Es muy sencillo migrar una máquina virtual de un nodo a otro. 
  • Se puede utilizar al menos dos servidores Proxmox en un cluster, si bien es cierto que si queremos configurar Proxmox para alta disponibilidad, necesitaremos al menos tres nodos.
Primero.- Creamos el cluster en el servidor principal Proxmox:
# pvecm create instituto

Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/urandom.
Writing corosync key to /etc/corosync/authkey.
Segundo.- Comprobamos el estado del cluster:
# pvecm status
Quorum information
------------------
Date:             Wed Feb 15 10:36:15 2017
Quorum provider:  corosync_votequorum
Nodes:            1
Node ID:          0x00000001
Ring ID:          1/4
Quorate:          Yes

Votequorum information
----------------------
Expected votes:   1
Highest expected: 1
Total votes:      1
Quorum:           1  
Flags:            Quorate 

Membership information
----------------------
    Nodeid      Votes Name
0x00000001          1 192.168.1.2 (local)
Tercero.- Añadimos el segundo servidor al cluster conectándonos vía ssh al nodo y ejecutando el siguiente comando:
# pvecm add 192.168.1.2

copy corosync auth key
stopping pve-cluster service
backup old database
waiting for quorum...OK
generating node certificates
merge known_hosts file
restart services
successfully added node 'ldap' to cluster.
Como podéis observar, ejecutamos el comando en el nodo que queremos añadir al cluster indicando la ip del nodo donde hemos creado el cluster.

Cuarto.- Ahora podemos comprobar el estado del cluster en cualquiera de los nodos del mismo:
# pvecm status
Quorum information
------------------
Date:             Thu Feb 16 06:35:39 2017
Quorum provider:  corosync_votequorum
Nodes:            2
Node ID:          0x00000002
Ring ID:          1/12
Quorate:          Yes

Votequorum information
----------------------
Expected votes:   2
Highest expected: 2
Total votes:      2
Quorum:           2  
Flags:            Quorate 

Membership information
----------------------
    Nodeid      Votes Name
0x00000001          1 192.168.1.2
0x00000002          1 192.168.1.3 (local)

Es importante destacar que no deben existir máquinas virtuales en los nuevos nodos que vayamos a añadir al cluster.
Publicado por primera vez en http://enavas.blogspot.com.es