Planeta Sysadmin

de sysadmins para sysadmins

December 04, 2018

Sobre bits

Cómo exportar una máquina virtual con PowerCLI

En más de una ocasión me ha tocado exportar una máquina virtual de un vCenter para luego cargarla en otro y, por algún oscuro misterio, la exportación del cliente web de vSphere no me lo ha permitido. En esas situaciones nos puede ser muy útil saber exportar una máquina virtual con PowerCLI, una tarea la mar de sencilla que además nos aportará algunas funciones extra.Cómo exportar una máquina virtual con PowerCLI

Encontrando el cmdlet correcto

Cuando instalamos PowerCLI en nuestra máquina podemos ver que éste se compone de varios módulos. Los módulos relacionados con vSphere se encuentran en VMware.VimAutomation.Core, por lo que siempre que queramos buscar un módulo de vSphere deberemos buscar en él.

Sabiendo esto vamos a ver qué cmdlets tenemos disponibles que contengan el verbo ‘Export’:

Exportar máquina virtual con PowerCli

Como podemos ver existe el cmdlet Export-VM, que tiene pinta de hacer lo que estamos buscando, pero un detalle importante es que éste es un Alias de Export-VApp como podemos ver en la columna CommandType. Dado que es un alias y que en Hyper-V ya existe un cmdlet llamado Export-VM para esta entrada utilizaremos el cmdlet original: Export-VApp.

Exportar una máquina virtual con PowerCLI mediante Export-VApp

Ahora que ya tenemos localizado el cmdlet que vamos a utilizar podemos ponernos en marcha. Exportar una VM con PowerCLI es tan sencillo como:

# Obtenemos la VM a exportar
$Vm = Get-VM -Name 'Sobrebits VM'

# Apagamos la VM para poderla exportar
$Vm | Stop-VM

# Exportamos la VM
$Vm | Export-VApp -Destination 'C:\Export\'

Vamos a repasar el código:

  • Línea 2: Aquí obtenemos la máquina virtual a exportar con PowerCLI y la guardamos en la variable $Vm con la que trabajaremos en adelante.
  • Línea 5: Apagamos la VM para poder exportarla.
  • Línea 8: Exportamos la máquina virtual y marcamos el Path en el que ubicar los archivos de la misma con la variable -Destination.

Cuando acabe la exportación deberíamos ver algo parecido a esto:

Máquina exportada a OVF con PowerCLI

Este es el uso básico del cmdlet, pero si consultamos su ayuda podemos ver que dispone de alguna funcionalidad extra la mar de interesante:

# Exportamos la VM a OVA y de forma asíncrona
$Vm | Export-VApp -Destination 'C:\Export\' -RunAsync -Format Ova

Vamos a explicar los dos nuevos parámetros:

  • RunAsync:  Este parámetro es común en muchos otros comandos de PowerCLI. Si activamos este flag la tarea que estemos ejecutando (en este caso la exportación de una VM) se ejecuta en segundo plano y nos libera al instante la línea de comandos. Esto nos puede ser útil si queremos ejecutar más de una exportación a la vez puesto que las podemos dejar como tareas y seguir trabajando en nuestra sesión actual de PowerCLI.
  • Format: Por defecto este cmdlet exporta las máquinas virtuales en formato .ovf. Utilizando -Format podemos alterar este comportamiento y exportar una máquina virtual a .ova desde PowerCLI, con lo que conseguiremos tener empaquetada nuestra máquina virtual en un solo archivo.

Una vez finalice la exportación de la VM a OVA podremos ver que en la carpeta existe un único archivo .ova:

Exportar OVA con PowerCLI

Conclusión

Con Export-VApp vamos a ser capaces de ejecutar tareas de exportación de máquinas virtuales desde la línea de comandos, lo que combinado con un poco de scripting básico y la programación de la ejecución de los mismos puede resultar en exportacines de VMs fuera de horario y de forma totalmente desatendida.

Espero que os haya gustado la entrada.

¡Nos leemos en la próxima!

La entrada Cómo exportar una máquina virtual con PowerCLI aparece primero en Sobrebits.

by Marc Meseguer at December 04, 2018 01:27 PM

November 28, 2018

Sobre bits

PSSonicWall: Consultas a SonicWall desde PowerShell

Una de las tecnologías con las que acostumbro a trabajar en mi día a día son firewalls SonicWall. Hace un tiempo busqué en la PowerShell Gallery algún módulo para trabajar nativamente con SonicWall desde PowerShell y mi sorpresa fue que no encontré ninguno.

En las últimas semanas he estado trabajando en un módulo con el que realizar consultas a firewalls SonicWall desde PowerShell y hoy os traigo la primera versión de PSSonicWall.

Acerca de PSSonicWall

PSSonicWall es un módulo hecho 100% con PowerShell del que podéis encontrar el código fuente en su repositorio de GitHub. Se sirve de la SonicOS API, la REST API del sistema operativo de SonicWall introducida en la versión 6.5.1.

Con PSSonicWall podremos, en su primera versión, realizar consultas a cualquier firewall SonicWall desde PowerShell gracias a que todos los appliances utilizan el mismo sistema operativo. Podremos sacar la configuración de las interfaces, las zonas, objetos y muchas cosas más.

PSSonicWall en PowerShell Gallery

Cómo habilitar la SonicOS API

Por defecto en todos los firewalls SonicWall la SonicOS API viene desactivada, por lo que antes de nada deberemos habilitarla:

  • Nos logeamos a nuestro firewall con una cuenta de administrador.
  • Entramos en la pestaña Manage.
  • Appliance > Base Settings.
  • Buscamos la sección SonicOS API.
  • Marcamos:
    • Enable SonicOS API.
    • Enable RFC-2617 HTTP Basic Access authentication.

SonicWall desde PowerShell

Si no disponemos de estas opciones lo más probable es que nuestro firewall tenga una versión inferior a 6.5.1, por lo que si queremos utilizar PSSonicWall antes deberemos actualizarlo.

Instalando PSSonicWall

PSSonicWall es el primer módulo que subo a la PowerShell Gallery (más acerca de esto en futuros post), lo que hace que instalarlo en cualquier sistema sea de lo más sencillo:

# Para el usuario actual:
Install-Module -Name PSSonicWall -Scope CurrentUser

# Para todos los usuarios de la máquina:
Install-Module -Name PSSonicWall

Una vez acabado el proceso ya tendremos todo lo necesario para interactuar con nuestro appliance SonicWall desde PowerShell. Como siempre podemos consultar todas las funciones disponibles con Get-Command:

Funciones de PSonicWall

Conectar y desconectar a SonicWall desde PowerShell

El primer paso para interactuar con SonicWall desde PowerShell es autenticarse contra el firewall en cuestión. Para ello nos valdremos de Connect-SWAppliance, al que podremos pasarle un objeto PSCredential o, de no hacerlo, nos solicitará unas credenciales.

Connect-SWAppliance -Server 192.168.168.168

Una vez finalice la ejecución ya podremos empezar a interactuar con nuestro appliance.

Es recomendable que cuando acabemos de ejecutar los comandos pertinentes sobre nuestro SonicWall desconectemos la sesión. Para ello simplemente debemos ejecutar Disconnect-SWAppliance:

Disconnect-SWAppliance

Ejecutando comandos sobre SonicWall desde PowerShell

En esta primera versión de PSSonicWall, como habréis podido comprobar en la captura superior, únicamente se incluyen funciones con el verbo Get, por lo que por el momento únicamente podremos listar información. En futuras releases se irán incorporando nuevas funciones con las que podremos automatizar la creación de NATs y ACLs de SonicWall desde PowerShell.

Las funciones actualmente disponibles son las siguientes:

  • Get-SWAccessRule: Lista las Access Rules.
  • Get-SWAddressGroup: Lista los Address Groups.
  • Get-SWAddressObject: Lista los Address Objects.
  • Get-SWDns: Lista los DNS.
  • Get-SWInterface: Lista las Interfaces.
  • Get-SWNatPolicy: Lista los NAT.
  • Get-SWRoutePolicy: Lista las reglas de Routing.
  • Get-SWSchedule: Lista las programaciones.
  • Get-SWServiceGroup: Lista los service Group.
  • Get-SWZone: Lista las Zonas.

Si, por ejemplo, quisieramos listar un objeto llamado ‘Sobrebits test’ podríamos hacerlo de la siguiente manera:

Listar Address Objects de SonicWall desde PowerShell

Hay que tener en cuenta que todo lo que devuelven estas funciones son objetos, por lo que nos podremos valer de cmdlets típicos de manipulación de objetos para hacer lo que queramos con el resultado:

# Podemos filtrar un resultado con Where-Object
Get-SWAddressObject | Where Name -eq 'Sobrebits Test'

# Podemos seleccionar campos con Select-Object
Get-SWAddressObject | Select Name,Zone

# O incluso podemos exportar el resultado a csv con Export-Csv
Get-SWAddressObject | Export-Csv -Path 'C:\Sobrebits\export.csv'

Obteniendo ayuda en PSSonicWall

Como en todo módulo que se precie, todas las funciones incluidas en PSSonicWall traen su propia ayuda. Podemos utilizar Get-Help para consultar la funcionalidad detallada de cada una de las funciones así como ejemplos de uso:

Ayuda en PSSonicWallConclusión

De momento esto es todo lo que os quería contar sobre PSSonicWall, en futuras entradas veremos casos de uso más concretos del módulo e iré informando sobre nuevas funciones añadidas. ¡Nos vemos en próximas entradas!

La entrada PSSonicWall: Consultas a SonicWall desde PowerShell aparece primero en Sobrebits.

by Marc Meseguer at November 28, 2018 07:00 AM

November 25, 2018

MagMax Blog

Organización

Muchos de los artículos más curiosos comienzan en un hilo en Twitter. Ése es el caso de éste.

En un hilo con @recena, éste dijo:

I am really tired of the trends around job titles etc.... We should talk about
software engineer and responsibilities, that's all.

Y eso es lo que ha inspirado este artículo.

Leer más… (quedan 3 minutos de lectura)

by Miguel Ángel García at November 25, 2018 02:25 PM

November 23, 2018

debianhackers.net

[truco] mariadb se va de paseo (MySQL server has gone away)

O dicho en el idioma de los errores de sistema, ERROR 2006 (HY000) at line 21232: MySQL server has gone away.

$ mysql -h localhost -u user -pUltraSecurePass mydatabase < dump.sql
ERROR 2006 (HY000) at line 21232: MySQL server has gone away
$

El lío

mariadb

mariadb

El error me apareció cuando intentaba importar la base de un wordpress en una instalación de MariaDB 10.1.37-0+deb9u1. Tengo que decir que el fichero SQL no es muy diferente al montón de importaciones que he hecho con MySQL, tiene un tamaño aproximado aunque sí que ha habido ficheros varios megas más grandes en el mismo servidor. Lo inusual del error, el que no fuese un error de sintaxis del fichero me hacía sospechar de la configuración de MariaDB.

La solución

Hay que aumentar una variable del sistema que se encarga del tamaño máximo del buffer donde se almacenan los paquetes, max_allowed_packet. Basta con añadir (o modificar) el valor y ponerlo a algo tremendo para que no falle, en este caso, 2 GB.

sudo sed -i '/max_allowed_packet/d' /etc/mysql/my.cnf
echo "max_allowed_packet = 2G" | sudo tee -a /etc/mysql/my.cnf
sudo /etc/init.d/mysql restart

Tras aplicar el cambio, ya se puede importar sin problema volcados de wordpress o de lo que sea.

$ mysql -h localhost -u user -pUltraSecurePass mydatabase < dump.sql
$

by Diego Martínez Castañeda at November 23, 2018 12:31 PM

November 22, 2018

Sobre bits

Iniciar RDP o SSH sobre una VM desde PowerCLI

Si como yo os pasáis el día conectados a una infraestructura VMware vSphere haciendo conexiones remotas a diferentes máquinas virtuales sabréis que utilizar la consola integrada de VMware no es la mejor de las opciones. Como sustitución acostumbro a utilizar RDP para las máquinas virtuales Windows y SSH para las GNU/Linux, el gran problema para mi siempre ha sido cómo gestionar toda esa cantidad de conexiones remotas.

Si bien existe software para gestionar dichas conexiones siempre he encontrado que es una solución demasiado manual y que escala muy mal conforme añadimos máquinas a la ecuación. Puesto que me tiro todo el día con una consola de PowerShell abierta y conectado a mi infraestructura me decidí a crear un par de funciones muy sencillitas con las que hacer dicha gestión desde PowerShell de una forma muy fácil y dinámica.

Averiguar la IP enrutable de una VM

La primera problemática para crear una solución de este tipo es obtener la IP correcta sobre la que queremos conectarnos. Es posible que esto no aplique a todo el mundo, pero cuando una VM tiene más de una IP debemos obtener la que esté en el mismo rango que su gateway para asegurarnos de que seremos capaces de enrutar hacia ella en el caso de estar en una VLAN distinta.

Para conseguir la IP correcta de la máquina virtual utilizo esta función:

Function Get-VMIP {
    # Devuelve la IP principal de la VM (Determinado por la primera IP de la misma subred del GW)
    Param(
        [Parameter(
            Position = 0,
            ValueFromPipeline=$true,
            Mandatory=$true
        )]
        [string]$Name
        )
    $ips = (Get-VM $Name).ExtensionData.Guest.Net.IpAddress

    # Si solo existe una IP la devolvemos como principal
    if ($ips.Count -eq 1) {
        Return $ips
    }
    # Si existe más de una IP devolvemos como principal la que está en la misma subred que el GW (solo aplica a las /24)
    elseif ($ips.Count -gt 1) {
        # Obtenemos el gateway para comparar
        $gateway = (Get-VM $Name).ExtensionData.Guest.Ipstack.IpRouteConfig.IpRoute.Gateway.IpAddress
        # Recorremos las IPs
        foreach ($ip in $ips) {
            if ($gateway[0].Split('.')[2] -eq $ip.Split('.')[2]) {
                Return $ip
            }
        }
    }
    # Si no existen IP's devolvemos null
    else {
        Return $null
    }
}

Hay que teneren cuenta que esta solución sólo funciona con redes /24, que es con las que trabajo yo en mi infraestructura, pero se podría adaptar para funcionar con cualquier máscara.

Como siempre vamos a ver qué hace cada parte del código:

  • Líneas 3 a 10: Definimos el parámetro $Name que corresponderá al nombre de la VM de la que obtendremos la IP.
  • $ips = (Get-VM $Name).ExtensionData.Guest.Net.IpAddress: Obtenemos todas las IPs de la máquina virtual.
  • Líneas 14 a 16: Si sólo existe una IP la devolvemos.
  • Líneas 18 a 27: Si existe más de una IP sacamos el gateway y comparamos todas las IPs con éste hasta encontrar la que pertenezca a la misma subred. Una vez encontrada devolvemos la IP.
  • Líneas 29 a 31: Si no existen IPs devolvemos $null.

Con nuestra nueva función cargada ya podríamos ejecutar Get-VMIP para obtener la IP de una máquina virtual:

Iniciar RDP con PowerCLI

Iniciar RDP o SSH sobre una VM

Ahora que ya tenemos creada nuestra función Get-VMIP podemos seguir con la función que realmente utilizaremos: Start-VMRc. Para la conexión SSH Start-VMRC se apoyará en Putty, por lo que deberemos descargarlo y ubicarlo en algún lugar de nuestro path, como C:\Windows\System32.

function Start-VMRc {
    # Inicia una conexión remota RDP o SSH en función del sistema operativo
    param  
    (  
        [Parameter(
            Position = 0,
            ValueFromPipeline=$true,
            Mandatory=$true
        )]
        [ValidateNotNullOrEmpty()]
        [string]$Name
    )
    # Determinamos la IP enrutable de la máquina
    $ip = Get-VMIP -Name $Name
    # Si es una máquina Windows iniciamos RDP
    if ((Get-VM -Name $Name).GuestId -like '*windows*'){
        mstsc /v:$ip
    }
    # Si es una máquina linux iniciamos Putty
    else {
        putty $ip
    }
}

Vamos a desglosar la función:

  • Líneas 3 a 12: Definimos el parámetro $Name que corresponderá al nombre de la VM a la que nos conectaremos remotamente.
  • $ip = Get-VMIP -Name $Name: Invocamos Get-VMIP para obtener la IP de la VM.
  • Líneas 16 a 18: Determinamos si es una máquina Windows y, en caso de serlo, iniciamos un RDP a la IP de la misma.
  • Líneas 20 a 22: De no ser una máquina Windows iniciamos SSH mediante Putty a su IP.

Si tenemos las dos funciones cargadas ya podemos ejecutar Start-VMRC para iniciar RDP contra nuestro servidor con:

Start-VMRC 'Sobrebits VM'

Conclusión

Una vez tengamos creadas las dos funciones podemos añadirlas a nuestro perfil tal y como vimos en la entrada ‘Cómo personalizar nuestro perfil de PowerShell‘.

Yo particularmente utilizo a diario estas dos funciones y os puedo asegurar que si os acostumbráis a ellas os pueden ahorrar una cantidad tremenda de tiempo.

¡Espero que os sea útil!

La entrada Iniciar RDP o SSH sobre una VM desde PowerCLI aparece primero en Sobrebits.

by Marc Meseguer at November 22, 2018 08:00 AM

November 19, 2018

blogofsysadmins.com

Mostrar información del certificado SSL desde consola (CLI)

Este pequeño post que os escribo hoy os va a servir a todos aquellos sysadmins, que quieran monitorizar en (nagios por ejemplo) o simplemente ver las fechas de expiración u otros datos de los certificados SSL desde consola. Para ver la fecha de expiración, usamos nmap: Articulos relacionados:Magazine Hacker Highschool [PDF] (0)Actualizar y recrear en …

by GhOsTi at November 19, 2018 12:24 PM

November 15, 2018

Sobre bits

PowerCLI one-liners: Habilitar masivamente ESXi Shell y SSH con PowerCLI

Si bien VMware te avisa con un bonito warning al activarlos, la ESXi Shell y la administración vía SSH son herramientas valiosísimas para hacer troubleshooting en nuestros servidores ESXi. En la entrada de hoy vamos a ver cómo habilitar de forma masiva ESXi Shell y SSH con PowerCLI en nuestros host ESXi para evitar tener que hacerlo a mano uno por uno.

¿Cómo habilitar ESXi Shell y SSH con PowerCLI?

Como siempre, antes de realizar cualquier acción en PowerShell/PowerCLI debemos buscar los cmdlets que nos pueden ayudar a realizar las acciones que necesitamos. Como en este caso lo que necesitamos es manejar los servicios de VMware podríamos hacer la siguiente búsqueda con Get-Command:

