Algo de Linux: marzo 2017

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