Cmdlets Servicios PowerCLI

Si utilizamos Get-VMHostService podemos ver qué servicios tienen nuestros ESXi y su estado:

Servicios ESXi Shell y SSH con PowerCLI

Como podemos ver marcados en rojo ya tenemos los dos servicios que buscamos: TSM (ESXi Shell) y TSM-SSH (SSH). Otras cosas interesantes que podemos observar en la captura son que los servicios no están habilitados (Policy = off) y que no están activos (Running = False). Si juntamos estas piezas con los cmdlets de la captura anterior ya tenemos el one-liner hecho:

Get-VMHost | Get-VMHostService | Where Key -like 'TSM*' | Set-VMHostService -Policy on -Confirm:$false | Start-VMHostService -Confirm:$false

Vamos a desglosar la línea:

  • Get-VMHost: Listamos todos los host.
  • Get-VMHostService | Where Key -like ‘TSM*’: Obtenemos los servicios y filtramos por los que en el campo Key contienen TSM (ESXi Shell y SSH).
  • Set-VMHostService -Policy on -Confirm:$false: Habilitamos el servicio ponendo el parámetro Policy a on.
  • Start-VMHostService -Confirm:$false: Arrancamos el servicio.

La salida del comando debería mostrarnos como ambos servicios han sido arrancados y habilitados:

Servicios ESXi arrancados

Bola extra: Quitar el warning ‘SSH está habilitado en este host’

Una vez ejecutado el one-liner, si nos conectamos a la consola de administración de un ESXi o de nuestro vCenter deberíamos ver este par de mensajes:

  • La shell de ESXi está habilitado en este host.
  • SSH está habilitado en este host.

SSH está habilitado en este host

Como decía al principio de la entrada, VMware nos muestra estos avisos porque son considerados una falla de seguridad. Si queréis asumir el riesgo y quitar estos mensajes, si bien como siempre podéis hacerlo desde la propia consola gráfica, podemos hacerlo con otro one-liner:

Get-VMHost | Set-VmHostAdvancedConfiguration -Name UserVars.SuppressShellWarning -Value 1

Conclusión

Y hasta aquí el one-liner de hoy. Podéis consultar los anteriores PowerCLI one-liners y los PowerShell one-liners desde sus respectivos tags.

¡Espero que os sirvan!

La entrada PowerCLI one-liners: Habilitar masivamente ESXi Shell y SSH con PowerCLI aparece primero en Sobrebits.

by Marc Meseguer at November 15, 2018 02:30 PM

November 13, 2018

DaboBlog

Hablando de Software Libre y Seguridad en Oviedo

El pasado 20 de octubre tuve la oportunidad de dar una charla para el HackLab Pica Pica en unas jornadas sobre Software Libre organizadas por ellos (fueron también ellos quienes han hecho posible que venga Richard Stallman en dos ocasiones a Asturias).

Allí hablé de unas cuantas cuestiones sobre Seguridad. Desde planteamientos técnicos a otros más conceptuales. Os dejo un enlace al PDF de mi presentación con varios links dentro de él para que os podáis hacer una mejor idea de los temas que abarqué en el evento.

Un evento muy especial ya que mi hija de 6 meses estaba entre el público ;). La verdad es que con la gente de Pica Pica da gusto hacer cualquier tema. Son personas muy (muy) comprometidas con el Software Libre y a las que hay que apoyar sí o sí. Muchas gracias a ellos y a varios amigos que se pasaron por allí.

La entrada Hablando de Software Libre y Seguridad en Oviedo se publicó primero en DaboBlog.

by David Hernández (Dabo). at November 13, 2018 05:59 PM

Sobre bits

Ejecutar script de PowerShell como servicio de Windows

Lo más habitual cuando ejecutamos un script de PowerShell es que o bien lo ejecutemos a mano o bien lo hagamos automáticamente de forma periódica ejecutando PowerShell como tarea programada. En la entrada de hoy veremos un tercer escenario, ‘instalaremos’ un script de PowerShell como servicio de Windows.

¿Por qué ejecutar un script de PowerShell como servicio?

Si bien PowerShell no está diseñado para este tipo de uso, eso no quiere decir que no podamos hacerlo. Ejecutar un script de PowerShell como servicio de Windows nos va a permitir tenerlo corriendo las 24 horas del día y nos va a asegurar que si por cualquier motivo la máquina que lo ejecuta sufre un reinicio éste vuelva a ejecutarse.

Conociendo NSSM

NSSM (the Non-Sucking Service Manager) es una pequeña aplicación que nos va a permitir ejecutar cualquier binario como servicio de forma muy sencilla. Para nosotros el binario será el ejecutable de PowerShell que llamará al script que vamos a ejecutar.

Podemos descargar NSSM desde su página web. Como es una aplicación portable lo que descargaremos será un zip con la versión de 32bits y la de 64. Para hacer el proceso más sencillo podemos descomprimir el ejecutable directamente en C:\Windows\System32 para asegurarnos de que lo tenemos en nuestro PATH.

Diseñando el script de PowerShell

Tenemos que tener en cuenta que no cualquier script de PowerShell es apto para ser ejecutado como servicio. Necesitamos que la ejecución de nuestro script nunca finalice, porque de hacerlo simplemente nuestro servicio se pararía. Para no finalizar nunca la ejecución del script podemos valernos de un simple While:

# Creamos un bucle infinito para que la ejecución del script se mantenga
while ($true) {
    # Aquí dentro ejecutamos nuestro código
}

Otra cosa que deberemos tener en cuenta es cada cuanto queremos que se ejecute el bucle. Si el contenido de nuestro script realizara tareas demandantes de recursos y volviera a ejecutarse justo después de finalizar nos podríamos encontrar con que consumiera gran cantidad de recursos de nuestra máquina de forma continuada. Es por ello que es buena idea añadir un tiempo de espera después de cada ejecución que vendrá determinado por la acción que vaya a realizar el script:

# Creamos un bucle infinito para que la ejecución del script se mantenga
while ($true) {
    # Aquí dentro ejecutamos nuestro código

    # Paramos la ejecución durante 60 segundos
    Start-Sleep -Seconds 60
}

Para esta entrada vamos a hacer un script que se asegure de que el servicio spooler siempre esté ejecutándose, algo que a priori no parece muy útil pero que puede ser útil con algún otro servicio con tendencia a caerse.

# Creamos un bucle infinito para que la ejecución del script se mantenga
while ($true) {
    # Obtenemos el servicio Spooler
    $Servicio = Get-Service -Name spooler
    # Si tiene estado stopped lo volvemos a iniciar
    if ($Servicio.Status -eq 'stopped') {
        $Servicio | Start-Service
    }
    # Paramos la ejecución durante 60 segundos
    Start-Sleep -Seconds 2
}

‘Instalando’ el script de PowerShell como servicio de Windows

Ahora que ya tenemos instalado NSSM y tenemos a punto nuestro script de PowerShell podemos pasar a ‘instalarlo’ como servicio. Para ello abrimos una consola de PowerShell como administrador (también podríamos hacer esto desde cmd) y vamos a definir las variables que necesitaremos pasarle a NSSM:

# Nombre que daremos a nuestro servicio
$NombreServicio = 'Sobrebits'
# Ruta del ejecutable de PowerShell
$RutaPowershell = 'C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe'
# Argumentos a pasar al ejecutable de PowerShell:
# ExecutionPolicy para asegurarnos de que no se bloquea la ejecución del script
# File donde indicamos la ruta de nuestro script
$Argumentos= '-ExecutionPolicy Unrestricted -File C:\Scripts\Servicio_PowerShell.ps1'

Y por último ejecutaremos nuestro NSSM con las variables que acabamos de crear:

nssm install $NombreServicio $RutaPowershell $Argumentos

Si todo ha ido bien ya deberíamos ver ‘instalado’ nuestro script de PowerShell como servicio así que solo haría falta arrancarlo y ver si funciona:

Servicio Sobrebits

Si queremos eliminar el servicio siempre podemos hacerlo mediante:

nssm remove $NombreServicio confirm

Conclusión

Ejecutar un script de PowerShell como servicio de Windows abre un abanico aún más grandes de automatización a nuestros sistemas, así que espero que le podáis sacar partido a NSSM.

La entrada Ejecutar script de PowerShell como servicio de Windows aparece primero en Sobrebits.

by Marc Meseguer at November 13, 2018 08:00 AM

November 07, 2018

Sobre bits

Primeros pasos con Visual Studio Code para PowerShell

Cuando empezamos con cualquier lenguaje de scripting es habitual que editemos nuestros scripts utilizando cualquier editor de texto como Notepad en Windows o Vi en GNU/Linux. Por suerte cuando empiezas con PowerShell enseguida te encuentras con el más que funcional Windows PowerShell ISE, un editor que puede darnos muchas horas de scripting gracias a sus funciones integradas. En la entrada de hoy vamos a empezar con lo que probablemente sea una serie sobre las bondades de Visual Studio Code para PowerShell, un editor que va a llevar nuestras sesiones de programación al siguiente nivel.

Visual Studio Code para PowerShell

¿Qué es Visual Studio Code?

Visual Studio Code es un editor de código desarrollado por Microsoft que se encuentra disponible en Windows, GNU/Linux y MacOS. El programa es gratuito y de código abierto, y lo podemos descargar desde su página web. Visual Studio Code ofrece multitud de características, aquí van unas cuantas:

  • Soporte para extensiones con marketplace propio.
  • Integración con Git.
  • Debugging.
  • Interfaz de línea de comandos integrada.
  • Gestión de proyectos de código.
  • Temas personalizables.

Por defecto  en Visual Studio Code se incluye soporte para JavaScript, TypeScript, CSS o HTML, pero se puede extender dicho soporte mediante plugins, incluyendo el de Visual Studio Code para PowerShell. No vamos a profundizar en todas ellas, pero esta es una pequeña muestra de las características de Visual Studio Code para PowerShell:

  • Resaltado de sintaxis.
  • Snippets‘ de código reutilizables.
  • IntelliSense.
  • Análisis de código basado en PowerShell Script Analyzer.
  • Ayuda online de cmdlets.
  • Debugging con soporte de consola interactiva.
  • Búsqueda de referencias de cmdlets y variables.
  • Y mucho, mucho más.

Cómo empezar con Visual Studio Code para PowerShell

Empezar a desarrollar con VSCode para PowerShell no puede ser más sencillo: necesitamos instalar el software y después instalar el plugin de PowerShell y podemos ponernos en marcha.

Para instalar Visual Studio Code en cualquier plataforma deberemos dirigirnos a su página de descarga y obtener el instalador correspondiente. Una vez ejecutado el instalador no tendremos que hacer más que un next, next, finish para completarlo.

Cuando abrimos por primera vez el editor nos encontraremos con algo parecido a esto:

VSCode para PowerShell bienvenid
Para añadir el soporte de PowerShell para VSCode deberemos pulsar en Herramientas y lenguajes, que nos llevará al buscador de extensiones. Si hacemos un poco de scroll o directamente buscamos ‘PowerShell’ en el buscador encontraremos la extensión que buscamos:

VSCode para PowerShell instalarEvidentemente debemos pulsar sobre el botón Instalar para empezar con su instalación. Cuando ésta complete nos aparecerá el botón Recargar, con el que Visual Studio Code volverá a arrancar con la extensión de PowerShell ya cargada.

Primeros pasos con VSCode para PowerShell

Ahora que ya tenemos todo preparado para desarrollar nuestros scripts de PowerShell toca explorar un poco la interfaz de VSCode.

A mano izquierda veremos cinco iconos donde se concentra gran parte de la funcionalidad del editor:

  • Explorador: Desde aquí podremos realizar toda la gestión de carpetas y archivos y navegar por los mismos.
  • Buscar: Un buscador para encontrar trozos de código en nuestras carpetas y archivos abiertos y con el que podremos incluso reemplazar dichos trozos.
  • Control de código fuente: Desde aquí podremos interactuar con gestores de código fuente como Git directamente desde la interfaz de VSCode.
  • Depurar: Sección desde la que podremos depurar nuestro código.
  • Extensiones: Aquí podremos administrar todo lo relativo a las extensiones de Visual Studio Code. Es desde donde hemos instalado anteriormente la extension de PowerShell.

Si nos dirigimos a Explorador podremos pulsar sobre el botón Abrir carpeta y podremos abrir nuestra primera área de trabajo:

VSCode para PowerShell área de trabajoEs hora de editar un archivo .ps1 y ver cómo se presenta el editor:

Algunas cosas interesantes aquí:

  • En la parte superior podemos ver como se ha abierto el archivo en una pestaña. Podemos abrir las que queramos.
  • Vemos algunas de las funcionalidades del editor, como el resaltado de sintaxis o como se marca la apertura y cierre de las llaves.
  • En la parte inferior podemos ver la consola de PowerShell integrada. Desde aquí podremos ver la salida de nuestros scripts cuando los ejecutemos.
    • Podemos ver como existe un desplegable para elegir qué consola utilizar.
    • Con los botones a la derecha del desplegable anterior podemos abrir nuevas terminales, dividir la actual o eliminarla.

Por último, podemos iniciar la depuración de forma rápida pulsando F5 y ver como se ejecuta el script en la consola que tenemos abierta en la parte inferior:

Ejecución del script

Conclusión

En la entrada de hoy hemos rascado la superficie de Visual Studio Code para PowerShell, pero os recomiendo que instaléis esta joya de editor y empecéis a desarrollar vuestras funciones y scripts desde él, veréis que en cada menú existen pequeñas funcionalidades de lo más útiles. En futuras entradas traeremos vistas más en detalle de su funcionalidad.

¡Feliz automatización!

La entrada Primeros pasos con Visual Studio Code para PowerShell aparece primero en Sobrebits.

by Marc Meseguer at November 07, 2018 08:00 AM

November 04, 2018

CloudAdmins.org

Desplegando PaaS en un “click”

enter

Siguiendo en la línea del posts sobre Infraestructura como Código (IaC) con la herramienta Terraform, os traemos un nuevo tutorial para desplegar la plataforma de PaaS Rancher de forma totalmente automatizada utilizando RKE.

RKE es el acrónimo de Rancher Kubernetes Engine y se trata de un instalador de Kubernetes escrito en Golang. Es fácil de usar y no requiere mucha preparación por parte del usuario para comenzar.

Como en el tutorial anterior utilizaremos el provider de Terraform para OpenNebula, en esta ocasión utilizaremos una versión mejorada del provider desarrollado por el equipo de Blackberry.

Para acabar recordaros que el próximo 12 y 13 de Noviembre se celebra una nueva edición de la OpenNebulaConf en esta ocasión el lugar elegido a sido Amsterdam y algunos de los miembros de Cloudadmins estaremos allí y participaremos con la ponencia: Hybrid Clouds: Dancing with “Automated” Virtual Machines

Tutorial

Install Terraform

To install Terraform, find the appropriate package for your system and download it

$ curl -O https://releases.hashicorp.com/terraform/0.11.10/terraform_0.11.10_linux_amd64.zip

After downloading Terraform, unzip the package

$ sudo mkdir /bin/terraform
$ sudo unzip terraform_0.11.10_linux_amd64.zip -d /bin/terraform

After installing Terraform, verify the installation worked by opening a new terminal session and checking that terraform is available.

$ export PATH=$PATH:/bin/terraform
$ terraform --version

Add Terraform providers for Opennebula and RKE

You need to install go first: https://golang.org/doc/install

Install Prerequisites

$ sudo apt install bzr

Use the wget command and the link from Go to download the tarball:

$ wget https://dl.google.com/go/go1.10.linux-amd64.tar.gz

The installation of Go consists of extracting the tarball into the /usr/local

$ sudo tar -C /usr/local -xvzf  go1.10.linux-amd64.tar.gz 

We will call our workspace directory projects, but you can name it anything you would like. The -p flag for the mkdir command will create the appropriate directory tree

$ mkdir -p ~/projects/{bin,pkg,src}

To execute Go like any other command, we need to append its install location to the $PATH variable.

$ export PATH=$PATH:/usr/local/go/bin

Additionally, define the GOPATH and GOBIN Go environment variables:

$ export GOBIN="$HOME/projects/bin"
$ export GOPATH="$HOME/projects/src"

After go is installed and set up, just type:

$ go get github.com/blackberry/terraform-provider-opennebula
$ go install github.com/blackberry/terraform-provider-opennebula 

Post-installation Step

Copy your terraform-provider-opennebula binary in a folder, like /usr/local/bin, and write this in ~/.terraformrc:

$ sudo cp ~/projects/bin/terraform-provider-opennebula /usr/local/bin/terraform-provider-opennebula

For RKE provider, download the binary and copy in the same folder:

$ wget https://github.com/yamamoto-febc/terraform-provider-rke/releases/download/0.5.0/terraform-provider-rke_0.5.0_linux-amd64.zip 
$ sudo unzip terraform-provider-rke_0.5.0_linux-amd64.zip -d /usr/local/bin/terraform-provider-rke
providers {
  opennebula = "/usr/local/bin/terraform-provider-opennebula"
}

providers {
  rke = "/usr/local/bin/terraform-provider-rke"
}

Install Rancher

This repository provide a TF file to install Rancher in a high-availability configuration. The goal is easily install a Rancher on machines running CentOS 7.

Clone this repo:

$ git clone https://github.com/mangelft/terraform-rke-paas.git

Create infrastructure

First we have to initialize terraform simply with:

$ terraform init

This will read your configuration files and install the plugins for your provider.

We let terraform create a plan, which we can review:

$ terraform plan

The plan command lets you see what Terraform will do before actually doing it.

Now we execute:

$ terraform apply

terraform-apply

 

oneKubectl is the CLI tool for interacting with the Kubernetes cluster. Please make sure these tools are installed and available.

To make sure it works, run a simple get nodes command.

$ kubectl get nodes

kubectl

 

 

That’s it you should have a functional Rancher server. Point a browser at the hostname: https://rancher.my.org.

 

rancher-dashboard

 

by Miguel Angel Flores at November 04, 2018 08:43 PM

October 30, 2018

Sobre bits

Ejecutar script de PowerShell después de Sysprep

Recuerdo que uno de mis primeros casos de uso de PowerShell, que además hizo que empezara a profundizar en él, fue personalizar plantillas de sistemas operativos Windows recién desplegados. Si bien los distintos hipervisores ofrecen opciones de este tipo, ejecutar un script de PowerShell después de Sysprep es una solución que funcionará a través de cualquier hipervisor que utilicemos. En la entrada de hoy veremos cómo programar dicha ejecución y que no se destruya después del Sysprep.

¿Qué es Sysprep?

Si has llegado hasta aquí lo más probable es que sepas de sobras lo que es Sysprep, pero nunca está de más aclararlo. Sysprep es una utilidad de los sistemas operativos Windows que podemos encontrar en C:\Windows\System32\Sysprep con la que podemos preparar nuestras plantillas para poder ser desplegadas una y otra vez en un mismo entorno.

Básicamente lo que hace Sysprep es generalizar un sistema operativo quitándole los identificadores únicos al mismo, permitiendo así ser desplegado múltiples veces sin peligro de IDs duplicados.

Script de PowerShell después de Sysprep

¿Por qué ejecutar un script de PowerShell después de Sysprep?

Habitualmente lo que se hace con una plantilla de Windows es actualizar el sistema operativo, realizar las configuraciones oportunas en el sistema e instalar las aplicaciones que necesitemos. El problema es que después de generalizar una instalación con Sysprep las configuraciones del sistema pueden desaparecer, además de que hay otras que es posible que no podamos incluir en la plantilla o que sean variables según el rol del sistema a desplegar.

Ejecutar un script de PowerShell después de Sysprep nos va a permitir que justo después de hacer el primer login podamos personalizar todo lo que se nos ocurra del propio sistema.

¿Cómo ejecutar un script después de Sysprep?

Para programar la ejecución de un programa una sola vez después de iniciar el sistema es habitual utilizar la clave de registro: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce, pero como decía en el apartado anterior, muchas configuraciones se pierden al realizar Sysprep y ésta es una de ellas. Para saltarnos esta limitación podemos tirar del script SetupComplete.cmd.

SetupComplete.cmd es un script que podemos crear en C:\Windows\Setup\Scripts, que se ejecutará justo después del setup del sistema operativo. Si tenemos la suerte de que nuestra personalización puede correr desde un archivo .cmd podemos aplicar las configuraciones en dicho archivo, pero para usar un script de PowerShell deberemos tirar de la entrada de registro anteriormente mencionada. Éste sería el contenido de nuestro archivo SetupComplete.cmd:

REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /v "PostDeploy" /d "C:\Windows\System32\WindowsPowerShell\v1.0\powershell -executionpolicy unrestricted -file C:\Scripts\Post-deploy.ps1" /t REG_SZ

Como siempre vamos a desglosar la línea, que ha quedado larguita:

  • REG ADD “HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce: Añadimos una entrada de registro nueva en la ruta especificada.
  • /v “PostDeploy”: Especificamos el nombre de la entrada.
  • /d: Especificamos el contenido de la entrada de registro.
    • C:\Windows\System32\WindowsPowerShell\v1.0\powershell: Ejecutamos PowerShell.
    • -executionpolicy unrestricted: Establecemos la Execution Policy de la consola que abriremos a unrestricted para que no nos limite la ejecución de scripts.
    • -file C:\Scripts\Post-deploy.ps1: Establecemos la ruta completa del script de PowerShell que contiene nuestras personalizaciones.
    • /t REG_SZ: Establecemos el tipo de entrada de registro.

¿Qué podemos añadir en nuestro script de PowerShell después de Sysprep?

Básicamente podemos ejecutar cualquier cosa que se nos ocurra en nuestro scripts, pero si andas corto de ideas aquí van unas cuantas:

Y la lista podría seguir hasta el infinito según cada caso de uso.

Espero que el contenido de esta entrada os ayude a arañar unas cuantas horas al reloj gracias a la automatización. 🙂

La entrada Ejecutar script de PowerShell después de Sysprep aparece primero en Sobrebits.

by Marc Meseguer at October 30, 2018 08:00 AM

October 29, 2018

RooTeando

ARM para TODOS 05: Distribuciones para ARM

En este audio hablaré sobre placas con un tamaño pequeño, he realizado una lista con las siguientes placas.

🔹Cubox-i y Cubox pulse: página web
https://www.solid-run.com/product/cubox-i4x4/
https://www.solid-run.com/nxp-family/cubox-pulse/

Disponible en Amazon Cubox-i versión 2 GB RAM
https://amzn.to/2zsHycm

🔹 Vocore2: página web 
https://vocore.io/

Disponible en Amazon
https://amzn.to/2Ocm1gi

🔹Nanopi: Dispone de una familia de producto que destaca por su pequeño tamano. Un ...

October 29, 2018 12:33 AM

Tomando un Café 44: Crossover con Ugeek y Tomando Un Café

Otro audio especial y con invitado, en este caso con Angel de Ugeek, donde hemos hablado de Raspberry, Rock64 y los servicios que utilizamos ene ese dispositivos.

Lista de aplicaciones 
DietPi https://dietpi.com/
Raspbian http://www.raspbian.org/
TinyRSS https://tt-rss.org/
Volumio https://volumio.org/
Syncloud  https://syncloud.org/
Mumble https://www.mumble.info/
KeepassX https://www.keepassx.org/
Passman https://www.passman.cc/
Airsonic https://airsonic.github.io/
Subsonic http://www.subsonic ...

October 29, 2018 12:29 AM

Tomando Un Café 43: Sistemas Operativos y ecosistemas.

En este audio tendré una pequeña reflexión sobre las evolución de los sistemas operativos, también hablaré sobre los ecosistemas, que son, para que sirven y  las migraciones de ecosistemas.

Música: Dark Meat- When The Killer Came. http://freemusicarchive.org/

Si quieres apoyarme  de forma económica para mis podcast y canales, puedes realizarlo de diferentes formas:
PayPal   https://paypal.me/JoseAJimenez
Programa afiliado de Amazon  https://amzn.to/2Myjet8, si compras a través de ...

October 29, 2018 12:15 AM

October 24, 2018

Sobre bits

Descubriendo módulos: Copiar archivos de Linux con PowerShell

Hace unos días me encontré con la necesidad de añadir a uno de mis scripts de automatización la capacidad de copiar archivos de Linux con PowerShell y descubrí un módulo perfecto para ello. Es por ello que en la entrada de hoy retomamos la sección ‘Descubriendo módulos’ (aquí podéis ver la entrada anterior) en la que cacharrearemos con el módulo WinSCP de PowerShell y copiaremos archivos desde una máquina Windows a una GNU/Linux y viceversa.

¿Qué es WinSCP y SCP?

No pretendo descubrir a nadie qué es WinSCP, pero por si hubiera algún rezagado no está de más escribir un par de líneas al respecto. WinSCP es una aplicación libre (licenciada con GPL) para sistemas operativos Microsoft Windows que nos permite interactuar a nivel de archivos con otros sistemas mediante SCP, FTP, SFTP o WebDAV.

SCP (Secure Copy Protocol) es un protocolo que nos permite realizar transferencias entre dos máquinas de forma segura basándose en SSH para tal fin.

SCP sobre Windows con PowerShell

Aprovechando que casi todas las máquinas GNU/Linux incorporan SSH, SCP se convierte en una especie de estándar a la hora de copiar archivos entre máquinas con dicho sistema. El problema viene si queremos copiar archivos de Linux a Windows, puesto que las máquinas Windows no incorporan un cliente SCP por defecto, y aquí es donde WinSCP se ha hecho un hueco.

Si bien WinSCP incorpora opciones de línea de comandos, no existen cmdlets propios de PowerShell. Por suerte en nuestra querida PowerShell Gallery podemos encontrar un módulo de WinSCP para PowerShell listo para descargar:

Install-Module -Scope CurrentUser -Name WinSCP

Como siempre después de instalar un nuevo módulo en nuestra máquina podemos consultar las funciones instaladas por el mismo:

Copiar archivos de Linux con PowerShell

Conectando a una máquina Linux por SCP con PowerShell

Ahora que ya tenemos claro que tenemos instalado el módulo de WinSCP para PowerShell y que tenemos claro qué son SCP y WinSCP podemos ponernos manos a la obra.

Antes de realizar cualquier operación necesitaremos crear una sesión contra la máquina de destino mediante New-WinSCPItem. Para ello necesitaremos un objeto PSCredential que, o bien lo solicitamos con Get-Credential para realizar una sesión interactiva, o bien podemos guardarlo en un archivo XML como vimos en la entrada “Cómo gestionar las credenciales de un script de PowerShell“.

# Pedimos credenciales
$Creds = Get-Credential
# Configuramos los parámetros de la sesión
$WinScpSessionOption = New-WinSCPSessionOption -Credential $Creds -GiveUpSecurityAndAcceptAnySshHostKey -HostName 192.168.168.168 -Protocol Scp
# Establecemos la conexión
$WinScpSession = New-WinSCPSession -SessionOption $WinScpSessionOption

Vamos a explicar qué hemos hecho:

  • $Creds = Get-Credential: Pedimos credenciales de conexión a la máquina destino.
  • $WinScpSessionOption = New-WinSCPSessionOption: Creamos una nueva definición de opciones de WinSCP y la guardamos en la variable $WinScpSessionOption para reutilizarla en futuros comandos.
    • -Credential $Creds: Utilizamos las credenciales obtenidas en la línea anterior.
    • -GiveUpSecurityAndAcceptAnySshHostKey: Aceptamos cualquier clave de SSH.
    • -HostName 192.168.168.168: Establecemos el host de destino.
    • -Protocol Scp: Establecemos el protocolo a utilizar.
  • $WinScpSession = New-WinSCPSession -SessionOption $WinScpSessionOption: Utilizamos la variable creada en la línea anterior para generar una nueva sesión y guardarla en la variable $WinScpSession que utilizaremos durante la ejecución de nuestros comandos.

Copiar archivos de Linux con PowerShell

En este punto ya tenemos nuestra sesión en la variable $WinScpSession, así que ya podemos ponernos a copiar archivos en ambas direcciones.

Empezamos copiando archivos de Linux a Windows con PowerShell mediante Receive-WinSCPItem:

Receive-WinSCPItem -WinSCPSession $WinScpSession -RemotePath "/tmp/sobrebits.txt" -LocalPath 'C:\Windows\Temp'

Una explicación rápida:

  • WinSCPSession: Aquí introducimos la sesión creada en el paso anterior.
  • RemotePath: Ruta completa del archivo a copiar.
  • LocalPath: Ruta donde copiaremos el archivo.

Si en cambio queremos copiar archivos de Windows a Linux con PowerShell deberemos hacerlo con Send-WinSCPItem:

Send-WinSCPItem -WinSCPSession $WinScpSession -LocalPath 'C:\Windows\Temp\sobrebits.txt' -RemotePath "/tmp"

Ningún misterio aquí, mismas opciones que en la línea anterior pero cambia el sentido en el que copiamos el archivo.

Otras opciones interesantes de WinSCP para PowerShell

Si bien solo hemos visto cuatro de las funciones disponibles en este módulo existen un total de 23 funciones en el mismo (a la fecha de escribir este post), que por razones obvias no vamos a cubrir. No obstante os voy a enumerar los que me han parecido más interesantes:

  • Remove-WinSCPSession: Con el que desconectar sesiones existentes.
  • Move-WinSCPItem: Para mover o renombrar un archivo del sistema remoto.
  • Copy-WinSCPItem: Para copiar un archivo del sistema remoto.
  • Test-WinSCPPath: Con el que comprobar si existe un archivo o carpeta remoto.
  • Sync-WinSCPPath: Para sincronizar una carpeta local con otra remota.

Conclusión

Con el módulo de WinSCP para PowerShell podemos ampliar la gama de funcionalidad de nuestros scripts para que no solo interactuen con sistemas de ficheros locales, sino que también lo puedan hacer contra sistemas remotos GNU/Linux o incluso contra datastores de VMware vSphere (si el nodo en cuestión dispone de SSH habilitado).

Además, no olvidéis que más allá de SCP podéis conectaros a sistemas remotos mediante SFTP, FTP y WebDAV utilizando el mismo set de funciones.

¡Espero que os sirva!

La entrada Descubriendo módulos: Copiar archivos de Linux con PowerShell aparece primero en Sobrebits.

by Marc Meseguer at October 24, 2018 07:00 AM

October 23, 2018

DaboBlog

Entrevistado en el blog de Ontinet por María José Montes (ESET)

apachectlMi amiga María José Montes, Responsable de Ciberseguridad de ESET y participante activa en múltiples congresos de Hacking y eventos solidarios, me envío una serie de preguntas para el blog del Laboratorio de Ontinet. Hacía alusión a cuestiones profesionales de mi trabajo en APACHEctl y otras de índole más personal.

Sin más, os dejo con la entrevista. Respondí sin pensar mucho y dejándome llevar (que así las cosas salen con más espontaneidad-;).

Gracias amiga !!!

 

La entrada Entrevistado en el blog de Ontinet por María José Montes (ESET) se publicó primero en DaboBlog.

by David Hernández (Dabo). at October 23, 2018 04:18 PM

October 18, 2018

Sobre bits

PowerCLI one-liners: Listar identificador naa de un datastore

Cuando nos encontramos en la situación de tener que realizar algún tipo de troubleshooting en el storage de una solución VMware vSphere lo más típico es que tanto en la salida de comandos de PowerCLI o esxcli como en los logs del propio sistema se haga referencia a nuestros datastores por su identificador naa.*. En la entrada de hoy veremos un par one-liners con los que obtener el identificador naa de un datastore con PowerCLI.

One-liner 1: Buscando un datastore con su identificador naa

Uno de los casos típicos en los que podemos necesitar este one-liner es cuando un log hace referencia a un cambio de estado en un datastore y nos devuelve su identificador naa. Para encontrarlo rápido:

Get-Datastore | Where-Object {$_.ExtensionData.Info.Vmfs.Extent.DiskName -like “*ID_A_BUSCAR*”}

Vamos a repasar el one-liner:

  • Get-Datastore: Evidentemente, listamos todos los datastores del datacenter.
  • Where-Object {$_.ExtensionData.Info.Vmfs.Extent.DiskName: Filtramos por la propiedad DiskName (bien escondida debajo de ExtensionData) que nos devuelve el identificador naa del datastore.
  • -like “*ID_A_BUSCAR*”}: Buscamos el datastore que tenga como ID parte o toda la cadena que le facilitemos.

Un ejemplo en productivo:

Identificador naa de un datastore

One-liner 2: Obteniendo el identificador naa de todos los datastores

Si necesitamos hacer más de una consulta de la relación ID naa.* con su nombre de datastore, es posible que nos salga a cuenta sacarlos todos y guardarlos en vez de estar haciendo la consulta constantemente. Como ya sabemos cómo sacar el ID naa.* de un datastore con su propiedad de ExtensionData esto va a estar chupado:

Get-Datastore | Select-Object -Property Name,@{Name = 'Naa'; Expression = {$_.ExtensionData.Info.Vmfs.Extent.DiskName}}

Veamos qué hace el one-liner:

  • Get-Datastore: Evidentemente, volvemos a listar todos los datastores del datacenter.
  • Select-Object -Property Name: Seleccionamos la propiedad Name para formar el objeto de salida de nuestra línea.
  • @{Name = ‘Naa’; Expression = {$_.ExtensionData.Info.Vmfs.Extent.DiskName}: Seleccionamos para nuestro objeto de salida su segunda propiedad mediante una expresión.
    • En la propiedad Name indicamos el nombre de dicha propiedad. En este caso, en un alarde de originalidad, ‘Naa’.
    • En la propiedad Expression hacemos la misma query que en el anterior one-liner para sacar el identificador naa de los datastores mediante el objeto que nos viene del pipe.

Y por último vamos a ver cómo quedaría la salida del one-liner:

PS C:\Get-Datastore | Select-Object -Property Name,@{Name = 'Naa'; Expression = {$_.ExtensionData.Info.Vmfs.Extent.DiskName}}

Name             Naa
----             ---
datastore103     naa.123456789123c9d12366666dd7af1dc6d
datastore104     naa.123456789123123456fd66666b41e924
datastore105     naa.123456789123809ffa44b7766666a91a
datastore106     naa.12345678912397340a666668898e3133
datastore107     naa.123456789123b9c46d85196666632bd5
datastore108     naa.12345678912345bab066666d92b70b8f
datastore109     naa.123456789123c3945fef8666663772e6
datastore110     naa.12345678912304e5666663a38cedbd46

¡Espero que os sirvan estos one-liners de hoy!

La entrada PowerCLI one-liners: Listar identificador naa de un datastore aparece primero en Sobrebits.

by Marc Meseguer at October 18, 2018 07:00 AM

October 16, 2018

Sobre bits

Detectar VMs no respaldadas por Veeam con PowerCLI (Parte 2)

En esta segunda y última parte de la entrada seguiremos justo donde lo dejamos en la anterior y añadiremos un poco más de funcionalidad a nuestro script buscador de máquinas virtuales fuera de backup. Concretamente veremos cómo gestionar excepciones y cómo enviar notificaciones de correo periódicas.

  1. Detectar VMs no respaldadas por Veeam con PowerCLI (Parte 1).
  2. Detectar VMs no respaldadas por Veeam con PowerCLI (Parte 2).

En la entrada anterior nos quedamos con un pequeño script con el que ya conseguíamos sacar las máquinas virtuales sin backup pero poco más:

# Obtenemos todas las máquinas virtuales de la infraestructura que estén encendidas
$Vms = Get-VM | Where-Object PowerState -eq 'PoweredOn'

# Declaramos un array vacío donde almacenar los nombres de las VMs fuera de backup
$VmsSinBackup = @()

# Recorremos la colección de VMs
ForEach ($Vm in $Vms) {
    # Si la VM tiene el Custom Attribute "Sobrebits" sin contenido...
    If (!$Vm.CustomFields.Item("Sobrebits")) {
        # ... añadimos dicha VM a nuestra array de VMs no respaldadas por Veeam
        $VmsSinBackup += $Vm.Name
    }
}
# Mostramos las $VmsSinBackup
$VmsSinBackup

Gestionando las excepciones

Tarde o temprano utilizando este script os encontraréis con la situación en la que se reporta una máquina virtual fuera de backup que realmente debería estarlo, ya sea porque es una máquina de test, una demo o cualquier otra situación. En esta parte vamos a añadir de una forma extremadamente sencilla un archivo de excepciones donde iremos añadiendo el nombre de dichas máquinas virtuales fuera de backup.

Lo primero que haremos será guardar nuestro script en una carpeta, para este ejemplo será C:\Scripts\Get-VmNoBackup.ps1. Un ejemplo de la salida del script sin excepciones sería este:

Máquinas virtuales fuera de backupSabiendo la salida del script podemos proceder a crear el archivo de excepciones, con el que quitaremos las VMs de test de nuestro listado. Nuestro archivo de excepciones simplemente será un archivo .txt ubicado en la misma carpeta del script:  C:\Scripts\Get-VmNoBackup_Excepciones.txt.

PS C:\Scripts> Get-ChildItem
Get-VmNoBackup.ps1
Get-VmNoBackupExcepciones.txt

La idea es que en dicho archivo de excepciones añadamos un nombre de VM por línea, en nuestro caso quedaría así:

Excepciones máquinas virtuales fuera de backupA partir de ahí solo nos queda leer el contenido de dicho archivo utilizando Get-Content y añadir este criterio al if en el que checkeamos si existe el Custom Attribute:

# Leemos el archivo de excepciones
$Excepciones = Get-Content -Path "$PSScriptRoot\Get-VmNoBackup_Excepciones.txt"

# Obtenemos todas las máquinas virtuales de la infraestructura que estén encendidas
$Vms = Get-VM | Where-Object PowerState -eq 'PoweredOn'

# Declaramos un array vacío donde almacenar los nombres de las VMs fuera de backup
$VmsSinBackup = @()

# Recorremos la colección de VMs
ForEach ($Vm in $Vms) {
    # Si la VM tiene el Custom Attribute "Sobrebits" sin contenido...
    If (!$Vm.CustomFields.Item("Sobrebits") -and $Excepciones -notcontains $Vm.Name) {
        # ... añadimos dicha VM a nuestra array de VMs no respaldadas por Veeam
        $VmsSinBackup += $Vm.Name
    }
}
# Mostramos las $VmsSinBackup
$VmsSinBackup

Repasemos las modificaciones:

  • En la línea 2 leemos mediante Get-Content el contenido del archivo de excepciones y lo añadimos a la variable $Excepciones.
  • En la línea 13 añadimos una nueva condición al if en la que el nombre de la VM ($Vm.Name) no debe estar dentro del array de $Excepciones.

Y este es el resultado de ejecutar el script con las últimas modificaciones:

Máquinas virtuales sin backup con excepcionesComo podemos ver ya no aparecen las VMs Sobrebits-Test1 y Sobrebits-Test2.

Otra aproximación para gestionar las excepciones podría ser utilizar tags de vSphere sobre las máquinas virtuales que podrían ser leídos por nuestro script, poner excepciones de carpetas o básicamente cualquier criterio que se os ocurra.

Enviando el resultado del script vía correo electrónico

Para brindar un poco más de funcionalidad al script podemos hacer que éste nos envíe un reporte con las máquinas virtuales fuera de backup por correo electrónico tal como vimos en la entrada “Enviar correo desde PowerShell”.

Para ello necesitaremos de un servidor SMTP desde el que estemos autorizados a enviar correo y hacer unas pequeñas modificaciones a nuestro script.

En primer lugar deberemos configurar los parámetros para la conexión smtp:

# Establecemos configuración SMTP
$from = "[email protected]"
$to = "[email protected]"
$subject = "Máquinas virtuales fuera de backup"
$smtpserver = "mail.sobrebits.com"
$smtpport = 25

Y al final del script, en vez de mostrar el contenido enviamos el correo electrónico (siempre y cuando existan máquinas virtuales fuera de backup):

# Si existen máquinas virtuales fuera de backup...
if ($VmsSinBackup) {
    # ... enviamos correo
    Send-MailMessage -From $from -To $to -Subject $subject -Body $($whitelist -join "`n") -SmtpServer $smtpserver -Port $smtpport
}

Aquí no hay mucho que explicar puesto que no hemos hecho nada que no hicieramos ya en “Enviar correo desde PowerShell”, simplemente aclarar que en el parámetro -Body concatenamos el array y lo juntamos con retornos de carro puesto que esta variable espera un string.

Últimos retoques

Lo último que queda para dar por finalizado nuestro script es programar su ejecución. No voy a explicar al detalle cómo hacerlo puesto que ya se ha tratado en anteriores entradas, aquí os dejo las referencias:

Por último decir que con este método si eliminamos una máquina de backup va a seguir reportándose como máquina dentro de backup puesto que el Custom attribute no se borra al quitar la máquina de Veeam. Es por ello que os recomiendo periódicamente eliminar el contenido del Custom Attribute mediante Set-Annotation sobre todas las máquinas virtuales del entorno.

Poniéndolo todo junto

Después de seguir el proceso de las dos partes de esta entrada debería quedar un script parecido a este:

# Conectamos a vCenter
$vcenter_ip = "192.168.168.168"
$vcenter_creds = Import-Clixml -Path "$PSScriptRoot\VMware_creds.xml"
Connect-VIServer -Server $vcenter_ip -Credential $vcenter_creds -WarningAction SilentlyContinue | Out-Null

# Establecemos configuración SMTP
$from = "[email protected]"
$to = "[email protected]"
$subject = "Máquinas virtuales fuera de backup"
$smtpserver = "mail.sobrebits.com"
$smtpport = 25

# Leemos el archivo de excepciones
$Excepciones = Get-Content -Path "$PSScriptRoot\Get-VmNoBackup_Excepciones.txt"

# Obtenemos todas las máquinas virtuales de la infraestructura que estén encendidas
$Vms = Get-VM | Where-Object PowerState -eq 'PoweredOn'

# Declaramos un array vacío donde almacenar los nombres de las VMs fuera de backup
$VmsSinBackup = @()

# Recorremos la colección de VMs
ForEach ($Vm in $Vms) {
    # Si la VM tiene el Custom Attribute "Sobrebits" sin contenido...
    If (!$Vm.CustomFields.Item("Sobrebits") -and $Excepciones -notcontains $Vm.Name) {
        # ... añadimos dicha VM a nuestra array de VMs no respaldadas por Veeam
        $VmsSinBackup += $Vm.Name
    }
}

# Si existen máquinas virtuales fuera de backup...
if ($VmsSinBackup) {
    # ... enviamos correo
    Send-MailMessage -From $from -To $to -Subject $subject -Body $($whitelist -join "`n") -SmtpServer $smtpserver -Port $smtpport
}

# Desconectamos del vCenter
Disconnect-VIServer -Confirm:$false

¡Espero que esta doble entrada os sirva para ahorraros disgustos de cara a futuro!

La entrada Detectar VMs no respaldadas por Veeam con PowerCLI (Parte 2) aparece primero en Sobrebits.

by Marc Meseguer at October 16, 2018 07:00 AM

October 10, 2018

Sobre bits

Detectar VMs no respaldadas por Veeam con PowerCLI (Parte 1)

Si hay algo que absolutamente siempre debemos tener controlado al dedillo en nuestra infraestructura es el backup, puesto que es ese salvavidas del que siempre vamos a poder tirar en caso de desastre. Una problemática habitual cuando los entornos vSphere empiezan a crecer y cuando muchas manos tocan un mismo entorno es la posibilidad de quedarnos con VMs fuera de backup y, lo más peligroso, sin que nadie se de cuenta de ello. Es por ello que en la entrada de hoy veremos cómo detectar VMs no respaldadas por Veeam Backup de forma automatizada mediante, como no, PowerCLI.

Dejando huella en las VMs respaldadas con Veeam

El primer paso antes de ponernos a picar código de PowerCLI será pasarnos por nuestro (o nuestros) servidor de Veeam para reconfigurar los jobs de backup y hacer que éstos dejen huella en las máquinas virtuales que respalde. La “huella” que dejará en nuestras máquinas virtuales respaldadas será un Custom Attribute de VMware que utilizaremos posteriormente para hacer querys desde PowerCLI.

Editar job de Veeam

Posteriormente nos dirigimos al apartado Storage y pulsamos sobre el botón Advanced.

Veeam editar storage

Una vez aquí debemos desplazarnos a la pestaña Notifications. En la parte inferior encontraremos el campo “Set succesful backup details to this VM attribute”. Deberemos habilitar esta opción y añadir un nombre en el campo de texto correspondiente, que será el nombre del Custom Attribute que se añadirá a la VM.

Custom Attribute Veeam

La forma en que funciona este parámetro es que cuando un backup ha finalizado de forma exitosa sobre una máquina virtual Veeam añade a la misma un nuevo Custom Attribute (si no lo hubiera) y le añade la fecha de dicho backup. Si miramos los Custom Attribute de una VM con backup correcto deberíamos ver algo parecido a esto:

Custom Attribute VM Veeam

Buscando el Custom Attribute con PowerCLI

Vale, ya tenemos funcionando la base sobre la que nuestro script buscará VMs no respaldadas por Veeam, ahora tenemos que construir la query que necesitamos para encontrar dichas VMs.

Para ello vamos a empezar obteniendo todas las VMs que queremos revisar y vamos a ponerlas en una variable para gestionarlas de forma más fácil en el futuro:

$Vms = Get-VM | Where-Object PowerState -eq 'PoweredOn'

En este caso unicamente saco las VMs encendidas, pero podemos hacer la query por un determinado cluster, host o lo que necesitemos.

Ahora que ya tenemos las VMs a escanear en nuestra variable pasaremos a recorrerlas todas en busca de las que no tengan nuestro Custom Attribute lleno. Aquí va el código que os propongo con sus respectivos comentarios:

# Declaramos un array vacío donde almacenar los nombres de las VMs fuera de backup
$VmsSinBackup = @()

# Recorremos la colección de VMs
ForEach ($Vm in $Vms) {
    # Si la VM tiene el Custom Attribute "Sobrebits" sin contenido...
    If (!$Vm.CustomFields.Item("Sobrebits")) {
        # ... añadimos dicha VM a nuestra array de VMs no respaldadas por Veeam
        $VmsSinBackup += $Vm.Name
    }
}

Con esto ya tenemos una variable $VmsSinBackup con todas las VMs no respaldadas en nuestra infraestructura.

Conclusión

Hasta aquí la primera parte de esta entrada. En la segunda parte aplicaremos un poco más de inteligencia a nuestro script añadiendo la posibilidad de añadir excepciones y notificaciones por correo. ¡Muy pronto en Sobrebits!

La entrada Detectar VMs no respaldadas por Veeam con PowerCLI (Parte 1) aparece primero en Sobrebits.

by Marc Meseguer at October 10, 2018 08:00 AM

October 05, 2018

MagMax Blog

Hosting

En el mundo hay distintas soluciones para albergar tus proyectos en internet. Aquí tenéis un pequeño repaso a algunas de las que he probado.

Leer más… (quedan 4 minutos de lectura)

by Miguel Ángel García at October 05, 2018 03:23 AM

October 04, 2018

RooTeando

Diario de Aprendizaje: 01 Libreta de conocimiento y desarrollo

Presentación de un nuevo proyecto en formato minipodcast, 5 minutos de duración, donde hablaré sobre aprendizaje y programación.

Primer episodio de este minipodcast donde hablare sobre estas dos libretas (de papel), que son y para que las utilizo.


Métodos de contacto, los mismo que para el podcast Tomando Un Cafe.

Correo [email protected]

Twitter https://twitter.com/Tomando_Un_Cafe


RSS
Anchor.fm http://anchor.fm/s/18c0860/podcast/rss
Blog(post y audios) https://rooteando ...

October 04, 2018 10:42 PM

ARM para TODOS: 04 Placas pequeñas para ARM

En este audio hablaré sobre placas con un tamaño pequeño, he realizado una lista con las siguientes placas.

🔹Cubox-i y Cubox pulse: página web
https://www.solid-run.com/product/cubox-i4x4/
https://www.solid-run.com/nxp-family/cubox-pulse/

Disponible en Amazon Cubox-i versión 2 GB RAM
https://amzn.to/2zsHycm

🔹 Vocore2: página web 
https://vocore.io/

Disponible en Amazon
https://amzn.to/2Ocm1gi

🔹Nanopi: Dispone de una familia de producto que destaca por su pequeño tamano. Un ...

October 04, 2018 10:25 PM

ARM para TODOS: 03 Almacenamiento en ARM

Nuevo audio donde hablaré de las diferentes opciones de almacenamiento disponible para nuestras pequeñas placas ARM
Lo he dividido en tres categorías

🔹Almacenamiento externo: Tarjetas SD y microSD, eMMC y USB.
🔹 SATA y mSATA: Incluye SATA nativo como mediante conversores USB a SATA.
🔹  PCI-Express:  Memorias M.2, con adaptador puertos SATA.


Música: The Freak Fandango Orchestra - Tales of a dead fish- 01. Requiem for a Fish http://freemusicarchive.org


Si quieres apoyarme  de forma económica ...

October 04, 2018 10:10 PM

October 03, 2018

Sobre bits

Versión de PowerShell según sistema operativo

Uno de los factores determinantes a la hora de diseñar una tarea de automatización con PowerShell es asegurarnos de que los cmdlets que vamos a utilizar estén disponibles en la versión de PowerShell que corre en la máquina que ejecuta el código. En la entrada de hoy me gustaría compartir con vosotros un par de chuletas que he creado para hacer la consulta más sencilla.

Versión de PowerShell por defecto y máxima según sistema operativo

A continuación os pongo una tabla con el resumen de la versión por defecto de PowerShell de cada versión de sistema operativo Windows así como la versión máxima a la que se puede actualizar:

Versión de PowerShell por defecto
*Hay que instalar la característica a través de Server Manager.

Sistemas operativos soportados según versión de PowerShell

Básicamente se trata de la misma tabla anterior pero girada para poder ver rápidamente los sistemas operativos que soportan una determinada versión de Windows PowerShell:

Versión windows segun PowerShell*Hay que instalar la característica a través de Server Manager.

Bola extra: Cómo determinar la versión instalada de PowerShell

Por último, si queremos determinar la versión actual de PowerShell de nuestra máquina deberemos abrir una sesión de terminal y consultar la variable $PSVersionTable.

Versión actual PowerShellEsta variable está disponible en todas las versiones de PowerShell (incluido PowerShell Core) así como en todas las versiones de sistema operativo que pueden correr la shell.

La entrada Versión de PowerShell según sistema operativo aparece primero en Sobrebits.

by Marc Meseguer at October 03, 2018 07:00 AM

September 27, 2018

Sobre bits

PowerShell one-liners: Contraseña nunca expira en usuario local

Después de tres meses desde la última entrada retomamos la sección de PowerShell one-liners. En la entrada de hoy veremos cómo configurar un usuario local para habilitar el flag “La contraseña nunca expira” con PowerShell, y lo haremos siguiendo donde nos quedamos en la entrada anterior, utilizando WMI.

Contraseña nunca expira

¿Por qué modificar un usuario local con WMI y PowerShell?

Si después de leer la introducción de la entrada os ha dado por abrir una terminal de PowerShell con una máquina Windows 10 o 2016 y habéis buscado cmdlets relacionados con usuarios locales habréis visto algo parecido a esto:

Password usuario local no caduque PowerShell

No me he vuelto loco, no voy a complicar las cosas con WMI por gusto, el problema de estos cmdlets es que fueron introducidos en PowerShell 5.1, por lo que una máquina recién instalada sólo dispondrá de ellos a partir de Windows 10/2016. Es por ello que, si nos queremos asegurar la retrocompatibilidad con versiones anteriores de sistema operativo, es mejor que lo hagamos con WMI y aseguremos el tiro.

Impedir que el password de un usuario local caduque con PowerShell

Una vez hecha esta pequeña aclaración vamos directos al one-liner:

Get-CimInstance -ClassName Win32_UserAccount | Where Name -eq Administrador | Set-CimInstance -Argument @{PasswordExpires=0}

Y como siempre vamos a desglosar la línea:

  • Get-WmiObject -Class Win32_UserAccount: Consultamos la clase Win32_UserAccount, que nos muestra los usuarios locales de nuestra máquina.
  • Where Name -eq Administrador: Filtramos por el usuario administrador.
  • Set-CimInstance: Modificamos el objeto que proviene del pipeline.
  • -Argument @{PasswordExpires=0}: Establecemos la propiedad PasswordExpires a 0 (false).

Si quisieramos hacerlo con los cmdlets de WMI en vez de los de CIM para asegurar aún más la compatibilidad hacia atrás nuestro one-liner sería así:

Get-WmiObject -ClassName Win32_UserAccount | Where Name -eq Administrador | Set-WmiInstance -Argument @{PasswordExpires=0}

Y hasta aquí el one-liner de hoy, ¡espero que os ayude en vuestras automatizaciones!

La entrada PowerShell one-liners: Contraseña nunca expira en usuario local aparece primero en Sobrebits.

by Marc Meseguer at September 27, 2018 07:00 AM

September 25, 2018

Sobre bits

Utilizando CIM y WMI con PowerShell

Si bien los cmdlets incorporados en PowerShell nos ofrecen la posibilidad de interactuar con multitud de aspectos de una máquina, hay veces que podemos necesitar consultar o modificar un determinado atributo y nos encontramos con que ningún cmdlet nos lo permite. En la entrada de hoy vamos a ver cómo utilizar CIM y WMI con PowerShell para intentar combatir estas situaciones.

¿Qué son CIM y WMI?

CIM (Common Information Model) es un estándar abierto creado por la organización DMTF orientado a proveer una definición común para el intercambio de información entre sistemas, redes, aplicaciones y servicios.

WMI (Windows Management Instrumentation) es la implementación de Microsoft de CIM, con la que se proveen métodos para consultar y modificar la configuración de una máquina Windows. Si bien el primer sistema operativo de Microsoft que traía WMI instalado fue Windows 2000 la simplificación de su uso vino con PowerShell donde desde la versión 1 se dispuso del primer cmdlet con el que consultar los métodos de una forma muy sencilla.

¿Cmdlets CIM o WMI?

Si bien no vamos a entrar al detalle existen dos juegos de cmdlets relacionados con CIM/WMI:

WMI con PowerShell

Los cmdlets Wmi* fueron los que aparecieron primero pero a partir de Windows PowerShell 3 fueron sustituidos por los CimCmdlets. Si bien estos cmdlets aún son accesibles se espera que tarde o temprano desaparezcan de PowerShell por lo que es mejor usar los “nuevos” CimCmdlets. Algunas de las mejoras incorporadas por los CimCmdlets son las siguientes:

  • Utilizan WinRM (WS-Man) para la comunicación con máquinas remotas, un protocolo mucho más moderno y “Firewall friendly” que DCOM, utilizado por Wmi*.
  • Permite el uso de sesiones mediante New-CimSession con el que poder invocar comandos remotos reutilizando dicha conexión.
  • Mejoran la gestión de la información devuelta.

Un muy buen post sobre las diferencias entre ellos es este.

Cómo listar todas las clases disponibles de WMI con PowerShell

Una vez sabemos lo que es WMI/CIM y hemos visto las diferencias entre los cmdlets CIM* y WMI* podemos pasar de una vez a la acción (sí, en este post me he alargado bastante con los preliminares). Para listar todas las clases de WMI/CIM que tenemos disponibles podemos valernos del cmdlet Get-CimClass:

Clases WMI con PowerShell

Como podemos ver por la salida del segundo comando existen en mi máquina 1202 clases disponibles con las que jugar.

Si vemos el detalle, por ejemplo, de Win32_OperatingSystem podemos ver que esta clase dispone de métodos que podemos invocar y propiedades que podemos consultar y en algunos casos modificar:

Detalle CIM Class con PowerShell

Consultando clases WMI con PowerShell

Siguiendo con el ejemplo de Win32_OperatingSystem vamos a instanciar la clase para ver qué información nos devuelve. Para instanciar una clase nos valdremos de Get-CimInstance:

Detalle CIM Class 2

(La salida del comando saca mucha más información, pero para la entrada con esto nos vale)

Como podemos ver en la captura el comando nos muestra mucha información que con cmdlets corrientes podría ser difícil o imposible de sacar, como la fecha de instalación del sistema operativo, y no solo eso, sino que además lo hace a gran velocidad.

Modificar propiedades WMI con PowerShell

Más allá de consultar las propiedades WMI de una máquina podemos, siempre y cuando dicha propiedad lo permita, modificar su valor utilizando el cmdlet Set-CimInstance.

Antes que nada buscaremos una propiedad que podamos escribir. Para ello volveremos a recurrir a Get-CimClass y veremos el detalle de las propiedades de Win32_UserAccount filtrando por las que no tienen el flag ReadOnly:

Propiedades WMI con PowerShell

Como vemos disponemos de, por ejemplo, la propiedad FullName que utilizaremos para ver cómo realizar modificaciones con Set-CimInstance (deberemos abrir PowerShell como administrador):

Modificando WMI con PowerShell

Conclusión

Aprender a interactuar con WMI/CIM desde PowerShell puede ayudarnos a multiplicar sustancialmente la cantidad de cosas que podemos realizar con nuestros sistemas operativos, por lo que espero que os haya sido de utilidad esta entrada para ampliar aún más vuestras posibilidades con PowerShell.

En futuras entradas intentaremos sacar partido de esta interfaz y ahondaremos más en sus posibilidades.

La entrada Utilizando CIM y WMI con PowerShell aparece primero en Sobrebits.

by Marc Meseguer at September 25, 2018 08:00 AM

September 20, 2018

Sobre bits

Cómo utilizar el historial de PowerShell

Algo que nos pasa a todos cuando utilizamos cualquier tipo de shell es encontrarnos con la necesidad de consultar comandos escritos minutos o días atrás e incluso volver a ejecutarlos. En GNU/Linux disponemos del comando history, y en la entrada de hoy veremos qué opciones tenemos para trabajar con el historial de PowerShell.

Comandos relacionados con el historial de PowerShell

Como siempre, cuando queremos descubrir cmdlets relacionados con una determinada acción debemos acudir al comando Get-Command, con el que consultar dentro de nuestros módulos disponibles. En este caso queremos interactuar con el historial de PowerShell, por lo que la búsqueda es sencilla:

PS C:\ Get-Command -Noun history

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Add-History                                        3.0.0.0    Microsoft.PowerShell.Core
Cmdlet          Clear-History                                      3.0.0.0    Microsoft.PowerShell.Core
Cmdlet          Get-History                                        3.0.0.0    Microsoft.PowerShell.Core
Cmdlet          Invoke-History                                     3.0.0.0    Microsoft.PowerShell.Core

Consultando el historial de PowerShell

Empecemos el repaso por consultar el histórico de comandos ejecutados. Para tal efecto, como podemos deducir de los cmdlets mostrados anteriormente nos valdremos de Get-History:

Consultar historial de PowerShell

Es importante tener en cuenta algunas cosas acerca de Get-History:

  • Con Get-History unicamente podremos ver los comandos ejecutados en la sesión actual de PowerShell. Esto quiere decir que si cerramos la terminal y volvemos a abrirla veremos un historial vacío.
  • Get-History dispone de un máximo de entradas “retenidas” en el historial que, a partir de PowerShell 3.0 es de 4096 entradas. Se puede consultar y cambiar dicha configuración desde la variable $MaximumHistoryCount.
  • Disponemos de un alias con el que ejecutar este cmdlet: h.

Volviendo a ejecutar entradas del historial

Como hemos visto en el punto anterior con Get-History obtenemos dos parámetros: un ID y el comando ejecutado. Con Invoke-History (y su utilísimo alias r) podemos utilizar esta relación ID-comando para ejecutar comandos de nuestro historial. La ejecución es muy simple:

Ejecutar historial de PowerShellDe no facilitar un Id se ejecutará la última entrada de nuestro historial.

Ejecutando entradas del historial aún mejor

Si bien utilizar el método para ejecutar entradas del historial de PowerShell anteriormente mostrado es rápido (sobretodo utilizando los alias h y r) disponemos de una forma aún mejor de buscar y ejecutar entradas anteriores. Si desde nuestra terminal pulsamos la combinación Ctrl+R podremos acceder a la función de búsqueda de nuestro historial:

Búsqueda en historial de PowerShellComo podemos ver en la captura, dado que yo recordaba haber ejecutado un comando que contenía la palabra “test” al escribirla después de la combinación Ctrl+R se ha rellenado mi línea de comandos actual con dicho comando. Algunas cosas interesantes que saber sobre este método:

  • La búsqueda se realiza de forma inversa, es decir, el primer resultado que aparecerá será el que hayamos ejecutado último.
  • Podemos desplazarnos por la búsqueda con Ctrl+R (seguiremos avanzando de forma inversa) y Ctrl+S (retrocederemos en la búsqueda inversa).
  • Una vez nos hayamos desplazado hasta el comando buscado con apretar la tecla Enter ejecutaremos dicho comando.
  • Los resultados que obtendremos del historial son de la propia sesión de PowerShell que estamos ejecutando o de anteriores, al contrario que con Get-History que únicamente obtendremos resultados de la sesión activa.

Exportando, borrando e importando el historial

Otra de las cosas interesantes que podemos hacer con el historial es transportarlo a otra máquina o guardarlo para examinarlo en otro momento. Esto puede ser interesante si hemos realizado un procedimiento y queremos acabar de documentarlo a posteriori o queremos replicarlo en otra máquina.

Para exportar el historial de PowerShell lo que tenemos que hacer es listarlo con Get-History y pasarlo a csv o xml con Export-Csv o Export-CliXml respectivamente.

PS C:\> Get-History | Export-Clixml -Path 'C:\Export\history.xml'

Una vez hecho podemos pasar a borrar el historial de nuestra sesión con Clear-History:

Borrar historial de PowerShellEn este caso borramos el historial entero, pero si indicamos un parámetro -Id podemos borrar de forma selectiva una entrada concreta.

Por último vamos a ver cómo importar el historial previamente exportado. Para ello utilizaremos Import-CliXml para importar el archivo previamente exportado y Add-History para poner su contenido en el historial.

Importar historial de PowerShell

La entrada Cómo utilizar el historial de PowerShell aparece primero en Sobrebits.

by Marc Meseguer at September 20, 2018 08:00 AM

September 19, 2018

blogofsysadmins.com

OVH: Configurar red modo bridge en VM UBUNTU 18

Buenas tardes señores y señoras. Después de un par de tickets intercambiados con el soporte de OVH, he dado con la configuración válida para configurar la red de una máquina virtual. Deciros que no actualmente a fecha de 19 de septiembre 2018 no hay guía en español para configurar Ubuntu 18 en una máquina virtual, …

by GhOsTi at September 19, 2018 06:36 PM

RooTeando

Tomando Un Café 42: Aprendizaje y programación con Alfonso Rovira.

Este es un audio especial, porque lo he grabado con un invitado, Alfonso Rovira, y con una duración bastante mas grande de lo habitual. Tenemos un charla informal donde hablamos de nuestra preferencias a la hora de aprender un lenguaje de programación.  


Si quieres apoyarme  de forma económica para mis podcast y canales, puedes realizarlo de diferentes formas:
PayPal   https://paypal.me/JoseAJimenez
Programa afiliado de Amazon  https://amzn.to/2Myjet8, si ...

September 19, 2018 12:04 AM

September 18, 2018

soyadmin.com

Convertir la salida del comando man a PDF

El comando man nos permite tener un manual de uso o instrucciones de uso de otro comando por ejemplo “man top” nos mostrará un manual de uso y toda la información explicativa del comando top.

Existe una manera de exportar el contenido de man a PDF. Esto podría ser de utilidad para leer el contenido de un comando fuera de la consola, imprimirlo o bien archivarlo en nuestra pc para tenerlo a mano y facilitarnos la lectura cuando no estamos trabajando en la consola.

El proceso es sencillo:

# man -t top | ps2pdf - > top.pdf

Donde:
man: abre el manual
-t: llama a groff un editor de textos que preformatea documentos y transforma el manual a PS (postscript)
ps2pdf: hacemos legible el PS y lo transformamos a pdf
top.pdf: elegimos el nombre que deseamos ponerle al documento en formato PDF

by Mauro at September 18, 2018 01:43 PM

September 17, 2018

soyadmin.com

¿Como limitar cantidad de conexiones FTP por IP?

Hay una manera muy sencilla de controlar la cantidad de conexiones múltiples de FTP usando pure-FTP como servidor.

Editamos el archivo de configuración de nuestro FTP:

# vi /etc/pure-ftpd.conf
## Editamos el valor de MaxClientsPerIP por el valor que queramos colocar.
MaxClientsPerIP 8

Simple y al dedo!

by Mauro at September 17, 2018 06:59 PM

www.rootzilopochtli.com

Resolviendo el #SysArmyMx Challenge Part Deux

¿De qué sirve saber algo, si usted no comparte lo que sabe?
Rubén Blades

Después de 211 visitas al post y 46 descargas de la imagen KVM (Gracias a todos los que participaron!), les comparto la solución, con su debida explicación al #SysArmyMx Challenge:

  • Configuramos nuestra VM con la imagen del disco descargada y la arrancamos; tecleamos F2 o Esc para ver los mensajes de arranque (durante la carga de plymouth). Un par de segundos después, empezaremos a ver los errores en la carga del SO
  • Al terminar, parece mostrarnos el login correctamente, pero al tratar de acceder, nos muestra el mensaje de error que nos proporciona una pista de lo que sucede
  • Al tratar de montar la partición linux, el modo de rescate nos indica que no lo encuentra, por lo que procedemos a montarlo manualmente
  • Al ejecutar chroot sobre la partición de rescate montada, observamos claramente el error

    • Entonces, como podemos observar, el comportamiento al arranque se debía a que la shell (intérprete de comandos) con la que debía levantar el sistema (/bin/bash) no se encontraba disponible. Esto mismo se nos mostraba al inicio de la carga de la VM, cuando, después del intento de login, el sistema nos mandaba el mensaje de error:
--- root: no shell: No such file or directory

Uno de los conceptos principales y básicos como SysAdmin, y que nos ayuda a comprender mejor este comportamiento, es el arranque del sistema. Tradicionalmente, las versiones basadas en System V, realizaban el arranque siguiendo el flujo mostrado hasta que el kernel ejecuta el proceso init, con el que se inicializan todos los procesos del sistema:

Actualmente, los sistemas basados en Systemd, realizan el arranque de manera similar, pero el primer proceso que ejecuta el kernel es systemd, quién se encarga de arrancar todos los procesos y servicios de forma simultánea:

El intéprete de comandos (bash) es el medio que utiliza el kernel para continuar el flujo del arranque, por lo que, como lo mencionamos anteriormente, los mensajes de error relacionados con la carga de unit files de systemd, más el mensaje de error en el login nos daban el indicio de la falla, la cual comprobamos con el proceso de rescate.

  • Para solucionar esta falla, simplemente restauramos el archivo y validamos que podamos ejecutar chroot:
  • Con la partición montada y enjaulada, configuramos la contraseña de root:

  • Al reiniciar, conforme nos mando mensaje de error originalmente, el sistema realizará el re-etiquetado de SELinux:

  • Después de este proceso, el arranque es correcto y podemos hacer login en el sistema:

  • Con el sistema funcionando, podemos realizar la configuración que nos han solicitado:

hostname

# hostnamectl set-hostname host01.sysarmy.mx

kernel

Para actualizar el kernel a la versión solicitada, había que actualizar el SO; éste, es uno de los pasos más recomendados, pero a veces (debido a alguna aplicación hecha en casa o restricciones en las políticas de seguridad para la aplicación de patches) no se aplica. Lo mejor, conforme a las mejores prácticas, es hacerlo al menos dos veces por año en la medida de lo posible. Para esto ejecutamos:

# yum update

network

Para realizar la configuración de la red, conforme un post de hace algunos años, modificamos el archivo de configuración de la nic (/etc/sysconfig/network-scripts/ifcfg-eth0):

DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
PREFIX=24
IPADDR=192.168.122.10
DNS1=192.168.122.1
GATEWAY=192.168.122.1

webpage

Esta parte del reto, tiene dos partes en la solución: la más obvia y sencilla (instalar el servidor web [apache]), y, si queremos hacerlo más pro: configurar el firewall del sistema, para que sólo permita conexiones por el puerto de servicio del servidor web:

* apache*

Para instalar el servidor web apache, simplemente se ejecuta:

# yum install httpd

Para posteriormente crear la página de inicio del servicio:

# echo "Hola Mundo" > /var/www/html/index.html

Habilitamos y arrancamos el servicio y validamos que la página de inicio sea visible:

# systemctl enable httpd; systemctl start httpd
# curl http://127.0.0.1
Hola Mundo

firewall*

Para instalar el firewall, se ejecuta:

# yum install firewalld

Después de habilitar y arrancar el servicio, configuramos los servicios y puertos de acceso que deseamos:

# systemctl enable firewalld; systemctl start firewalld
# firewall-cmd --permanent --add-port={22/tcp,80/tcp,443/tcp}
# firewall-cmd --permanent --add-service={http,https,ssh}
# systemctl restart firewalld.service

# firewall-cmd --list-ports
22/tcp 80/tcp 443/tcp

Y validamos nuevamente que la página de inicio sea visible:

# curl http://127.0.0.1 
Hola Mundo

  • Al finalizar la configuración, reiniciamos el sistema y comprobamos que ésta perduren:

 

Además de la complejidad observada, la imagen KVM está configurada con el teclado en “Español Latinoamericano” lo cual, al conectarse por la consola, ocasionaba un pequeño inconveniente al teclear algunos comandos; se podía cambiar el teclado, pero no sentí que fuera un gran obstáculo 😉

Les comparto las evidencias de quienes terminaron el reto y mandaron su captura de pantalla:

Nuevamente, muchas gracias por participar, espero les haya gustado 🙂

P.D.: Que les pareció la lista de Blades en Spotify? 😉

by Alex Callejas at September 17, 2018 05:28 PM

soyadmin.com

Detectando rootkits con Chkrootkit

Según la Wikipedia: “Chkrootkit (Check Rootkit) es un programa informático de consola, común en sistemas operativos Unix y derivados. Permite localizar rootkits conocidos, realizando múltiples pruebas en las que busca entre los binarios modificados por dicho software. Este guion de consola usa herramientas comunes de UNIX/Linux como las órdenes strings y grep para buscar las bases de las firmas de los programas del sistema y comparar un transversal del archivo /proc con la salida de la orden ps (estado de los procesos (process status) para buscar discrepancias. Básicamente hace múltiples comprobaciones para detectar todo tipo de rootkits y ficheros maliciosos.”

Es decir es una herramienta que nos permite escanear nuestra PC/Servidor buscando archivos infectados. Sobre todo los rootkits/malware que tanto daño pueden causar.

NOTA: Seguramente muchos dirán “Pero si linux no tiene estos problemas” “linux no tiene virus” “yo no puedo infectarme” la idea es que en caso de ser portador elimines esta amenaza para que no sigas repartiéndola a otros usuarios ya sea por un pendrive o cualqueira de los métodos de infección. Incluso si posees una página web y tu servidor o sitio está con alguna infección, tus clientes o visitantes pueden también resultar infectados. La idea es evitar la propagación.

¿Como lo instalamos?
1) Instalación en CentOS RHEL y Fedora

# wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
# tar xvzf chkrootkit.tar.gz
# cd chkrootkit*
# make sense

2) Instalación en Debian, Ubuntu, Mint y derivados

# sudo apt-get install chkrootkit

¿Como funciona?
1) Ejecutarlo en CentOS RHEL y Fedora
Desde la carpeta de la herramienta ejecutamos:

# ./chkrootkit
# ./chkrootkit -q (solo muestra en pantalla los archivos infectados)
# ./chkrootkit > reporte.txt (crea un archivo .txt con los resultados del escaneo para así poder revizar luego de finalizado)

2) Ejecutarlo en Debian, Ubuntu, Mint y derivados

# sudo chkrootkit
# sudo chkrootkit -q (solo muestra en pantalla los archivos infectados)
# sudo chkrootkit > reporte.txt (crea un archivo .txt con los resultados del escaneo para así poder revizar luego de finalizado)

Como cada herramienta de detección tiene sus falsos/positivos, se debe estudiar cada archivo detectado para así no cometer un error.

by Mauro at September 17, 2018 02:52 PM

September 15, 2018

soyadmin.com

LIBRO: Desarrollo de aplicaciones con Python, PyGTK y Glade

Título: DESARROLLO DE APLICACIONES CON PYTHON, PYGTK Y GLADE
Autor: Marco Antonio Islas Cruz
Páginas: 340 Páginas
Tamaño: 2 MB
Fomato: PDF

 

 

 

Contenido:

El mundo de la informática crece día tras día, lo que se conocia hace 30 años ha cambiado mucho de una manera tan rápida que nos sorprendería ver cómo ha cambiado en los últimos 10 años.

En un principio los programas se escribían para una computadora en especial, en un lenguaje que se desarrollaba para cada máquina, es decir, un lenguaje máquina para cada computadora. Gracias a Ken Thompson y Dennis Ritchie se comenzó a utilizar un lenguaje que permitía escribir código de manera fácil podía ser portado a otra computadora, este lenguaje es el lenguaje de programación C.

El mercado de los sistemas operativos estaba tan marcado que la mayoría de los informáticos solo escribían programas para una de las plataformas populares. Actualmente el panorama es muy diferente, existen básicamente los mismos tipos de sistemas operativos, pero se han equiparado en popularidad y, el lograr que una aplicación se extienda, depende en gran medida de que tan disponible se encuentre.

Este trabajo demostrará lo sencillo que es crear aplicaciones multiplataforma utilizando el lenguaje de programación orientado a objetos Python, el conjunto de herramientas para interfaces gráficas de GTK+ y sus bindings, así como el generador de interfaces Glade y su biblioteca principal Libglade, como manejador de base de datos se utilizará MySQL y el modulo mysql-python para conectar ella; herramientas que de igual forma son multiplataforma, evitándonos así quebraderos de cabeza al portar nuestras aplicaciones.

Fuente: openlibra.com

by Mauro at September 15, 2018 01:14 PM

September 14, 2018

soyadmin.com

SOLUCIÓN A: unable to launch “cinnamon-session-cinnamon” X session al iniciar sesión en Linux Mint 19

Luego de una actualización me topé con un error al intentar iniciar sesión. Valla uno a saber que fue lo que se “rompió” el tema es que luego de loguearme aparecía este error:

unable to launch "cinnamon-session-cinnamon" X session
"cinnamon-session-cinnamon" not found; falling back to default session.

Supuestamente este tema está relacionado a Virtualbox y a sus Guests, sospechosamente es un software que habia instalado recientemente.

Buscando en los foros de Mint me topé con la solución y descubrí que es algo que le pasó a mucha gente, por eso este post.

La solución que funcionó en mi caso puntual fue esta:
1) En lugar de loguearnos, ingresamos a nuestra consola
Presionamos ctrl+alt+f1 y nos logueamos directamente ahí (veremos que la contraseña no muestra caracteres o los clásicos * cuando la escribimos)

2) Con este comando reinstalaremos cinnamon

# apt install --reinstall cinnamon

 

3) Reiniciamos luego que termine el proceso:

# sudo systemctl restart mdm

Fuente: https://forums.linuxmint.com

by Mauro at September 14, 2018 07:25 PM

Trabajando con Directorios (copiar, mover y renombrar) desde la consola

Muchas veces sobre todo para los principiantes manejar directorios por la consola suele se un poco complejo, hoy dejaré en un post simple y consizo como copiar, mover y renombrar directorios usando la terminal.

1) Copiar:

# cp -r directorio/ nuevodestino/nombre_copia

Donde:
Cp crea la copia, con el -r le pasamos recurisvidad por lo que copiará la carpeta y todo su contenido.
El nombre del directorio siempre debe tener el / al final de esa manera le  indicamos que es un directorio, sino lo tomará como archivo.

Ejemplos:
Para copiar el directorio imagenes al directorio imagenes 2 en una carpeta por encima de la actual:
# cp -r imagenes/ ../imagenes2

Para copiar el directorio imagenes al directorio imagenes2 en la misma carpeta
# cp -r imagenes/ imagenes2

2) Mover:

# mv directorio/ nuevodestino/nombre_directorio

Donde:
Con mv moveremos el directorio, lo elimina de donde estaba y lo traslada al destino que elijamos, no es necesario hacerlo recursivo.

Ejemplos:
Mover el directorio imgagenes a un nivel por encima sin cambiarle el nombre)
# mv imagenes ../imagenes

Mover el directorio imagenes a la carpeta interna files cambiandole el nombre a images
# mv imagenes files/images

 

3) Renombrar

# mv directorio nuevonombre

Para renombrar un directorio utilizaremos el mismo comando mv, dado que es como el traspaso del directorio de un lugar a otro. Directamente y sin necesidad de la / colocamos el nombre actual y luego el nombre nuevo.

Ejemplo:
# mv imagenes imagenlistas

by Mauro at September 14, 2018 11:34 AM

September 13, 2018

soyadmin.com

Jugando con md5sum para comprobar/proteger archivos desde nuestra Consola

Según nuestra amiga la wikipedia:md5sum es un programa originario de los sistemas Unix que tiene versiones para otras plataformas, realiza un hash MD5 de un archivo. La función de hash devuelve un valor que es único para cada archivo, con la particularidad que una pequeña variación en el archivo provoca una salida totalmente distinta, lo que ayuda a detectar si el archivo sufrió alguna variación. Es una herramienta de seguridad que sirve para verificar la integridad de los datos.

Es muy utilizado en la actualidad y en el mundo Linux es muy habitual encontrar las sumas de control MD5 de todos los paquetes que componen una distribución. También hay algunas aplicaciones que utilizan su algoritmo para encontrar archivos duplicados.”

Seguramente alguna vez han descargado un archivo o programa y este incluía en la descripción o por ahí el MD5 que es una combinación larguísima de letras y números el cual es un identificador único del archivo que estamos descargando, esto nos da seguridad de que el archivo no está corrupto o no ha sido modificado o tocado por un intermediario y comparando los 2 MD5 podremos verificar la integridad del mismo.

Podemos ver el ejemplo en la imagen:

Para entender mejor, vamos con un ejemplo:
Creamos un archivo llamado soyadmin.txt que tenga dentro la palabra Web y verificamos su MD5

# echo "Web" > soyadmin.txt
# md5sum soyadmin.txt
9d3fd68b70346ac3fa7e8e196ac24f64     soyadmin.txt

Ahora para verificar que si modificamos el archivo cambia el MD5 editaremos el archivo soyadmin.txt

# nano soyadmin.txt (cambiamos Web por Wev)
# md5sum soyadmin.txt
21f57aa1ab56a6ebaaae3b2612376363 soyadmin.txt

Vemos con claridad que el MD5 cambió lo cual nos indica que el archivo fue modificado. Esto es un algoritmo único de cada archivo el cual no se puede repetir ni siendo que el archivo vuelva a su estado original.

Una herramienta muy útil y eficiente para mantener un archivo Original. Resguardándonos de un dolor de cabeza por instalar un software modificado por terceros.

Si tenemos que entregar un archivo o programa podemos adjuntar el MD5 y de esa manera estamos asegurando una versión original.

Como verán estas opciones que doy son para Linux, utilizando la consola. Existen alternativas para verificar el MD5 también para Windows como lo es: MD5Cheker el cual nos permitirá controlar el hash MD5 de un archivo.

También posee una utilidad de encriptación de contraseñas en el diseño en PHP. Aquí hay muchas opciones y su utilización MD5 en PHP

by Mauro at September 13, 2018 07:55 PM

CPANEL & RHEL: Ubicación de los Logs, logs y más logs. cPanel, email, apache, base de datos etc!

Siempre sucede que cuando necesitamos ver un log decimos DONDE ESTA!!!!

Les dejo un listado con la ubicación de los principales logs de nuestro server CentOS y WHM:

Log individual por dominio     /usr/local/apache/domlogs
Log de acceso por dominio     /usr/local/apache/domlogs/{DOMINIO}
Errorlog de Apache     /usr/local/apache/logs/error_log
Log de control de suPHP     /usr/local/apache/logs/suphp_log
Log de Mailman     /usr/local/cpanel/3rdparty/mailmain/logs
Log de accesos a cPanel y WHM     /usr/local/cpanel/access_log
Registro de errores de cPanel     /usr/local/cpanel/error_log
cPanel license log     /usr/local/cpanel/license_log
Log de acceso de usuarios a cPanel     /usr/local/cpanel/login_log
Registro de estadísticas de cPanel     /usr/local/cpanel/stats_log
Log de acceso y registro de cambios de cPanel     /usr/local/cpanel/logs/access_log
Registro de cambios a la base de clietnes     /usr/local/cpanel/logs/build_locale_database_log
Log de respaldos     /usr/local/cpanel/logs/cpbackup
Registro de errores en Webdisk     /usr/local/cpanel/logs/cpdavd_error_log
Registro de la protección de fuerza bruta (CPHULK)     /usr/local/cpanel/logs/cphulkd.log
Log de DNS     /usr/local/cpanel/logs/dnsadmin_log
Log del rebuild de apache (EASYAPACHE)     /usr/local/cpanel/logs/easy/apache/
Registros de alertas     /usr/local/cpanel/logs/panic_log
Log de procesamiento de tareas     /usr/local/cpanel/logs/queueprocd.log
Reinicio de Apache desde WHM     /usr/local/cpanel/logs/safeapcherestart_log
Log de la base de datos local     /usr/local/cpanel/logs/setupdbmap_log
Log de estadísticas del sitio     /usr/local/cpanel/logs/stats_log
Log del tailwatch     /usr/local/cpanel/logs/tailwatch_log
Registro de actualizaciones     /usr/local/cpanel/logs/updated_analysis/{TIMESTAMP}.log
Registro de cuentas en cPanel     /var/cpanel/accounting.log
Log de consumo de Bandwith por usuario     /var/cpanel/bandwidth.cache/{USERNAME}
Log de consumo de Bandwith     /var/cpanel/bandwidth/{USERNAME}
Logs de Horde     /var/cpanel/horde/log/
Registro de movimiento de cuentas y transferencias     /var/cpanel/logs
Logs de Roundcube     /var/cpanel/roundcube/log/
Logs de Squirremail     /var/cpanel/squirrelmail/
Log de actualizaciones de cPanel     /var/cpanel/updatelogs/updated.{TIMESTAMP}.log
Log de errores de mysql     /var/lib/mysql/{SERVER_NAME}.err
Logs del Ancho de banda total del server     /var/log/bandwidth
Log de estado de servicios     /var/log/chkservd.log
Registro del Antivirus ClamAV     /var/log/clamav
Log de instalación de cPanel     /var/log/cpanel
Log de actualizaciones de cPanel     /var/log/cpupdate.log
Registro de movimientos de Exim     /var/log/exim_mainlog
Registro de errores de Exim     /var/log/exim_paniclog
Registro de rebotes de Exim     /var/log/exim_rejectlog
Registro de problemas con Exim     /var/log/maillog [or] /var/log/messages
Registro de accesos a base de datos     /var/log/slowqueries
Registro de correos electrónicos recibidos     /var/spool/exim/input/

by Mauro at September 13, 2018 01:18 PM

Sobre bits

Monitorizar la autenticación LDAP con PowerShell

Una vez tenemos en nuestra infraestructura una herramienta de monitorización como Nagios con la que comprobamos aspectos básicos de la misma como el uso de recursos o el estado de servicios, es el momento de plantearnos monitorizar otros aspectos que nos den una visión más real del estado de nuestro entorno. En la entrada de hoy vamos a ver cómo podemos monitorizar la autenticación LDAP con PowerShell para estar siempre seguros de que la validación en nuestros controladores de dominio está funcionando de forma correcta.

Monitorizar la autenticación LDAP con PowerShell

Compobar con PowerShell que un dominio autentica de forma correcta

La mejor forma para comprobar de forma inequívoca si algo funciona es probando su uso. Dado que nuestro objetivo es comprobar que la validación en un dominio está funcionando correctamente lo que vamos a hacer será realizar una query en el dominio en la que necesitemos validarnos con usuario y contraseña. Si dicha query devuelve el valor que estamos esperando podremos determinar que la autenticación está funcionando de forma correcta.

Para realizar la query una de las formas más sencillas y portables es valernos de una clase de .Net como System.DirectoryServices.DirectoryEntry. Con ella instanciaremos un objeto con el que haremos una query al root del dominio utilizando unas credenciales creadas para la ocasión:

PS C:\> New-Object System.DirectoryServices.DirectoryEntry('LDAP://192.168.168.168/DC=sobrebits,DC=local','test_dc','Password123.')


distinguishedName : {DC=beservices,DC=local}
Path              : LDAP://192.168.168.168/DC=sobrebits,DC=local

Vamos a repasar paso a paso la línea:

  • New-Object System.DirectoryServices.DirectoryEntry: Con New-Object instanciamos un objeto de la clase System.DirectoryServices.DirectoryEntry que, como hemos apuntado anteriormente, nos servirá para hacer nuestra query.
  • LDAP://192.168.168.168/DC=sobrebits,DC=local: El path del dominio al que vamos a hacer la query.
  • test_dc: El usuario con el que autenticaremos en el dominio.
  • Password123.: El password con el que autenticaremos en el dominio.

Si la ejecución del parámetro nos devuelve el objeto que vemos en las líneas anteriores con el distinguishedName y el Path implica que la autenticación se ha realizado correctamente y se ha podido ejecutar la query, si lo que se nos retorna es un error evidentemente tenemos algún problema de autenticación.

Aplicando un poco de lógica a la query

Por último vamos a crear un mini script como el que vimos en la creación de checks de Nagios. Utilizaremos la propiedad Name del objeto que nos devuelve la query para comprobar que realmente se llama como el dominio al que estamos atacando. De no ser así devolveremos un estado “Critical”.

# Declaramos las variables del dominio
$name = 'sobrebits'
$path = 'LDAP://192.168.168.168/DC=sobrebits,DC=local'
$user = 'test_dc'
$password = 'Password123.'

# Realizamos la query al servidor de dominio
$query = New-Object System.DirectoryServices.DirectoryEntry($path,$user,$password)

# Si el valor devuelto es el mismo que el de nuestra propiedad $name devolvemos un OK (0). De no serlo devolvemos un Critical (2).
if ($query.Name -eq $name) {
    Write-Host 'OK! La autenticación funciona.'
    Exit 0
}
else {
    Write-Host 'CRITICAL! Error de autenticación.'
    Exit 2
}

Con esto hecho ya somos capaces de monitorizar la autenticación LDAP con PowerShell en nuestros servidores de dominio y tener la certeza en todo momento de que no tenemos problemas en esta parte de la infraestructura. Replicar esto mismo a cualquier sistema de monitorización no debería ser un problema ya que solo deberíamos cambiar la salida del script.

La entrada Monitorizar la autenticación LDAP con PowerShell aparece primero en Sobrebits.

by Marc Meseguer at September 13, 2018 08:00 AM

September 12, 2018

soyadmin.com

Visualizar imágenes desde consola con Caca-utils

Hace unos días enseñábamos a optimizar y comprimir imágenes desde la terminal. La idea es ahora poder previsualizar cualquier imagen .jpg .png, con esta utilidad llamada Caca-utils.

Cacaview nos brinda una previsualización de una imagen (bastante precaria) utilizando la consola. Esta aplicación no utiliza servidor gráfico, sino que arma las imágenes mediante texto utilizando ASCII-art

Vamos a instalarlo y verificar su uso el cual es muy sencillo:
1) Debian, Ubuntu y derivados:

# sudo apt-get install caca-utils

2) Red Hat, Fedora y CentOS (es necesario tener el repositorio EPEL)

# yum install caca-utils

Para utilizarlo directamente colocamos

# cacaview imagen.jpg

Nos permitirá hacer acercamientos y alejamientos (+-) de la imagen, y algunas otras pequeñas opciones.

by Mauro at September 12, 2018 10:17 PM

Como instalar DirectAdmin en CentOS 5, 6 y 7

DirectAdmin es un panel de control para administrar los servicios de un servidor dedicado (web, correo electrónico, DNS, FTP…). Entre sus numerosas funcionalidades, encontraremos
– un completo sistema para revendedores (gestión de cuentas, estadísticas…),
– un sistema de tíquets de incidencia integrado en el panel,
– un sistema de actualizaciones.

Nos permite administrar sencillamente un servidor dedicado, es muy sencillo y facil de utilizar lo que hace que sea muy valorado junto a los grandes del mercado como lo son cPanel y Plesk.
Para más información sobre directAdmin: http://www.directadmin.com/

En este posteo enseñaremos como instalar DirectAdmin en un servidor dedicado sin uso y sin configuraciones especiales. La guía nos indica como instalarlo en cualquiera de las 3 versiones de CentOS (5, 6 y 7) tanto en 32 como 64 bits.

Empezaremos con la instalación, se supone que ya tenemos contratada la licencia de Directadmin.
1) Actualizamos centOS

# yum update

 

2) Instalamos las dependencias:

CENTOS 5 Y 6: # yum install wget gcc gcc-c++ flex bison make bind bind-libs bind-utils openssl openssl-devel perl quota libaio libcom_err-devel libcurl-devel gd zlib-devel zip unzip libcap-devel cronie bzip2 cyrus-sasl-devel perl-ExtUtils-Embed autoconf automake libtool which patch mailx db4-devel
CENTOS 7: # yum install wget gcc gcc-c++ flex bison make bind bind-libs bind-utils openssl openssl-devel perl quota libaio libcom_err-devel libcurl-devel gd zlib-devel zip unzip libcap-devel cronie bzip2 cyrus-sasl-devel perl-ExtUtils-Embed autoconf automake libtool which patch mailx psmisc net-tools systemd-devel libdb-devel

3) Descargaremos el instalador de Directadmin

# wget http://www.directadmin.com/setup.sh
# chmod 755 setup.sh
# ./setup.sh

Durante esta instalación nos irá solicitando algunos datos como la licencia, hostname, etc:

*****************************************************
*
* Have you run the pre-install commands? CTRL-C if not.
* http://help.directadmin.com/item.php?id=354
*
*****************************************************
Please enter your Client ID : xxxxx
Please enter your License ID : xxxxx
Please enter your hostname \(server.domain.com\)
It must be a Fully Qualified Domain Name
Do *not* use a domain you plan on using for the hostname:
eg. don't use domain.com. Use server.domain.com instead.
Do not enter http:// or www
Enter your hostname (FQDN) : xxxxx.xxxxx.com
Client ID: xxxxx
License ID: xxxxx
Hostname: xxxxx.xxxxx.com
Is this correct? (y,n) : y
The following ethernet devices/IPs were found.
Please enter the name of the device you wish to use:
eth0 xxx.xxx.xxx.xxx
eth1
Elegimos la tarjeta de red predeterminada en el servidor (podemos asegurarnos haciendo un ifconfig):

venet0:0
venet0:1
La instalación continua...

Enter the device name: xxx
Is xxx.xxx.xxx.xxx the IP in your license? (y,n) : y
DirectAdmin will now be installed on: Enterprise 5.7
Is this correct? (must match license) (y,n) : y
You now have 4 options for your apache/php setup.
1: customapache: end-of-life software. Includes Apache 1.3, php 4 and frontpage.
2: custombuild 1.1:end-of-life software. Apache 2.x, php 4, 5 or both in cli and/or suphp. Defaults to php 5.2
3: custombuild 1.2:Production version: Apache 2.x, php 5, 6, or both in cli and/or suphp. defaults to php 5.3
4: custombuild 2.0 BETA: Apache 2.4, mod_ruid2, php 5.5. Can be set to use php-FPM or fastcgi.

Post any issues with custombuild to the forum: http://www.directadmin.com/forum/forumdisplay.php?f=61

Enter your choice (1, 2, 3 or 4): 4
You have chosen custombuild 1.2.

2011-11-11 14:47:00 http://files.directadmin.com/services/custombuild/1.1/custombuild/build
Resolving files.directadmin.com
Connecting to files.directadmin.com|:80 connected.
HTTP request sent, awaiting response 200 OK
Length: 289046 (282K) [text/plain]
Saving to: `/usr/local/directadmin/custombuild/build'
100%[===========================================================================>] 289,046 855K/s in 0.3s
2011-11-11 14:47:01 (855 KB/s)  `/usr/local/directadmin/custombuild/build' saved [289046/289046]
Would you like the default settings of apache 2.2 and php 5 cli? (y/n): y *
Using the default settings for custombuild.
Would you like to search for the fastest download mirror? (y/n): y

 

4) Una vez finalizada la instalación podemos ingresar al panel de control mediante: http: //xx.xx.xx.xx: 2222 (por supuesto reemplazamos las xx por la dirección de IP del servidor).
Para acceder al panel usted recibirá unos datos de acceso defaults al finalizar la instalación, en caso de no recordarlos o no haber tomado nota, puede recuperarlos haciendo:

# cd /usr/local/directadmin
# ./directadmin i

U otra alternativa es verificar el log de la instalación de Directadmin aqui:
# vi /usr/local/directadmin/scripts/setup.txt

 

5) Por último y para finalizar podemos actualizar el servicio haciendo:

# cd /usr/local/directadmin/custombuild
# ./build clean
# ./build update
# ./build update_versions

Con esto finalizamos una instalación básica de DirectAdmin.

by Mauro at September 12, 2018 08:39 PM

September 11, 2018

soyadmin.com

10 pasos para acelerar Ubuntu

En este post detallaremos algunos pasos para optimizar nuestro sistema. Si bien la mayoría de las distribuciones ya tienen una configuración y prestaciones excelentes, podemos usar estos tips para exprimir y lograr sacarle un plus a nuestro equipo.

1) Modificar el tiempo de espera del Grub
Cuando prendes tu PC muestra el grub el cual espera que inicies el sistema que elijas o algunas de las opciones de recuperación que se presentan en el mismo. Ese tiempo puede modificarse y achicarse para que tu pc solo demore un par de segundos en lugar de los 10 que trae por default.

¿Cómo modificamos el tiempo de espera del Grub?

# sudo nano /etc/default/grub
Editamos GRUB_TIMEOUT = 10 al tiempo en segundos que deseamos (recomendado 2)
# sudo update-grub

Recuerda que esto hace que el grub pase rápido y en algunos casos no logres seleccionar otro SO para iniciar.

2) Instalar Preload
Preload es una aplicación o demonio que se ejecuta en segundo plano, la cual analiza el comportamiento del usuario detectando que aplicaciones usas con más frecuencia y de que manera “usas” tu PC.
A grandes razgos genera un listado de las aplicaciones que más usamos y alojará los binarios y dependencias de las mismas en la RAM del sistema, con lo cual tendremos una precarga de aplicaciones las cuales abrirán de manera casi instantánea.

¿Cómo se instala?

# sudo apt-get install preload

Reiniciamos el equipo y ya preload quedará recopilando información en segundo plano, no requiere de ninguna configuración especial y veremos con el transcurso de los días como se irán acelerando la apertura de aplicaciones en nuestro equipo.

3) Instalar TLP (Linux Advanced Power Management)
TLP (Linux Advanced Power Management) es un administrador de energía con el cual (sin ser un experto) puedes lograr que tu PC tenga mejor rendimiento, mejor gestión de recursos y energía y evitar el sobrecalentamiento.
¿Qué hace?
– Configura el CPU para un mejor rendimiento, evitar el sobrecalentamiento y ahorro de energía.
– Analiza del funcionamiento del disco duro y optimiza su funcionamiento.
– Suspende los dispositivos USB que no estén en uso.
– Define los dispositivos inalámbricos de frecuente uso y los habilita/deshabilita al inicio.

¿Cómo se instala?

# sudo add-apt-repository ppa:linrunner/tlp
# sudo apt-get update
# sudo apt-get install tlp tlp-rdw
# sudo tlp start

Para controlar que fue correctamente instalado y está funcionando ejecutamos:

# sudo tlp-stat -s

 

4) Aplicaciones al Inicio
Debemos verificar que aplicaciones se cargan al inicio, vas a menu y escribes “Aplicaciones al Inicio”
Existen aplicaciones que se configuran automáticamente al inicio, como el skype, anydesk, etc etc.

Si vemos que el rendimiento no es óptimo y podemos prescindir de estas aplicaciones al inicio del sistema, es recomendado desactivar el inicio automático.

5) Instalar los drivers propietarios de nuestra tarjeta de video
Dado que ubuntu y sobre todo Gnome hacen un arduo uso de los gráficos, es recomendable instalar los drivers privativos de tu Tarjeta gráfica. De esa manera mejoraremos la gestión gráfica.

Esto lo encontramos en el Menú de aplicaciones -> Software y actualización -> Controladores adicionales. Instalamos y deberemos reiniciar la PC para que tome los cambios.

También existe una manera de hacerlo con nuestra terminal tal cual lo explicamos en ESTE POST 

6) Controlar que procesos carga Systemd
Tal como lo explicamos en este POST https://soyadmin.com/analizar-el-tiempo-de-arranque-de-nuestro-equipo-linux/ podemos verificar que procesos tardan más durante el iniicio de nuestro Ubuntu y previa investigación podemos desactivarlo del iniicio para así acortar el mismo.

¿Cómo se usa?

# systemd-analyze blame

Si detectamos algún proceso innecesario al inicio podemos desactivarlo con:

# systemctl disable NOMBRE_DE_SERVICIO

IMPORTANTE: Estos cambios pueden ROMPER el sistema, actuar con cuidado e investigando cada proceso a desactivar


7) Utilizar espejos o repositorios de actualizaciones de nuestro país o región de software
En el Menú de aplicaciones -> Buscar software y actualización -> Software de Ubuntu buscaremos el servidor más cercano a nuestra ubicación.
Esto es sencillo, a más cerca mayor velocidad de descarga. (al menos así debería funcionar)

8) Limpiar nuestro sistema periódicamente.
Con el constante uso de nuestro equipo, vamos dejando “basura” o residuos de instalaciones, paquetes, repositorios y también archivos temporales del uso diario.

Podemos hacer una limpieza de nuestro equipo de esta manera:
LIMPIAR PAQUETES
LIMPIAR TEMPORALES Y MÁS CON BLEACHBIT
ELIMINAR REPOSITORIOS PPA QUE YA NO USEMOS

9) Borrar la caché de resultados de búsqueda
Ubuntu guarda un histórico de búsquedas realizadas para tener a “mano” rápido un resultado de nuevas búsquedas.
Tenemos que hacer una limpieza periódica de estos resultados en: Configuración del sistema> Seguridad y privacidad.

10) Sotware y hardware
Si notamos que nuestro sistema sigue lento aun configurando y realizando los pasos de arriba, tal vez no hemos elegido la distribución o escritorio correctos. Existen distintos escritorios y distros que pueden aprovechar mejor nuestro hardware, entre los desks livianos tenemos xfce, mate, lxde, budgie los cuales suelen tener un menor consumo al que muestra Genome.
En cuanto a nuestro hardware, ampliar la ram a 8 o 16GB e instalar un disco SSD (sólido) mejoraría enormemente la velocidad de nuestro sistema, logrando una performance impecable. Pero bueno esta sería una inversión la cual en algunos casos (como el mío) son costos económicos imposibles de alcanzar.

by Mauro at September 11, 2018 10:44 PM

LIBRO: Ataques a Bases de Datos: SQL Injection

Título: ATAQUES A BASES DE DATOS: SQL INJECTION
Autor: UOC
Páginas: 70 Páginas
Tamaño: 1,5 MB
Fomato: PDF

 

 

 

Contenido:

Inyección SQL es un método de infiltración de código intruso que se vale de una vulnerabilidad informática presente en una aplicación en el nivel de validación de las entradas para realizar consultas a una base de datos.

El origen de la vulnerabilidad radica en el incorrecto chequeo y/o filtrado de las variables utilizadas en un programa que contiene, o bien genera, código SQL. Es, de hecho, un error de una clase más general de vulnerabilidades que puede ocurrir en cualquier lenguaje de programación o script que esté embebido dentro de otro.

Se conoce como Inyección SQL, indistintamente, al tipo de vulnerabilidad, al método de infiltración, al hecho de incrustar código SQL intruso y a la porción de código incrustado.

En este módulo UOC perteneciente a su colección sobre Seguridad Informática, se analizan todos los aspectos relacionados con las inyecciones SQL. El temario es el siguiente:

SQL Injection: introducción
Blind SQL Injectión: seguridad basada en tiempos
Arithmetic Blind SQL Injection
Ficheros remotos en la inyección SQL
Consejos

Fuente: openlibra.com

by Mauro at September 11, 2018 12:07 PM

September 10, 2018

soyadmin.com

CentOS/RHEL: Liberar espacio en la partición /boot eliminando kernels viejos

Trabajando en un server CentOS me encontre con la imposibilidad de actualizar (hacer un update) debido a que la partición /boot no poseía el suficiente espacio.
Si bien no es algo super crítico, el servidor nos va quedando desactualizado y sin los últimos parches, kernels, etc. Tenía que hacer lugar en la partición /boot.

1) Lo primero fue ver cuantos kernels tenía para ver si eliminando o desinstalando algunos podía hacer espacio.

# rpm -q kernel
kernel-2.6.32-504.1.3.el6.x86_64
kernel-2.6.32-431.23.3.el6.x86_64
kernel-2.6.32-573.8.1.el6.x86_64
kernel-2.6.32-431.20.3.el6.x86_64
kernel-2.6.32-604.30.3.lve1.3.63.el6.x86_64

Walá! tenía varios para eliminar y de esa manera tema solucionado.

2) Para borrar kernels antiguos basta con ejecutar este comando:

# package-cleanup --oldkernels --count=2

Aqui limpiará los kernles viejos, dejando solamente los 2 más actuales.

3) Por último para evitar que el sistema guarde tantos kernels viejos hacemos:

# vi /etc/yum.conf
Acá agregamos o editamos esta línea
installonly_limit=2

by Mauro at September 10, 2018 09:10 PM

¿Como optimizar y comprimir imágenes JPG y PNG desde la Terminal?

Existen algunas herramientas para poder optimizar y comprimir imágenes, seguramente a la hora de realizar esto buscamos algún software específico con interfaz gráfica o alguna web que se encargue de hacer el retoque. Sucede que hay una manera sencilla y fácil de realizar estos procedimientos, directamente desde nuestra amada consola, casi sin gasto de recursos y sin subir imágenes a páginas o cuestiones raras.

Hoy les traigo 2 aplicativos para optimización y compresión de imágenes JPEG y PNG
1) OptiPNG nos permitirá reducir imágenes PNG sin perder calidad de las mismas.
2) JpegOptim otra útil herramienta para optimizar la calidad y comprimir JPEG’s sin perder calidad de las imágenes.

1) Empezamos por OptiPNG:
SU INSTALACIÓN:
a) Debian, ubuntu y derivados:

# apt-get install optipng

b) Red Hat, CentOS y derivados:

# yum install optipng (debemos tener el repo EPEL instalado)

c) Fedora:

# dnf install optipng

¿CÓMO SE USA?:
Utilizaremos una imagen cualquiera (soyadmin.png)
a) Para empezar veremos el tamaño de soyadmin.png

# ls -lh soyadmin.png
-rw-r--r-- 1 soyadmin soyadmin 113k Feb  5 09:05 soyadmin.png
*Vemos que la imagen pesa 113kb

b) Vamos ahora a comprimirla y luego ver nuevamente el espacio

# optipng soyadmin.png
OptiPNG 0.6.4: Advanced PNG optimizer.
Copyright (C) 2001-2010 Cosmin Truta.

** Processing: soyadmin.png
1006x1006 pixels, 4x8 bits/pixel, RGB+alpha
Input IDAT size = 115074 bytes
Input file size = 115320 bytes

Trying:
zc = 9  zm = 8  zs = 0  f = 0        IDAT size = 95250

Selecting parameters:
zc = 9  zm = 8  zs = 0  f = 0        IDAT size = 95250

Output IDAT size = 95250 bytes (19824 bytes decrease)
Output file size = 95460 bytes (19860 bytes = 17.22% decrease)

c) Chequeamos nuevamente el peso de la imagen para ver que ha sido optimizada correctamente

# ls -lh soyadmin.png
-rw-r--r-- 1 soyadmin soyadmin 94k Feb  5 09:05 soyadmin.png
*Vemos que la imagen ha sido reducida un 17.22% y ahora pesa 94kb

d) Vamos a optimizar varias imágenes en .png

# optipng *.png
OptiPNG 0.6.4: Advanced PNG optimizer.
Copyright (C) 2001-2010 Cosmin Truta.

** Processing: 1.png
2500x2248 pixels, 4x8 bits/pixel, RGB+alpha
Input IDAT size = 4375573 bytes
Input file size = 4384725 bytes

Trying:
zc = 9  zm = 8  zs = 1  f = 5        IDAT size = 4375573
zc = 9  zm = 8  zs = 3  f = 5        IDAT size = 4349273

Selecting parameters:
zc = 9  zm = 8  zs = 3  f = 5        IDAT size = 4349273

Output IDAT size = 4349273 bytes (26300 bytes decrease)
Output file size = 4352017 bytes (32708 bytes = 0.75% decrease)

** Processing: 3.png
993x805 pixels, 4x8 bits/pixel, RGB+alpha
Input IDAT size = 262492 bytes
Input file size = 262847 bytes

Trying:
zc = 9  zm = 8  zs = 1  f = 5        IDAT size = 261288

Selecting parameters:
zc = 9  zm = 8  zs = 1  f = 5        IDAT size = 261288

Output IDAT size = 261288 bytes (1204 bytes decrease)
Output file size = 261547 bytes (1300 bytes = 0.49% decrease)

e) Para más usos y posibles características podemos verificar su manual

# man optipng

 

2) Ahora utilizaremos jpegoptim
SU INSTALACIÓN:
a) Debian, Ubuntu y derivados:

# apt-get install jpegoptim

b) Red Hat, CentOS y derivados:

# yum install jpegoptim (debemos tener el repo EPEL instalado)

c) Fedora y derivados:

# dnf install jpegoptim

¿CÓMO SE USA?:
Utilizaremos una imagen cualquiera (soyadmin.jpg)
a) Para empezar veremos el tamaño de soyadmin.jpg

# ls -lh soyadmin.jpg
-rw-r--r-- 1 root root 141K Feb  5 10:02 soyadmin.jpg
*Vemos que la imagen pesa 141kb

b) La comprimimos y optimizamos

# jpegoptim soyadmin.jpg
soyadmin.jpg 1280x1024 8bit N JFIF  [WARNING] 143690 --> 55934 bytes (61.07%), optimized.

c) Volvemos a ver el tamaño de la imágen y vemos que fue reducida en un 61.07%

# ls -lh soyadmin.jpg
-rw-r--r-- 1 root root 55K Feb  5 10:04 soyadmin.jpg
*Ahora pesa 55Kb

d) Una interesante opción de esta herramienta que podemos elegir el tamaño aproximado al que queremos reducir la imágen, por ejemplo bajaremos soyadmin.jpg de 141kb a 100kb

# jpegoptim --size=100k soyadmin.jpg
soyadmin.jpg 1280x1024 8bit N JFIF  [WARNING] 143690 --> 105310 bytes (26.71%), optimized.

e) Vemos que ahora que su tamaño ronda los 100k

# ls -lh soyadmin.jpg
-rw-r--r-- 1 root root 103K Feb  5 10:22 soyadmin.jpg

f) Para más opciones y utilidades podemos ver el manual del aplicativo

# man jpegoptim

by Mauro at September 10, 2018 11:02 AM

MagMax Blog

DevOps: ¿Equipo, Rol o metodología?

Recientemente leí el artículo 6 DevOps mistakes to avoid, cuyo primer punto es "Creating a single DevOps team". Esto genero un pequeño hilo en twitter con @recena, donde colaboró también mi amigo @thejtoken.

Finalmente, @david_bonilla, en la última bonilista, ha escrito también en torno a este tema: ¿Es DevOps un rol o una metodología de trabajo?.

En este artículo doy mis argumentos a favor y en contra.

Leer más… (quedan 5 minutos de lectura)

by Miguel Ángel García at September 10, 2018 04:33 AM

September 07, 2018

soyadmin.com

LIBRO: Capacitación Digital Básica II

Título: CAPACITACIÓN DIGITAL BÁSICA II
Autor: UOC
Páginas: 466 páginas
Tamaño:  37.5 MB
Fomato: PDF

 

 

 

Contenido:

La guía de Capacitación Básica II trabaja el segundo nivel de los contenidos de los módulos de Tratamiento de texto y de Tratamiento multimedia y también introduce nuevos contenidos relativos a los módulos de Tratamiento de datos, Tratamiento numérico y Presentación digital.

De igual manera que en el primer material de capacitación básica, incluye el módulo de @ctitud digital que es tratado de una manera transversal a lo largo de los contenidos de los módulos principales.

Todos los módulos se estructuran en base a temas y subtemas que facilitan la adquisición gradual y progresiva de los contenidos que se trabajan.

Al final de cada tema se proponen actividades de autoevaluación que permiten la evaluación del grado de aprendizaje de los conceptos que se trabajan en ese tema.

Fuente: openlibra.com

by Mauro at September 07, 2018 09:00 PM

¿Cómo montar una imagen ISO desde nuestra consola?

Si queremos montar una imágen ISO como una unidad para usarla localmente, basta con un par de comandos en nuestra terminal para que quede montada.

1) Creamos el directorio donde quedará montada:

# mkdir /home/soyadmin    (lugar y nombre que querramos)

2) Cargamos el módulo loop

# modprobe loop

3) Montamos la imágen:

# mount  -t  iso9660  -o loop  archivo.iso  /home/soyadmin

Donde:
Montamos archivo.iso en /home/soyadmin
-t obliga a usar el tipo de archivo
iso9660 es el tipo de archivo
-o loop permite que se lea a sí mismo (por ejemplo cuando ejecutamos algo)

4) Como desmontar:

# cd /home
# umount /home/soyadmin

 

by Mauro at September 07, 2018 12:30 PM

RooTeando

Tomando Un Café 41: Reflexión sobre Telegram y sus usos.

En este audio tendre una pequeña reflexión sobre Telegram, el uso que podemos darle y para que no sirve Telegram.  También algunos errores de uso por parte de los usuarios.  


Música: Elephant Funeral-The Art of Living- 11. 40 Hours  https://freemusicarchive.org


Si quieres apoyarme  de forma económica para mis podcast y canales, puedes realizarlo de diferentes formas:
PayPal   https://paypal.me/JoseAJimenez
Programa afiliado de Amazon  https://amzn.to/2Myjet8, si ...

September 07, 2018 12:21 AM

September 06, 2018

soyadmin.com

Analizar el tiempo de arranque de nuestro equipo Linux

Con systemd-analize podemos verificar y medir el tiempo de arranque de nuestro equipo. Siempre y cuando nuestra distribución use systemd como gestor de arranque.

Nos muestra el tiempo de inicio de nuestro sistema y nos permite detallar la demora de cada proceso. Esto es muy util ya que si notamos lentitud al iniciar nuestro equipo podemos ver que procesos o servicios son los responsables y en todo caso luego desactivarlos.

Conocer el tiempo de inicio de nuestro sistema:

# systemd-analyze

El resultado está dividido en 2 (kernel y usuario)

Luego podemos detallar el tiempo de carga de los procesos o servicios:

# systemd-analyze blame

 

Buscamos en internet que insidencia tienen esos procesos que más consumen en nuestro Ubuntu y podemos desactivarlos con:

# systemctl disable NOMBRE_DE_SERVICIO

by Mauro at September 06, 2018 08:06 PM

Problema con Spool de IP’s en cPanel – Show/Edit Reserved IPs

Luego de un reinicio por mantenimiento de uno de nuestros servidores, nos encontramos que al volver este había perdido todas las IP asignadas que no estaban reservadas. Es decir que al realizar un Show/Edit Reserved IPs aparecían solamente las ip’s reservadas del servidor.
El problema grave fue que una de esas IP perdidas estaba declarada en el /etc/mailips como salida del caudal de correos, haciendo que los emails no tengan salida del servidor. 🙁 Siendo que uno cuando detecta problemas en el correo lo último que se fija es en que una de las IP del mailips este desaparecida…

 

Lo primero que hice fue tratar de agregar las IP’s nuevamente desde el WHM, esto devolvía este error:

Con esto verificamos que las IP estaban anexadas al servidor pero cPanel no las veía, chequeamos más a fondo y detectamos que las IP aparecían en estos archivos:

/etc/hosts
/etc/ips
/etc/mail_reverse_dns

Si vemos que las IP aparecen en alguno de estos archivos necesitaremos hacer un Rebuild del Spool de IP’s

# /etc/rc.d/init.d/ipaliases restart
Bringing up eth0:cp1                                       [  OK  ]
Routing 133.133.133.133                                     [  OK  ]
Bringing up eth0:cp2                                       [  OK  ]
Routing 133.133.133.134                                     [  OK  ]
Bringing up eth0:cp3                                       [  OK  ]
Routing 133.133.133.135                                    [  OK  ]
Bringing up eth0:cp4                                       [  OK  ]
Routing 133.133.133.136                                   [  OK  ]


Una vez finalizado el rebuild las IP aparecieron en nuestro cPanel, solucionando el problema.

by Mauro at September 06, 2018 12:21 PM

Sobre bits

Crear VLANs con PowerCLI de forma masiva

En más de una ocasión me he encontrado con la necesidad de crear rangos grandes de VLANs (realmente Virtual Machine Port Groups con tag de VLAN) en infraestructuras sin switches distribuidos y con varios nodos ESXi. Si bien crear unas pocas VLANs en algunos nodos es una tarea rápida que no entraña mucho misterio, cuando los números suben se puede volver una tarea tediosa y en la que es muy fácil cometer errores. Es por ello que en la entrada de hoy veremos cómo crear VLANs con PowerCLI de forma masiva de forma muy sencilla.

Usando New-VirtualPortGroup para crear VLANs con PowerCLI

Antes de empezar, como siempre, podemos consultar los cmdlets disponibles para la gestión de Virtual Port Groups (VLANs) con Get-Command:

Comandos_VirtualPortGroupLos cmdlets resultantes son bastante autoexplicativos, pero se puede consultar la lista de verbos aprobados y su significado en la documentación de Microsoft.

Tal como dice el título de la sección nos valdremos de New-VirtualPortGroup para crear una nueva VLAN. Este cmdlet es muy sencillito y, como se puede ver en la ayuda del mismo, dispone de muy pocos parámetros:

  • Name: El nombre que daremos al Virtual Port Group.
  • VirtualSwitch: El Virtual Switch sobre el que crearemos la VLAN.
  • VlanId: El tag de la VLAN.

Así que vamos a proceder a crear un nuevo Virtual Port Group de prueba llamado ‘sobrebits’ con VLAN tag 666:

PS C:\> New-VirtualPortGroup -Name sobrebits -VirtualSwitch vswitch0 -VLanId 666

Name                      Key                            VLanId PortBinding NumPorts
----                      ---                            ------ ----------- --------
sobrebits                 key-vim.host.PortGroup-sobr... 666

Crear rango de VLANs con PowerCLI

Visto como crear una VLAN con PowerCLI podemos proceder a utilizar el comando para generar VLANs de forma masiva. Para ello podemos valernos de un bucle for:

# Declaramos las variables de VLAN inicial, final y el vswitch sobre el que crearlas:
$Start = 667
$End = 675
$Vswitch = 'vswitch0'

# Recorremos el rango creando las VLAN:
for ($i=$Start; $i -le $End; $i++) {
    New-VirtualPortGroup -VirtualSwitch $Vswitch -Name "VLAN$i" -VlanID $i
}

Si ejecutamos el código podremos ver como se crean todos los Virtual Port Groups:

Name                      Key                            VLanId PortBinding NumPorts
----                      ---                            ------ ----------- --------
VLAN667                   key-vim.host.PortGroup-VLAN667 667
VLAN668                   key-vim.host.PortGroup-VLAN668 668
VLAN669                   key-vim.host.PortGroup-VLAN669 669
VLAN670                   key-vim.host.PortGroup-VLAN670 670
VLAN671                   key-vim.host.PortGroup-VLAN671 671
VLAN672                   key-vim.host.PortGroup-VLAN672 672
VLAN673                   key-vim.host.PortGroup-VLAN673 673
VLAN674                   key-vim.host.PortGroup-VLAN674 674
VLAN675                   key-vim.host.PortGroup-VLAN675 675

Usando el módulo New-VMHostVlan para crear VLANs masivamente con PowerCLI

Para acabar, me gustaría compartir un módulo que he creado y que yo mismo uso que básicamente utiliza lo visto en el punto anterior pero me permite ejecutarlo en modo comando y que siempre llevo cargado en mi sesión de PowerShell. Podéis descargar el módulo desde mi repositorio de GitHub.

Con New-VMHostVlan podemos utilizar los siguientes parámetros:

  • Start: VLAN de inicio.
  • End: VLAN final.
    • Si no se especifica una únicamente crea la VLAN de -Start.
  • Server: Servidor ESXi al que conectarse para crear las VLANs.
    • Si no se especifica intenta crearlo en el servidor al que ya se esté conectado. Si no se está conectado a ninguno devuelve error.
  • Vswitch: vSwitch en el que crear las VLANs.
  • Prefix: Prefijo a especificar para el campo Name de la VLAN.
    • Por defecto es ‘VLAN’.
    • Ejemplo: Si especificamos ‘-Prefix V’ crearía el nombre de las VLANs en formato V671, V672…

Así que la ejecución de la función es sencillisima, este podría ser un ejemplo:

PS C:\> New-VMHostVlan -Start 676 -End 680 -Vswitch 'vswitch0' -Prefix 'sobrebits'

Name                      Key                            VLanId PortBinding NumPorts
----                      ---                            ------ ----------- --------
sobrebits676              key-vim.host.PortGroup-sobr... 676
sobrebits677              key-vim.host.PortGroup-sobr... 677
sobrebits678              key-vim.host.PortGroup-sobr... 678
sobrebits679              key-vim.host.PortGroup-sobr... 679
sobrebits680              key-vim.host.PortGroup-sobr... 680

Después de todo lo ejecutado en la entrada esto es lo que podríamos ver en nuestro nodo:

Crear vlans con powercli

¡Espero que la entrada os sea útil y os ahorre algo de vuestro valioso tiempo!

La entrada Crear VLANs con PowerCLI de forma masiva aparece primero en Sobrebits.

by Marc Meseguer at September 06, 2018 08:00 AM

September 05, 2018

soyadmin.com

Eliminar paquetes obsoletos en Debian, Ubuntu y derivados

De tanto instalar, modificar, probar, instalar programas, etc… van quedando paquetes obsoletos o en desuso los cuales están ahi por estar.

Con un simple comando verificaremos si tenemos paquetes obsoletos:

# dpkg -l | grep -i ^rc

 

Esto los listará, luego para eliminarlos con este comando:

# dpkg -l |grep -i ^rc | cut -d " " -f 3 | xargs dpkg --purge

Siempre como root y desde nuestra consola preferida

by Mauro at September 05, 2018 07:50 PM

Bloquear/rechazar correos de un dominio en Exim

Esto es para casos donde un dominio peperulo.com envía miles y miles de correos hacia distintos clientes de  nuestro servidor, sabiendo que es spam y es necesario resguardarnos, podemos ponerles un bloqueo permanente desde el mismo Exim y de esa manera aseguramos de que no sigan molestando.

Esta es una excelente medida contra el SPAM, salvando a nuestro servidor de tener que procesar miles y miles de correos spam.

La solución es ingeniosa:
1) Crearemos un archivo donde anotaremos todos los dominios a bloquear:

# vi /etc/eximdominiobloqueado
Aqui colocaremos todos los dominios que deseamos bloquear uno debajo del otro, por ejemplo: peperulo.com

2) En nuestro WHM tendremos que activar el escaneo de este archivo a fin de bloquear todo lo que contiene
Home »Service Configuration »Exim Configuration Manager – Advanced Editor
Add additional configuration settingAqui agregamos:
domainlist exim_blacklist = lsearch;/etc/eximblacklist

3) Una vez que agregamos dicha linea, nos moveremos a:
ROUTERS CONFIGURATION
Aqui agregaremos el rebote que recibirá el remitente.

reject_domains:

driver = redirect
# RBL Blacklist incoming hosts
domains = +exim_blacklist
allow_fail
data = :fail: Conexión rechazada: Su $domain fue bloqueado por enviar SPAM.

Chequenado los logs de Exim, veremos como rechaza los emails de dicho dominio.

by Mauro at September 05, 2018 12:29 PM

September 04, 2018

soyadmin.com

3 maneras de instalar los drivers Nvidia en Ubuntu 18.04

Si cuentan con una tarjeta gráfica Nvidia ya sea integrada o como placa es necesario instalar drivers privativos de Nvidia para lograr un mejor rendimiento y calidad de imagen.

Lo primero que tendremos que hacer es verificar el modelo de nuestra tarjeta gráfica, con este comando lo podremos hacer perfectamente.

# lspci | grep VGA

Luego con otro comando verificaremos cual driver es el más actual para instalar:

# ubuntu-drivers devices

En mis resultados vemos que los drives recomendados son los nvidia-340 que luego usaremos para instalar directamente dichos drivers

 

1) Usando PPA
Usando repositorios de terceros

# sudo add-apt-repository ppa: graphics-drivers / ppa
# sudo apt-get update

Conociendo el driver recomendado instalaremos:

# sudo apt install nvidia-340

 

2) Instalación directa (RECOMENDADA)
Instalación conociendo el driver

# sudo apt install nvidia-340

Si no conocemos el driver podemos dejar que lo haga automático:

# sudo ubuntu-drivers autoinstall

 

3) Descargar e instalar los drivers directamente desde la web oficial de Nvidia
Ingresaremos a: https://la.nvidia.com/Download/index.aspx?lang=la
En el buscador colocaremos el modelo de nuestra placa o chip Nvidia y descargamos el driver oficial

Una vez descargado el “.run” procederemos a instalarlo:

# sh NVIDIA-xxxxxx-Linux.run

Y listo tendremos instalado el driver de nuestra placa corretamente.

by Mauro at September 04, 2018 10:02 PM

RooTeando

ARM para TODOS: 02 NAS económicos(II)

Segundo ,y último, audio de las serie sobre NAS económicos, en este episodio subimos la calidad y precio. Son soluciones para como mínimo  dos disco duros.

La lista de soluciones está compuesto por tres placas y cajas, mas otra placa de bonus.

🔹Helios4: Placa con Marvell ARMADA con 2 GB DDR4 ECC de RAM, USB 3.0/2.0, 3 SATA III,Ethernet Gigabit, lector de tarjetas... Caja con ventiladores ,tornillos, fuente y todo los ...

September 04, 2018 09:52 PM

ARM para TODOS: 01 NAS muy económicos(I)

Este audio es el primero de los dos que grabaré sobre NAS económicos para plataforma ARM, en este primer audio me centrare en la soluciones mas baratas para crear tu propio NAS.

La lista de soluciones son las siguiente, incluye un enlace referido en Amazon.

NAS Dock para NanoPi NEO/NEO2.
Página  y compra para la placa NEO2 en la página oficial de NanoPi. http://nanopi.org/NanoPi-NEO2_Feature.html
Caja NAS https://www.friendlyarm.com ...

September 04, 2018 09:47 PM

soyadmin.com

Manjaro vs Antergos, las mejores distros Arch

Si alguna vez trataste de instalar ArchLinux te habrás dado cuenta que no es una tarea un tanto dura, dado que no existe un asistente de instalación gráfico y esta debe realizarse mediante omandos, algo distinto pero no imposible gracias a la multiplicidad de manuales y tutoriales que están dando vueltas en la red. Arch es una distribución especial, se dice que es ideal para aquellos usuarios que ya vienen de distribuciones amigables como Mint o Ubuntu y desean aprender un poco más de Linux “puro”.

Por suerte para todos aquellos que quieren aprovechar la extrema estabilidad y usabilidad que posee Arch, sin tener que recurrir a  comandos o procesos especiales a la hora de instalar, existen distribuciones basadas en Archlinux que nos facilitan la vida.

En este post, vamos a mostrar 2 de las distribuciones basadas en Archlinux más utilizadas y mejor valoradas en este año, ojo esto a mi punto de vista y según las que he probado.

1) Manjaro
Manjaro hoy en día es una de las distribuciones basadas en Arch más utilizadas y con mayor distribución y aceptación por el usuario linux. Posee un grupo de desarrollo y comunidad altamente activos, una de las primeras distros derivadas de Arch.
Manjaro es una excelente opción rolling release fácil de instalar y usar, haciendo que la percepción de Arch sea más intuitiva sin perder el poder que nos dá la posibilidad de tener a Arch como núcleo.

Manjaro tiene sus orígenes en Alemania, si bien es mantenida y desarrollada por una comunidad de múltiples países y se ha ganado un puesto en el mundo de Linux, en la actualidad ocupa el puesto 2 de las distros más utilizadas según Distrowatch. Posee sus propios repositorios y además utiliza los repositorios de Arch y AUR.
Disponible en casi todos los escritorios o sabores del momento:

  • XFCE
  • KDE
  • E17
  • Canela / Gnome
  • Fluxbox
  • KDE / Razor-qt (un proyecto Manjaro Turquía)
  • LXDE
  • Ilustración
  • NETBOOK
  • LXQT
  • Pekwm

Siendo XFCE y KDE las recomendadas y oficiales para cualquier tipo de usuario.

Aparte de estos desktops manjaro trae una rama de características propias como lo son:
– Calamares como instalador
– Repositorios propios aparte de los repo de arch y el conocido AUR
– Gestion de paquetes Pacman y QT
– La simplicidad de Pamac que sería un Pacman con gráfica.
– El ultimo kernel LTS disponible.

Página oficial: https://manjaro.org/
Página de descargas: https://manjaro.org/get-manjaro/
Manjaro en español: http://manjaro-es.org/

 

2) Antergos
Antergos es una rolling release, basada en Archlinux, actualmente en modo prueba y con ganas de quedarse permanentemente en mi Notebook de uso diario.
Es un sistema que vendría a proporcionar un medio de instalación de Arch menos intimidante, prevaleciendo la estética pulida y muy bella gracias al tema Numix por defecto.

Viene con la mayoría de los escritorios actuales:

  • Cinnamon
  • Gnome
  • Lxde
  • KDE
  • Mate
  • Openbox
  • Xfce

Antergos viene con el instalador propio Cnchi muy elegante, sencillo e intuitivo,nos permitirá elegir el entorno de escritorio que deseemos soporte de impresión, cortafuegos, la suite Libreoffice, fuentes tipográficas añadidas o incluso habilitar el repositorio comunitario AUR.

Una vez instalado nos mostrará una visión muy pulida para el usuario final de Arch, es decir facilidad y estabilidad con un toque de madurez y belleza. Se dice que antergos es una de las vías más fáciles de instalar y disfrutar Archlinux.
Entre sus características principales están:
– Pequeño repositorio propio, ademas del de Arch y AUR
– Kernel LTS
– Pamac para administrar nuestra paquetería
– Escritorios a elección
– Comunidad en constante crecimiento.

Página Web oficial: https://antergos.com/
Descargas: https://antergos.com/try-it/

Conclusión: Hay de todo para todos, Arch se ha vuelto una importante distribución, brindando no solo estabilidad y funcionalidad esencial para los usuarios. Desde su base han nacido distribuciones que poseen peso propio dentro de linux, aportando  sistemas muy estables, funcionales y bellos. Ideales para usuarios noveles y con ganas de experimentar cosas nuevas.

Que distro basada en Arch utilizas?

by Mauro at September 04, 2018 12:22 PM

September 03, 2018

soyadmin.com

Crear USB booteable con el comando DD desde cualquier distribución

Con el comando dd podremos crear un USB booteable (live USB) de la imagen ISO que deseemos usando nuestra terminal. Al ser vía comando y terminal es utilizable en cualquier distribución que deseemos.

No es necesario instalar ningún software ni descargar librerías especiales, nada. Dd viene instalado de forma predeterminada en cualquier distro.

En este post enseñaremos a utilizar dd para grabar nuestra imagen ISO en nuestro USB o Pendrive

 

1) Identificaremos nuestro Pendrive, esto es primordial para no desdoblar la imagen en cualquier unidad.
Verificamos las unidades SIN el Pendrive conectado:

# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4

Conectamos el Pendrive y volvemos a tirar el comando

# ls /dev/sd*
/dev/sda /dev/sda2 /dev/sda4 /dev/sdb1
/dev/sda1 /dev/sda3 /dev/sdb /dev/sdb2

De esa manera identificamos que el Pendrive en nuestro caso es /dev/sdb

2) Una vez identificado nuestra unidad y descargada nuestra ISO tiramos la sentencia del comando dd
IMPORTANTE: Este procedimiento BORRA el contenido del Pendrive.

# sudo dd if=ubicacion_del_iso of=/dev/sdb

A no alarmarse, el comando dd no muestra salida o progreso del proceso, (parece que se queda tildado). Es un proceso que puede demorar 5 a 10 minutos dependiendo del tamaño del iso.

by Mauro at September 03, 2018 11:56 PM