Planeta Sysadmin

de sysadmins para sysadmins

May 21, 2019

soyadmin.com

SOLUCIÓN A: W: Error de GPG: http://ppa….. al intentar actualizar Debian, Ubuntu y derivados

Durante una actualización manual de mi Xubuntu 18.10 me devolvieron algunos errores de GPG los cuales trataremos de solucionar en este post. El problema es que la actualización del sistema no seguirá hasta que reparemos estos inconvenientes.

Vamos a reproducir el error:
– Actualizamos:

sudo apt-get update

El error que devuelve es, por ejemplo:

W: Error de GPG: http://ppa.launchpad.net precise Release: Las firmas siguientes no se pudieron verificar porque su llave pública no está disponible: NO_PUBKEY 1F3045A5DF7587C3

En este caso el error está en la clave 1F3045A5DF7587C3. El error se da porque se intenta autenticar las firmas de los repositorios y las mismas están desactualizadas contra el PPA.

Para solucionarlo tenemos 2 métodos:
1) Con nuestra querida Terminal:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1F3045A5DF7587C3

Lo que hace este comando es consultar a un servidor seguro de Ubuntu y actualizar la clave pública del repositorio con una válida.
Esto lo tendremos que hacer con cada clave que salte cuando intentemos actualizar, reemplazando 1F3045A5DF7587C3 por la siguiente.

2) Método Gráfico con Y-PPA-MANAGER:
Y-PPA-MANAGER es un gestor de repositorios, el cual entre otras funciones, nos permitirá actualizar las claves de repositorios que poseemos.
– Instalamos Y-PPA-MANAGER

sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get update
sudo apt-get install y-ppa-manager

Luego ejecutamos el programa y vamos a Advanced y luego a Try to import all GPG keys.

Tendremos que esperar a que el proceso termine, puede demorar más de 2 o 3 minutos en completarse, quedando todas nuestras claves actualizadas correctamente.

by Mauro at May 21, 2019 01:40 PM

May 20, 2019

soyadmin.com

Instalación de CSF (ConfigServer Security Firewall) en WHM (CentOS, Red hat y Fedora)

CSF es un Firewall o cortafuegos, el cual es la mejor alternativa para el firewall nativo APF, CSF es muy sencillo de instalar/desinstalar y muy facil de configurar.

Este firewall es totalmente compatible con WHM, funciona como escaneo de paquetes, detector de intrusiones, lector de logs y bloqueador de ataques.

Sirve tambien como controlador de puertos y su módulo de LFD es una barrera increíble contra los intentos de ataque mediante intentos de loguin.

Vallamos a la instalación del aplicativo:

# rm -fv csf.tgz
# wget http://www.configserver.com/free/csf.tgz
# tar -xzf csf.tgz
# cd csf
# sh install.sh

Importante, ejecutar este script para desactivar el APF si es que lo teníamos instalado (recomendado si o si ante cualquier duda).

# sh disable_apf_bfd.sh

IMPORTANTE: Con eso sólo estaríamos instalando el Firewall, proximamente detallaremos configuraciones.

Por último, dejo la desinstalación del firewall:

# cd /etc/csf
# sh uninstall.sh

by Mauro at May 20, 2019 11:46 AM

debianhackers.net

instalando mattermost en debian stretch

¡Me encanta el olor a software libre por las mañanas! Y más cuando una aplicación privativa que me gusta se vuelve un dolor de muelas por sus restricciones. Entonces es el momento de buscar alternativas de software libre.

mis requerimientos

  • open source
  • alternativa a slack
  • multiplataforma: linux, windows, android…
  • sin limitaciones en cuanto a mensajes, ficheros, etc…
  • instalable en un servidor que ya esté funcionando con otros servicios

el caso

Slack, la plataforma para facilitar el trabajo en equipo es una herramienta muy útil pero, cuando llevas un tiempo utilizándola en su versión gratuíta empiezan a aparecer los problemas, como no poder recuperar conversaciones porque has excedido el máximo y sólo te muestra las últimas diez mil. Y un día, sin saber cómo, te encuentras abriendo duckduckgo y buscando 'slack open source alternatives'. Y ahí es cuando descubres Mattermost.

las alternativas

Mattermost es una alternativa a slack pero de software libre, su misión es la misma, su interfaz es terriblemente similar y no tiene las limitaciones de aquella pero no es la única alternativa. Durante un tiempo barajé la opción de zulip pero tiene un requerimiento que choca frontalmente con los míos:

Requirements

To run a Zulip server, you will need:

* A dedicated machine or VM

(Zulip Requirements)

Mis servidores son limitados y por eso trato de aglutinar en ellos servicios similares y, en este caso, ni quería ni podía utilizar una máquina para la mensajería.

La única desventaja que le vi a Mattermost es que utiliza nginx como proxy inverso y yo utilizo apache pero se puede cambiar fácilmente, como veremos.

instalación de mattermost

Todo el proceso descrito en esta entrada se ha obtenido de la documentación oficial de Mattermost.

creación de la base de datos

El servidor de bases de datos también está instalado y configurado por lo que únicamente tendremos que crear una base de datos y un usuario nuevos.

sudo mysql -u root -p -e "CREATE DATABASE mattermost; GRANT ALL ON mattermost.* TO 'matter'@'localhost' IDENTIFIED BY 'SuperSecurePassW0rd!';"

Estos datos de conexión se utilizarán más adelante al configurar el Driver de Mattermost.

Mattermos, al fin

Instalaremos Mattermost en /opt y apuntaremos el virtual host de apache2 a ese directorio.

wget -c https://releases.mattermost.com/5.10.0/mattermost-5.10.0-linux-amd64.tar.gz
tar xvfz mattermost-5.10.0-linux-amd64.tar.gz
sudo mv mattermost /opt/mattermost
rm -f mattermost-5.10.0-linux-amd64.tar.gz
sudo mkdir /opt/mattermost/opt
cd /opt/mattermost

sudo useradd --system --user-group mattermost
sudo chown -R mattermost:mattermost /opt/mattermost
sudo chmod -R g+w /opt/mattermost

if [ `grep -c '"DriverName": "mysql"' /opt/mattermost/config/config.json` != '1' ] ; then
echo "el DriverName no es MySQL"
exit 1
fi

sudo sed -i 's|mmuser:[email protected](dockerhost:3306)/mattermost_test|matter:[email protected](127.0.0.1:3306)/mattermost|' /opt/mattermost/config/config.json

sudo -u mattermost /opt/mattermost/bin/mattermost ### si falla, leer más abajo

echo "[Unit]
Description=Mattermost
After=network.target
After=mysql.service
Requires=mysql.service

[Service]
Type=notify
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152

[Install]
WantedBy=multi-user.target" | sudo tee -a /lib/systemd/system/mattermost.service

sudo systemctl daemon-reload
sudo systemctl status mattermost.service
sudo systemctl start mattermost.service
sudo systemctl enable mattermost.service

wget http://localhost:8065 -O - ### tiene que mostrar una web

la columna de una tabla es demasiado grande

Si falla y da este error, {"level":"error","ts":1557928148.6244338,"caller":"sqlstore/supplier.go:811","msg":"Failed to create index Error 1709: Index column size too large. The maximum column size is 767 bytes."}, cambiar configuración en mariadb:

sudo sed -i '/# this is only for embedded server/i \\# added for mattermost\ninnodb_default_row_format=dynamic\ninnodb_file_format=barracuda\ninnodb_file_per_table=true\ninnodb_large_prefix=true\n' /etc/mysql/mariadb.conf.d/50-server.cnf
sudo /etc/init.d/mysql restart

apache2

Crear el subdominio matter.example.com apuntando al servidor donde lo vas a instalar. En mi caso, en dicho servidor ya hay un apache funcionando y no necesito instalar software adicional. En caso de utilizar, como recomienda Mattermost, nginx tendría dos servicios operando sobre el mismo puerto y eso no termina bien nunca.

A partir de esta modificación, apache no sólo funcionará como servidor web sino que también hará de proxy inverso para redirigir el tráfico al puerto que escucha Mattermos, el 8065.

Creamos el VirtualHost para Mattermost, en principio vacío y luego, tras solicitar el certificado a letsencrypt, con la configuración de proxy.

echo "#<ifmodule mod_ssl.c="">
#  <virtualhost _default_:443="">
#    ServerName            matter.example.com
#    ServerAdmin           [email protected]
#    ErrorLog              /matter.example.com_error.log
#    TransferLog           /matter.example.com_access.log
#
#    SSLEngine             on
#    SSLCertificateFile    /etc/letsencrypt/live/matter.example.com/fullchain.pem
#    SSLCertificateKeyFile /etc/letsencrypt/live/matter.example.com/privkey.pem
#    SSLProtocol           TLSv1 TLSv1.1 TLSv1.2 -SSLv2 -SSLv3
#    SSLHonorCipherOrder   On
#    SSLCipherSuite        AES256+EECDH:AES256+EDH
#
#    ProxyPreserveHost     On
#    ProxyRequests         Off
#    ProxyPass             / http://127.0.0.1:8065/
#    ProxyPassReverse      / http://127.0.0.1:8065/
#
#    RewriteEngine         on
#    RewriteCond          %{REQUEST_URI} ^/api/v4/websocket [NC,OR]
#    RewriteCond          %{HTTP:UPGRADE} ^WebSocket$ [NC,OR]
#    RewriteCond          %{HTTP:CONNECTION} ^Upgrade$ [NC]
#    RewriteRule          .* ws://127.0.0.1:8065%{REQUEST_URI} [P,QSA,L]
#    RewriteCond          %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} fg
#    RewriteRule          .* http://127.0.0.1:8065%{REQUEST_URI} [P,QSA,L]
#
#    <location api="" v4="" websocket="">
#      Require all granted
#      ProxyPassReverse http://127.0.0.1:8065
#      ProxyPassReverseCookieDomain 127.0.0.1 matter.example.com
#    </location>
#    <location>
#      Require all granted
#      ProxyPassReverse http://127.0.0.1:8065
#      ProxyPassReverseCookieDomain 127.0.0.1 matter.example.com
#    </location>
#  </virtualhost>
#</ifmodule>
<virtualhost *:80="">
ServerName    matter.example.com
DocumentRoot  /var/www/matter.example.com
#  Redirect      permanent / https://matter.example.com/
</virtualhost>" | sudo tee --append /etc/apache2/sites-available/matter.example.com.conf

sudo /etc/init.d/apache2 restart
sudo certbot certonly --apache --agree-tos -m [email protected] -d matter.example.com.conf
sudo sed -i 's/^#//' /etc/apache2/sites-available/matter.example.com.conf
sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http
sudo a2enmod proxy_wstunnel
sudo a2ensite matter.example.com.conf
sudo /etc/init.d/apache2 restart

Tras ejecutar estos comandos tendremos un nuevo virtual host redirigiendo el tráfico al puerto de Mattermost, adornado con un bonito certificado de Let’s Encrypt.

Configuración de mattermost

Ahora sólo nos queda abrir el navegador en https://matter.example.com y configurar el usuario administrador. También es necesario configurar el servidor de correo según el apartado Configuring Mattermost Server.

by Diego Martínez Castañeda at May 20, 2019 10:12 AM

May 17, 2019

soyadmin.com

Libro: Utilidades y herramientas de Software Libre de Jesús Carrius

Título: UTILIDADES Y HERRAMIENTAS DE SOFTWARE LIBRE
Autor:
Jesús Carrius
Páginas: 392 Páginas
Tamaño: 17 MB
Fomato: PDF

Contenido:

Por software libre se entiende aquel que no sólo permite al usuario final ejecutar los programas, sino que también le confiere la libertad de acceder al código fuente y adaptarlo a sus necesidades, distribuir copias del software a terceras personas y publicar nuevas versiones.

Mucha gente, cuándo se habla de software libre, le viene a la cabeza las aplicaciones en modo texto que funcionan en los servidores, pero este movimiento también tiene a su disposición un gran número de utilidades para el usuario normal de escritorio.

En el curso de Herramientas y utilidades veremos algunos de los programas pensados para el entorno de trabajo de un usuario final. Estos programas nos permiten navegar de manera segura por la red (Mozilla), gestionar nuestro correo electrónico y trabajar en grupo (Ximan Evolution) y crear documentos de texto, hojas de cálculo o presentaciones al estilo del Microsoft Office (OpenOffice.org).

A lo largo del curso veremos cómo también podemos trabajar con estas herramientas libres en entornos propietarios como el Microsoft Windows aparte, claro está, del entorno GNU/Linux.

Los contenidos del curso se estructuran en dos grandes bloques. El primero está dedicado a las herramientas de Internet, representado por las unidades 1 y 2. El resto del temario está dedicado al programa OpenOffice.org, que, dada su complejidad, requiere muchas más unidades.

by Mauro at May 17, 2019 03:34 PM

May 16, 2019

RooTeando

Entrevista En Diferido 9: Rodolfo Pilas.

Hoy comenzamos una entrevista a Rodolfo Pilas, administrador de sistemas y creador del podcast deployandome.

Antes de todo, gracias por participar y apoyar este proyecto. La primera pregunta es una presentación por parte del entrevistado, para que los lectores te puedan conocer un poco.

Entrevista En Diferido: ¿Te podrías presentar en unas líneas?

 

Rodolfo Pilas:  Difícil en unas líneas cuándo empecé mi vida laboral en los inicios de la computación personal, monté y ...

May 16, 2019 01:40 PM

May 15, 2019

soyadmin.com

Sacándole jugo al TOP

Top nos permite una mirada rápida y detallada de nuestro sistema, el mismo muestra en tiempo real un listado de los procesos que se estan ejecutando.

En su resumen nos muestra muchisima información al respecto de cada proceso, indicando el uso de CPU, RAM, tiempo de ejecución, etc.

Top es un comando especial y realmente indispensable, la herramienta de inicio para cualquier administrador de sistemas.

Lo ejecutamos simplemente con un:

# top

A) Cabecera:

1. Tiempo de actividad y carga media del sistema

top - 14:26:24 up 172 days,  2:05,  1 user,  load average: 1.17, 1.49, 1.60

En la primera línea nos muestra:
Hora actual.
Tiempo que ha estado el sistema encendido.
Número de usuarios (mario y root).
Carga media en intervalos de 5, 10 y 15 minutos respectivamente.

2. Tareas

La segunda línea muestra el total de tareas y procesos, los cuales pueden estar en diferentes estados:

Tasks: 368 total,   2 running, 363 sleeping,   0 stopped,   3 zombie

Running (ejecutar): procesos ejecutándose actualmente o preparados para ejecutarse.
Sleeping (hibernar): procesos dormidos esperando que ocurra algo (depende del proceso) para ejecutarse.
Stopped (detener): ejecución de proceso detenida.
Zombie: el proceso no está siendo ejecutado. Estos procesos se quedan en este estado cuando el proceso que los ha iniciado muere (padre).

3. Estados de la CPU

Esta línea nos muestra los porcentajes de uso del procesador diferenciado por el uso que se le de.

Cpu(s):  4.8%us,  2.2%sy,  0.0%ni, 86.1%id,  5.7%wa,  0.0%hi,  1.2%si,  0.0%st

us (usuario): tiempo de CPU de usuario.
sy (sistema): tiempo de CPU del kernel.
id (inactivo): tiempo de CPU en procesos inactivos.
wa (en espera): tiempo de CPU en procesos en espera.
hi (interrupciones de hardware): interrupciones de hardware.
si (interrupciones de software): tiempo de CPU en interrupciones de software.

4. Memoria física

Mem:   8147600k total,  7872232k used,   275368k free,   456392k buffers

Memoria total.
Memoria utilizada.
Memoria libre.
Memoria utilizada por buffer.

5. Memoria virtual

Swap: 10217300k total,  2418292k used,  7799008k free,  3901420k cached

Memoria total.
Memoria usada.
Memoria libre.
Memoria en caché.

B) Luego en el cuerpo nos detalla los procesos, mostrándonos esta información:

PID
Es ID, es el identificador o número de proceso.

USER
Es el nombre de usuario propietario del proceso.

PR
Indica la prioridad de ejecución de un proceso, algunos procesos muestran el valor “rt” lo que significa que ese proceso se ejecuta en tiempo real.

NI
Este es el valor nice de un proceso. Un valor menor significa una prioridad mas alta.

VIRT
Es la memoria virtual usada por un proceso.

RES
El tamaño de memoria residente. Esta es la memoria física que no puede ser intercambiada (non-swappable)

SHR
Esta es la memoria compartida usada por un proceso.

S
Muestra el estado del proceso y puede tener alguno de los siguientes valores:
D – espera no interrumpible
R – En ejecución
S – en espera
T – En seguimiento o Detenido
Z – Proceso en estado zombie

%CPU
porcentaje de uso de tiempo de CPU.

%MEM
porcentaje de memoria física usada por un proceso.

TIME+
Tiempo de CPU total que un proceso ha usado desde que inicio.

COMMAND
Es el comando con el cual fue iniciado el proceso.

C) Comandos anexos al top:

Presionando la tecla dentro del top verás lo que hace:

“h” – Help
Teclas “h” o “?” meustra la ayuda de los comandos interactivos.

“Enter” o “Espacio” – Actualizar
Actualizar los datos manualmente presionando la tecla “Enter” o la tecla “Espacio”.

“d” o “s” – Intervalo de actualización automático
Muestra un mensaje para que ingreses el número de segundos en lo que quieres que top actualice la información de forma automática.

“R” – Invertir
Al presionar “R” cambias el sentido ordenamiento actual, de menor a mayor o de mayor a menor.

“Z” – cambiar color
Al presiona “Z” puedes cambiar a la paleta de color

“z” – cambia entre color o blanco/negro
Puedes mostrar el comando top en color o blanco y negro.

“u” – Procesos de un usuario
Indica el nombre de un usuario para ver exclusivamente los procesos de ese usuario

“k” – matar un proceso
cuando presionas “k” puedes indicar un numero de PID al que deseas matar.

“1” – ampiar/reducir detalles de CPU
Si tu equipo tiene mas de 1 core o CPUs, puedes ver los detalles por cada CPU de forma general, este último es el modo por default.

D) Top cuenta además con la posibilidad de pasarle comandos anexos a la ejecución, con una serie de switches además de las opciones anteriores:

top -u usuario -> Muestra los procesos que estan corriendo con ese usuario y sus valores
top -p PID -> muestra el proceso seleccionado y sus valores
top -n numero -> Numero es la cantidad de iteraciones que va a tener el comando y luego se cerrara
top -d numero -> “Numero” es el tiempop en segundos que va a esperar el comando para refrescar la lista.
top -b -> Batch mode, ideal para mandar resultados desde top a otros programas

by Mauro at May 15, 2019 09:29 PM

5 maneras de chequear el Uso de Memoria (RAM) en Linux

Hoy les dejo una serie de comandos muy útiles a la hora de chequear la memoria RAM de nuestros equipos. Si existe algo esencial para cualquier sysadmin es tener control y monitoreo sobre la RAM, parte fundamental de nuestro servicio o para verificar en que gastamos la RAM de nuestro equipo.

Detallaremos comandos básicos para tener en cuenta, para saber cuanta memoria libre tenemos y en que la usamos.

Comando FREE

Free es un comando básico y sencillo, nos devuelve la info de nuestra memoria.

# free
total       used       free     shared    buffers     cached
Mem:       8147604    8081720      65884          0     266752    3173976
-/+ buffers/cache:    4640992    3506612
Swap:      4192956        164    4192792

Aqui veremos el total de memoria que poseemos, usada libre compartida el buffer y la cache de memoria.
Podemos hacer un man free para ver de que manera sacarle mas provecho a este comando.

MEMINFO

Tal como indica el nombre del comando MEMINFO muestra un resumen de nuestra memoria RAM, asi como los usos de la misma.

# cat /proc/meminfo
MemTotal:      8147604 kB
MemFree:        273928 kB
Buffers:        143940 kB
Cached:        3132532 kB
SwapCached:          0 kB
Active:        3642512 kB
Inactive:      2573116 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:      8147604 kB
LowFree:        273928 kB
SwapTotal:     4192956 kB
SwapFree:      4192792 kB
Dirty:          932368 kB
Writeback:           0 kB
AnonPages:     2939284 kB
Mapped:          75932 kB
Slab:          1509532 kB
PageTables:      49284 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:   8266756 kB
Committed_AS:  8158408 kB
VmallocTotal: 34359738364 kB
VmallocUsed:    316496 kB
VmallocChunk: 34359396276 kB
HugePages_Total:     0
HugePages_Free:      0
HugePages_Rsvd:      0
Hugepagesize:     2048 kB

VMSTAT

Con vmstat nos muestra una estadística de uso de nuestra memoria virtual

# vmstat -s
8147604  total memory
7934956  used memory
3714824  active memory
2570984  inactive memory
212648  free memory
142352  buffer memory
3140668  swap cache
4192956  total swap
164  used swap
4192792  free swap
57010231 non-nice user cpu ticks
3929882 nice user cpu ticks
16070480 system cpu ticks
484095278 idle cpu ticks
113936296 IO-wait cpu ticks
79724 IRQ cpu ticks
6548610 softirq cpu ticks
0 stolen cpu ticks
1179384504 pages paged in
882418049 pages paged out
0 pages swapped in
41 pages swapped out
1217828241 interrupts
3220405806 CPU context switches
1432912634 boot time
10835647 forks

Un comando muy parecido a Free con un buen detalle de nuestra RAM, podemos ver y saber más de vmstat con man vmstat

Concatenando comandos:

Este comando nos ordena los procesos por consumo de memoria, dejando al último aquel proceso que más uso le da a nuestra RAM

# ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS
50956 /usr/local/cpanel/3rdparty/bin/perl /usr/sbin/cxs --report /var/log/cxs.scan --logfile /var/log/cxs.log --mail [email protected] --smtp --exp --vir --opt
58744 pkgacct - toma614 - av: 3
60876 pkgacct - toma614 - av: 3
101928 /usr/local/apache/bin/httpd -k start -DSSL
101988 /usr/local/apache/bin/httpd -k start -DSSL
101992 /usr/local/apache/bin/httpd -k start -DSSL
101996 /usr/local/apache/bin/httpd -k start -DSSL
102048 /usr/local/apache/bin/httpd -k start -DSSL
102104 /usr/local/apache/bin/httpd -k start -DSSL
102136 /usr/local/apache/bin/httpd -k start -DSSL
102172 /usr/local/apache/bin/httpd -k start -DSSL
102184 /usr/local/apache/bin/httpd -k start -DSSL
102216 /usr/local/apache/bin/httpd -k start -DSSL
103224 /usr/local/apache/bin/httpd -k start -DSSL
295540 /usr/local/cpanel/3rdparty/bin/clamd
374144 cxswatch
1537420 /usr/sbin/mysqld --basedir=/usr --datadir=/backup/mysqldata --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --open-files-limit

Excelente comando para lograr identificar el posible causante de problemas.

TOP

Nuestro querido y más usado TOP nos muestra no solo una estadística el uso de memoria, sino también el consumo por procesos.

Puedes ver este Post donde hablamos y mucho del TOP

by Mauro at May 15, 2019 01:23 PM

May 13, 2019

soyadmin.com

Libro: CORRE LINUX CORRE de Fernando Monroy

Título: CORRE LINUX CORRE
Autor: Fernando Monroy
Año: 2013
Páginas: 122 páginas
Tamaño: 16.47 MB
Fomato: PDF

 

 

 

 

 

Contenido:
Este es un libro NO oficial basado en la distribución de Ubuntu (Gnu Linux), esta desarrollado y pensado para todos aquellos que quieran iniciarse en el mundo de Gnu Linux.

Los procesos se explican de manera sencilla, de forma gráfica y didácticamente. Cuando uses este libro sentirás un «acompañamiento» como si alguien estuviera guiándote de forma presencial, pues así esta pensado.

Se reconoce y respeta que tanto la marca Linux como Ubuntu se encuentran registradas y se hace énfasis que este es un Libro No Oficial.

En Gnu Linux existen diferentes maneras de hacer los procesos de instalación y configuración, pero en esta guía se presenta el método más cómodo para el usuario novato.

by Mauro at May 13, 2019 09:14 PM

Instalar Fuentes Windows en Ubuntu y derivados y solución al error ttf-mscorefonts-installer.

Tratando de instalar las fuentes de Microsoft en Ubuntu o algún derivado me devolvía este error, por lo cual investigando un poco me di cuenta que no era algo normal pero si muy recurrente.

1) Con el comando:

# sudo apt-get install ttf-mscorefonts-installer

2) Me devolvía este error:

dpkg: error processing ttf-mscorefonts-installer (--configure):
package ttf-mscorefonts-installer is not ready for configuration
cannot configure (current status `half-installed')
Errors were encountered while processing:
ttf-mscorefonts-installer
D: Sub-process /usr/bin/dpkg returned an error code (1)

3) La solución es realizar una limpieza de los paquetes y luego reintentar la instalación completa del archivo de fuentes:

# sudo apt-get clean
# sudo apt-get install --reinstall ttf-mscorefonts-installer

4) Esto nos abrirá un cuadro de diálogo que nos muestra la licencia EULA de las fuentes, le ponemos OK (debemos usar la tecla TAB para desplazarnos hasta el OK)

5) Luego nos pide que aceptemos dicha licencia, le damos que SI (debemos usar la tecla TAB para desplazarnos hasta el Yes)

6) Al final hace la instalación de las fuentes y nos mostrará

All done, no errors.
All fonts downloaded and installed.
Processing triggers for fontconfig (2.11.0-0ubuntu4) ...
Setting up ttf-mscorefonts-installer (3.4+nmu1ubuntu1) ...

by Mauro at May 13, 2019 01:03 PM

May 10, 2019

soyadmin.com

Jugando con la paquetería en ARCH (Manjaro – Antergos – Chakra)

En este post hablaremos un poco de los comienzos en Manjaro, si luego de una instalación de cero. Como entender la paquetería de Manjaro (Arch) y conocer los comandos básicos para Instalar, Actualizar, Modificar y Eliminar paquetes.

Como ya todos sabrán Manjaro está basada en Arch y como tal utiliza PACMAN como gestor de paquetes y binarios de los repositorios originales de Arch Linux. AUR es el repositorio comunitario y YAY vendría a ser un complemento de PACMAN para poder compilar y dar forma a AUR. Esto sería a grandes rasgos, ahora detallemos un poco la funcion de PACMAN, AUR y YAY:

PACMAN
En Linux el soft está en binarios, cada rama de distribuciones tienen sus propios intérpretes de dichos binarios, (por ejemplo apt-get en Debian y derivados o yum en Fedora y RedHat, etc) PACMAN vendría a ser el gestor de paquetes de binarios de Manjaro (Arch) el cual nos permitirá instalar, actualizar eliminar estos paquetes. En los repositorios Arch los paquetes vienen compilados y se dividen de la siguiente manera:

Core: Paquetes esenciales del sistema, como el kernel Linux o las herramientas de GNU.
Extra: Paquetes no esenciales, pero que son importantes como entornos de escritorio y programas.
Testing: Paquetes en estado de pruebas, que luego van a Core o a Extra.
Community: Paquetes de AUR más votados por la comunidad de usuarios y adoptados por un Trusted User(usuario que el equipo de Arch considera de confianza).
Community Testing: Contiene paquetes de AUR en estado de prueba para ser luego transferidos a Community.
Multilib: repositorio centralizado para usuarios x86_64, para dar soporte más fácilmente a aplicaciones 32-bit en ambientes 64-bit.
Multilib-testing: con paquetes de prueba para multilib.

AUR (Arch Users Repository)
Es el Reporsitorio de la Comunidad, en el cual se incluyen miles y miles de paquetes de código fuente. AUR centraliza el software subido por la comunidad junto con su respectivo PKGBUILD. Esto le permite a cualquier usuario descargar el paquete, compilarlo fácilmente usando makepkg e instalarlo usando Pacman. Aunque suene medio complejo no es así.

YAY 
Llega para facilitarnos las cosas, es un complemento de Pacman que nos compila e instala paquetes AUR. Además de esto podemos usarlo para actualizar estos paquetes a sus últimas versiones, es decir hace una indexación de AUR y chequea si hay actualizaciones. Al estar funcionando bajo Pacman también actualiza los paquetes oficiales de Arch.

Como se usan Pacman y Yay?

pacman -S “paquete” (Instala un paquete)
pacman -Sy “paquete” (Sincroniza repositorios e instala el paquete)
pacman -Sy (Sincroniza repositorios)
pacman -Syy (Fuerza la sincronización de repositorios incluso para paquetes que parecen actualizados)
pacman -Syu (Sincroniza repositorios y actualiza paquetes)
pacman -Syyu (Fuerza sincronización y actualiza paquetes)
pacman -Su (Actualiza paquetes sin sincronizar repositorios)
pacman -Ss “paquete” (Busca un paquete)
pacman -Si “paquete” (Muestra información detallada de un paquete)
pacman -Sg “grupo” (Lista los paquetes que pertenecen a un grupo)
pacman -Qs “paquete” (Busca un paquete instalado)
pacman -Qi “paquete” (Muestra información detallada de un paquete instalado)
pacman -Qdt (Muestra paquetes huérfanos)
pacman -R “paquete” (Borra paquete sin sus dependencias)
pacman -Rs “paquete” (Borra paquete y sus dependencias no utilizadas)

yay -S "paquete" (Busca e instala el paquete, si es de los repositorios oficiales lo instala. Si es de AUR, lo compila y lo instala)
yay -Syua (Sincroniza, actualiza y comprueba actualizaciones de paquetes AUR instalados)

Espero les sirva este principio de tutorial, el cual sirve para cualquier distro ARCH. Saludos!

by Mauro at May 10, 2019 08:58 PM

Como saber que comandos usamos más en nuestra consola?

Este comando nos tirará un resumen de los 10 top comandos usados más veces en nuestra consola, ya sea PC o servidor…

En centOS RHEL o Fedora:

history | awk '{print $4}' | sort | uniq -c | sort -rn | head

En Ubuntu y derivados:

history | awk '{print $2}' | sort | uniq -c | sort -rn | head

Si bien el comando es igual en cada distro, cambia la distribución de las columnas. Un comando que no sirve más que para hacer un resumen o estadísticas de lo que hacemos normalmente en nuestro server.

by Mauro at May 10, 2019 01:17 PM

May 09, 2019

soyadmin.com

Terminal: NeoFetch & Screenfetch 2 herramientas para consultar la Información del Sistema en Linux

Hoy les traemos 2 programas perfectamente funcionales y de hecho muy parecidos entre sí, con los cuales podremos ver la Información Básica de Nuestro Sistema, esto realizado automáticamente desde nuestra terminal.

NeoFetch y ScreenFetch escanean nuestro sistema y recopilan información rápida y básica sobre lo que poseemos tanto de Software como de Hardware. Esto incluye:

Hoy les traemos 2 programas perfectamente funcionales y de hecho muy parecidos entre sí, con los cuales podremos ver la Información Básica de Nuestro Sistema, esto realizado automáticamente desde nuestra terminal.

NeoFetch y ScreenFetch escanean nuestro sistema y recopilan información rápida y básica sobre lo que poseemos tanto de Software como de Hardware. Esto incluye:
El logo de nuestra distribución.
Nuestro nombre de usuario y el nombre del equipo.
La versión del Kernel que estamos usando.
El tiempo que lleva abierto nuestro ordenador.
El número de paquetes que tenemos instalado en nuestro sistema operativo.
La versión de Bash que estamos usando.
La resolución de nuestra pantalla.
El entorno de escritorio que estamos utilizando.
El tema que estamos usando en nuestro sistema operativo.
El tema de iconos que estamos usando.
El tipo de fuente que tenemos configurada.
El procesador que tiene nuestro ordenador.
La tarjeta gráfica que tiene nuestro ordenador.
La memoria RAM usada y disponible de nuestro ordenador.

 

1) NEOFETCH
Está escrito en Bash, muestra el logotipo de nuestra distribución base en ASCII. Muestra y detalla información que si bien parece básica puede resultarnos muy útil y sin necesidad de diversos comandos o de aplicaciones complejas.

NeoFetch al estar diseñado en Bash puede ser utilizado en cualquier sistema que permita ejecutar Bash, lo que significa que se puede usar en Linux, MacOS, iOS, BSD, Solaris, Android y Windows 10. Un súper multiplataformas.

Como lo Instalamos:
DEBIAN, UBUNTU Y DERIVADAS:

sudo add-apt-repository ppa:dawidd0811/neofetch
sudo apt update && sudo apt install neofetch

ARCH LINUX Y DERIVADAS:

yay -S neofetch

FEDORA:

su -c
dnf install dnf-plugins-core
dnf copr enable konimex/neofetch
dnf install neofetch

Para ejecutarlo una vez instalado, simplemente:

neofetch

Para ver la ayuda y complementos:

neofetch --help

 

2) SCREENFETCH
ScreenFetch está diseñado en Bash y al igual que NeoFetch nos ayuda a ver y tener una idea básica de la Información de nuestro Sistema. Presentada elegantemente con el logo de la distro que estamos ejecutando en nuestra PC.

Como lo Instalamos:
DEBIAN, UBUNTU Y DERIVADAS:

sudo apt-get install screenfetch

ARCH LINUX Y DERIVADAS:

sudo pacman -S screenfetch

FEDORA:

sudo dnf install screenfetch

Para ejecutarlo una vez instalado, simplemente:

screenfetch

Para ver la ayuda y complementos:

man screenfetch

 

Estas son 2 alternativas muy válidas para tener un pantallazo general del sistema que poseemos, tanto en Hardware como en Software. Fáciles de usar, se pueden configurar y editar la información a mostrar, todo esto directamente desde la terminal 🙂

by Mauro at May 09, 2019 09:42 PM

Desfragmentando nuestro sistema Linux

Primero… ¿es necesario realizar una desfragmentación de nuestro sistema linux? existe una creencia de que no es necesario realizar una desframentación de nuestro disco o partición debido a que Linux no es Windows…

Esto es en parte así pero, si bien los sisitemas ZFS, EXT, JFS, XFS, ReiserFS, Btrfs tienen maneras inteligentes de asignar ficheros, lo cual hace que se realice una fragmentación de los mismos. Aunque luego de años de uso de un sistema puede suceder que nuestras particiones sobre todo queden con pequeñas fragmentaciones.

e4defrag es una herramienta que nos permitirá desfragmentar nuestro disco duro desde nuestra consola, es aplicable solo a sistemas EXT4, la misma nos solucionaría cualquier pequeño problema de fragmentación, sobre todo si posees un disco duro pequeño.

Esta herramienta viene por defecto en la mayoría de nuestras distros:
Como se usa, recuerda que es necesario el uso de permisos de root y que el sistema de archivos debe ser EXT4.

1) Vemos si es necesario defragmentar:

# e4defrag -c /ruta

Aqui deberemos prestar atención al valor de «Fragmentation score» el cual nos indicará cuan fragmentado esta nuestro sistema. La recomendación es que sólo se desfragmente si el valor es mayor a 50.

2) Procederemos a la desfragmentación:

# e4defrag /ruta

Ejemplos:

# e4defrag /dev/sda*
# e4defrag /home

Esperamos a que el proceso termine y con eso tendremos nuestro sistema desfragmentado, podemos tirar nuevamente el 1º comando para ver que el Fragmentation score ha bajado.

by Mauro at May 09, 2019 01:27 PM

May 08, 2019

soyadmin.com

Timeshift un sistema de Backups and Restore para Linux.

Todos sabemos o comprendemos que la rotura de un disco o una mala jugada de un comando pasado bajo sudo puede hacer que nuestros archivos queden fritos.

Ante esto todos creo que somos conscientes que hoy en día sea el SO que sea lo mejor es siempre tener a mano un respaldo, backup, copia de seguridad o como quieran llamarlo.

Existen muchísimas herramientas o aplicaciones, incluso varias distribuciones traen su propia app encargada de hacer esta tarea de backups.

Hoy les presento a Timeshift, un excelente software que nos puede salvar la vida ante alguna catástrofe…
Timeshift sirve para restauración de nuestro sistema completo, es decir no solo backupea archivos personales, sino que realiza una copia completa o espejo de nuestra PC, toda nuestra distribución de principio a fin.
En caso de comprar un nuevo disco o pc y deseamos replicar todo lo que teníamos. En caso de una configuración, instalación extrema que pueda salir mal, sirve como regresión a un estado anterior en el cual todo funcionaba correctamente.

Timeshift no solo copia nuestros archivos personales o nuestras aplicaciones, captura el SO completo con configuraciones, aplicaciones, personalizaciones en una sola imagen.

 

Como lo instalamos?
Ubuntu y derivadas:

sudo apt-add-repository -y ppa:teejee2008/ppa
sudo apt-get update
sudo apt-get install timeshift

Arch y derivadas:

yaourt timeshift

 

Como Funciona?
Hacer un respaldo:
Lo primero será iniciar nuestro programa desde el menú, nos pide permisos de root e inicia un Setup Wizard donde nos guiará paso a paso como hacer nuestro primer backup. Le damos a finalizar así vemos directamente las opciones de este excelente programa.

Si le damos a “Create” empezará directamente la copia de seguridad con los valores de configuración defaults, por lo que lo mejor es arrancar por las opciones, vamos a “Settings” y veremos:

Type: Nos permite elegir el modo de respaldo, yo lo deje en RSYNC que hace un respaldo completo del sistema por primera vez y luego incrementales segun la peridicidad que elijamos. Luego esta tambien disponible la opción de BTRFS

Location: Tenemos un listado de nuestros discos y particiones disponibles donde resguardar nuestra información.

Schedule: Nos permitirá elegir la periodicidad con la que se realizan los respaldos, y la cantidad de copias que podemos guardar de cada uno. Por ejemplo hacemos respaldo semanalaes y guardamos 2 semanas.

Filters: Nos permite agregar carpetas o archivos que no queremos que respalde. Por ejemplo en mi caso saco las carpetas de Dropbox y Mega ya que sincronizo nuevamente si en algún momento tengo problemas.

Dependiendo de lo que deseemos, podemos darle a “Create” y empezará nuestro respaldo o bien cerramos la aplicación y esperamos a que se autoejecute con la periodicidad que elegimos en Schedule.

 

¿Ahora, que pasa si necesitamos restaurar?
En caso de que llegue ese momento donde nuestro sistema se derritió, necesitaremos acceder a nuestra PC mediante un Live USB de la distro que deseemos. Aunque si nuestra pc está operativa, timeshift permite que restauremos un respaldo desde nuestro mismo del linux operativo.

 

Los pasos son fáciles:
Instalamos Timeshift y este buscará en los discos o extraibles las copias de seguridad que poseamos para proceder a restaurarlas.

Una vez que seleccionamos la copia deseada, vamos a “Restore” y alli nos pedirá que elijamos donde restaurar y también nos permitirá elegir que aplicaciones excluir en caso de que lo querramos.

 

Desinstalar:
Si vemos que timeshift no nos convence y queremos eliminarlo de nuestro sistema, lo primero es ingresar y eliminar cada respaldo desde la misma aplicación.
Luego de eso desinstalamos con:

sudo timeshift-uninstall

by Mauro at May 08, 2019 07:45 PM

Como mantener nuestro sitio o server alejado de robots, bots, spiders, crawlers y visitas no deseadas

Las visitas y el tráfico que puede tener nuestro Sitio y nuestro Servidor, muchas veces son visitas de clientes o visitantes válidos digamos aunque muchísimas veces esa visita es una visita inesperada 🙂 muchas veces son robots bots o crawlers.

Ahora, que son los Robots, Bots o Crawlers?
Son aplicaciones automáticas que hacen un escaneo constante de «internet» buscando recopilar información, enlaces web y contenido. Buscadores como Google, Bing, Yahoo lo hacen, utilizan estos escaneos para generar estadísticas e información de nuestro sitio y así poder «mostrar» información valida cuando uno hace búsquedas en estas web.
Hasta ahi todo lindo ¿que mejor que nuestra web sea indexada correctamente por los buscadores más importantes? el problema se genera debido a que cada día aparecen más y más bots y crawlers los cuales abusan o son intrusivos hacia nuestro servidor o sitio web.

Existen robots que buscan por ejemplo, robarse el contenido que tengas en tu portal, «cosechar» cuantas direcciones de correo electrónico, realizar spam en formularios de contacto o comentarios o directamente explorar vulnerabilidades conocidas del software que tengas instalado, son de estos robots que debemos protegernos.

Que puede pasar con un sitio o server que es bombardeado por robots, bots, spiders, crawlers?
La visita de un robot es eso, una visita que recibe nuestro servidor o web, si multiplicamos eso a cientos y miles de visitas por minuto de cientos de crawlers que entran a rotar en nuestro sitio o servidor, indudablemente cabe la posibliidad de que lleguen a «tumbar» un servicio, denegar una solicitud válida o llegar a límites de transferencia mensuales (esto como cuestiones simples) o directamente al robo de información, vulneración de nuestro sitio (que ya son cuestiones bastante graves). En estos casos hay que ponerse el escudo y empezar a tunear un poco nuestro sitio para evitar o tratar de repeler estas alimañas.

Como hacemos para controlar estos agentes?
Existen 2 archivos que podemos tunear o tocar:
robots.txt (aqui podemos indicar que robots NO pueden acceder a nuestro sitio)
.htaccess (aqui bloquearemos el robot que querramos por medio del user-agent)

1) Como configuro correctamente mi robots.txt?

Aqui colocaremos que partes del sitio NO queremos que sean visitadas por los robots o directamente negar el acceso a un robot específico.

* Colocaremos que partes del sitio no quieres que toque ningún robot:

User-agent: *
Disallow: /images
Disallow: /documentos
Disallow: /portal/formulario.php

* Si queremos que ningún robot toque nada de nuestro sitio.

User-agent: *
Disallow: /

* Denegar el acceso a un robot específico a nuestro sitio

User-agent: robotxx
 Disallow: /

* Armar una lista blanca de robots buenos y negar el acceso a robots malos 🙂

User-agent: Googlebot
User-agent: Bingboot
User-agent: msnbot
User-agent: Mediapartners-Google*
User-agent: Googlebot-Image
User-agent: Yahoo-MMCrawler
Disallow:

User-agent: *
Disallow: /

2) Como configuro correctamente el .htaccess para bloquear robots?

Muchas veces los robots malos no llevan el apunte a nuestro robots.txt, ahi entra en juego el .htaccess que es un poco más efectivo para el control de robots bots spiders crawlers.

* Denegar el acceso por user-agents y que su petición no sea atendida

Options All -Indexes
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^ROBOTXX.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^ROBOTXXX.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^ROBOTXXXX.* [OR]
RewriteRule ^.* - [F]

* Bloquear las IP’s conocidas de estos bichos

order allow,deny
deny from 127.0.0.1 # banea esa ip
deny from 127.0.0.1/17 # banea de la 1 a la 17
allow from all # y permitimos el acceso al resto

* Se puede usar tambien la variable SetEnvIfNoCase

Options All -Indexes
RewriteEngine on

SetEnvIfNoCase User-Agent "ROBOTXX" bad_bot
SetEnvIfNoCase User-Agent "ROBOTXXX" bad_bot
SetEnvIfNoCase User-Agent "ROBOTXXXX" bad_bot

<Limit GET POST HEAD>
Order Allow,Deny
Allow from all
Deny from env=bad_bot
</Limit>

Existen páginas que hacen el trabajo por nosotros y ya tienen .htaccess armados para bloquear todos los robots spiders bots crawlers indeseables y que podemos tomar como ejemplo.
WPSecure.net
Bad-Bot-Bloquer

by Mauro at May 08, 2019 03:35 PM

May 06, 2019

debianhackers.net

[Truco] cambiar la contraseña de una partición cifrada en debian stretch

Se nos llena la boca (a mí el primero) diciendo que tenemos que cifrar los dispositivos de almacenamiento, sobre todo los portátiles y los discos duros externos, para luego tener una única contraseña durante toda la vida útil del dispositivo.

En mi trabajo no tengo instalado linux en la estación de trabajo por directrices de la empresa pero, en cambio, sí que tengo una máquina virtual con VirtualBox que utilizo como sistema operativo principal, tanto que tengo un montón de alarmas de vbox para que no le de tantos recursos :-D. La cuestión es que el volumen de esa máquina virtual está cifrado desde el momento en que instalé debian y, pasado cierto tiempo, toca cambiar la frase de paso.

Cambiar la contraseña de LUKS puede hacerse mediante gnome-disks (en el paquete gnome-disk-utility) o, más fácil, desde la consola.

Lo primero es saber sobre qué partición quieres actuar, porque se puede dar el caso de que tengas varias particiones cifradas, incluso con diferentes contraseñas (ese es un nivel de paranoia al que aún no he llegado).

[email protected]:~$ cat /etc/crypttab
sda5_crypt UUID=7366a5c5-xxxx-yyyy-zzzz-XXXXXXXXXXXX none luks

Ese fichero es la base de datos de volúmenes cifrados y, en este caso, sólo hay una partición que manejar, sda5.

A continuación, ejecutamos el comando que cambia la frase de paso sobre la partición correcta:

[email protected]:~$ sudo cryptsetup luksChangeKey /dev/sda5
Introduzca la frase contraseña que hay que cambiar:
Introduzca una nueva frase contraseña:
Verifique la frase contraseña:

Cuando dentro de unos meses vuelva a cambiar la contraseña, ya no tendré que buscar más que aquí :-D.

by Diego Martínez Castañeda at May 06, 2019 11:33 AM

May 02, 2019

Sobre bits

Active Directory: Gestionar permisos de OU con PowerShell

Si gestionáis un entorno de Active Directory “multitenant” o un directorio muy grande, es posible que más pronto que tarde os toque editar los permisos de las Unidades Organizativas para aseguraros de que no todo el mundo puede verlo todo. En la entrada de hoy veremos cómo gestionar permisos de OU con PowerShell, un proceso algo más complicado de lo que nos podríamos imaginar al ponernos a ello.

Para ver las distintas funciones que podemos realizar de una forma práctica en esta entrada crearemos un script que:

  • Crea una OU con PowerShell.
  • Rompe la herencia de la OU.
  • Elimina los permisos autogenerados en dicha OU.
  • Añade permisos personalizados.
Active Directory: Gestionar permisos de OU con PowerShell

Antes de empezar

Para entender mejor el contenido de esta entrada es conveniente que tengas una base sobre cómo funcionan los permisos en Windows y, específicamente, sobre los permisos en Active Directory. Durante la entrada me referiré a dos terminos de forma constante:

  • ACL: La Access Control List, es decir, la lista de permisos completa que está asociada al objeto (en esta entrada a una OU).
  • ACE: La Access Control Entry, es decir, un permiso conceto dentro de la ACL.

¡Con esto dicho ya podemos empezar!

Crear Unidad Organizativa con PowerShell

Para poder hacer nuestras pruebas de modificación de permisos de OU con PowerShell lo primero que necesitaremos será una OU de prueba que, como no, crearemos con PowerShell.

Como siempre os recomiendo que hagáis siempre vuestros desarrollos sobre un entorno de prueba ya que es muy fácil que acabemos liando una gorda, y nadie quiere recrear permisos a mano sobre un árbol de Active Directory.

# Definimos el path donde crear nuestra OU de prueba
$OuPath = 'DC=sobrebits,DC=local'

# Creamos la OU "OUTest" en la ubicación definida
New-ADOrganizationalUnit -Name 'OUTest' -Path $OuPath

En primer lugar hemos definido el path de la OU que vamos a crear con PowerShell. Después utilizamos New-ADOrganizationalUnit para crear una OU con el nombre OUTest.

Crear OU con PowerShell

Romper la herencia de OU con PowerShell

Ahora que tenemos nuestra Unidad Organizativa creada es momento de trastear con sus permisos. Justo después de crear la OU podemos ver como existen multitud de permisos heredados del nivel superior:

Permisos de OU heredados

Lo primero que haremos para asegurarnos de que podemos juguetear con todos ellos será romper la herencia de permisos de OU:

# Generamos el Path completo de la OU creada
$OuPath = "OU=OUTest,$OuPath"

# Obtenemos las ACL de nuestra OU
$Acl = Get-Acl "AD:\\$OuPath"

# Rompemos la herencia preservando las ACLs heredadas
$Acl.SetAccessRuleProtection($True,$True)

# Escribimos la ACL en la OU
Set-Acl "AD:\\$OuPath" -AclObject $Acl

Lo que hemos hecho ha sido obtener un objeto que representa todas las entradas de permisos de nuestra OU, lo hemos modificado para que deje de heredar permisos (copiando los que ya tenía heredados) y escribiendo éste objeto modificado en la ACL de la OU. Veamos línea a línea cómo lo hemos hecho:

  • Línea 2: Construimos el path completo de la OU que acabamos de generar para operar con ella en futuras líneas mediante $OuPath.
  • 5: Utilizamos el cmdlet Get-Acl para obtener los permisos (ACL) de la OU de Active Directory.
    • AD:\\ es un PSDrive que apunta a la raíz del directorio.
  • 8: Utilizamos el método SetAccessRuleProtection de nuestro objeto de ACL (System.DirectoryServices.ActiveDirectorySecurity) con el que podemos modificar el comportamiento de la heréncia.
  • 11: Con Set-Acl escribimos la ACL modificada en el comando anterior utilizando el parámetro -AclObject junto con el objeto modificado.

Si comprobamos ahora los permisos de nuestra OU de prueba veremos como tiene los mismos permisos que anteriormente pero éstos ya no son heredados del nivel superior:

Romper herencia de OU con PowerShell

Eliminar permisos de OU con PowerShell

Lo siguiente que vamos a ver será cómo eliminar estos permisos. El procedimiento es muy parecido: obtenemos la ACL actual, eliminamos los permisos (ACE) uno a uno del objeto y escribimos nuestra ACL modificada en la OU:

# Volvemos a obtener las ACLs de nuestra OU
$Acl = Get-ACL "AD:\\$OuPath"

# Recorremos las ACLs y las eliminamos una a una
ForEach ($Ace in $Acl.Access) {
        $Acl.RemoveAccessRule($Ace) | Out-Null
    }

# Escribimos la ACL de nuevo en nuestra OU
Set-Acl "AD:\\$OuPath" -AclObject $Acl

Veamos paso por paso:

  • Línea 2: Obtenemos las ACL de la OU de nuevo.
    • Debemos tener en cuenta que tras cada modificación de los permisos de la OU deberemos “refrescar” nuestro objeto $Acl para que tenga la versión actualizada de los permisos.
  • 5: Recorremos todas las ACL contenidas en la propiedad “Access” de nuestro objeto $Acl.
    • 6: Utilizamos el método RemoveAccessRule del objeto $Acl para eliminar la ACE.
  • 10: Con Set-Acl escribimos la ACL modificada en el comando anterior utilizando el parámetro -AclObject junto con el objeto modificado.

Después de eso, si volvemos a revisar los permisos de la OU veremos como no existe ninguno:

Eliminar permisos de OU con PowerShell

Añadir permisos de OU con PowerShell

Con nuestra ACL limpia llega el momento de añadir permisos a la Unidad Organizativa. Esta es quizás la parte más compleja, puesto que deberemos construir a mano un objeto ActiveDirectoryAccessRule, es decir, deberemos crear la ACE de forma manual. Vamos a ver cómo sería la cosa:

# Volvemos a obtener las ACLs de nuestra OU
$Acl = Get-ACL "AD:\\$OuPath"

# Construimos la ACE para el usuario Marc
$User = (Get-ADUser 'Marc')
$Sid = [System.Security.Principal.SecurityIdentifier]$User.Sid
$Identity = [System.Security.Principal.IdentityReference]$Sid
$Rights = [System.DirectoryServices.ActiveDirectoryRights]"GenericRead"
$Type = [System.Security.AccessControl.AccessControlType]"Allow"
$Inheritance = [System.DirectoryServices.ActiveDirectorySecurityInheritance]"All"
$Ace = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $Identity,$Rights,$Type,$Inheritance

# Añadimos la ACE a la ACL
$Acl.AddAccessRule($Ace)

# Escribimos la ACL de nuevo en nuestra OU
Set-Acl "AD:\\$OuPath" -AclObject $Acl

Repasemos paso por paso:

  • Línea 2: Obtenemos las ACL de la OU de nuevo.
  • 5-10: Obtenemos todas las propiedades que necesitamos para construir nuestro objeto ActiveDirectoryAccessRule.
    • 5: Obtenemos el usuario a añadir en la ACE.
    • 6: Sacamos el SID (identificador de seguridad) del usuario.
    • 7: Mediante el SID obtenemos el identificador del usuario, necesario para construir el objeto.
    • 8: Creamos un objeto de permisos de Active Directory con permisos de lectura. Podéis obtener todos los valores disponibles aquí.
    • 9: Determinamos el tipo de permiso en “permitir”.
    • 10: Aplicamos la herencia de permisos a todos los objetos “descendientes”.
  • 11: Mediante las propiedades definidas en el bloque anterior creamos un nuevo objeto de ACE mediante New-Object.
  • 14: Añadimos la ACE generada a la ACL que hemos obtenido en la línea 2.
  • 17: Con Set-Acl escribimos la ACL modificada en el comando anterior utilizando el parámetro -AclObject junto con el objeto modificado.

Si ahora vemos la ACL de la OU podemos ver como se ha añadido la entrada:

Añadir permisos de OU con PowerShell

A partir de aquí, si queremos añadir más permisos a la ACL únicamente tendremos que generar tantas ACE como sea preciso y añadirlas a nuestra ACL mediante Set-Acl.

El resultado final del script sería este:

# Definimos el path donde crear nuestra OU de prueba
$OuPath = 'DC=sobrebits,DC=local'

# Creamos la OU "OUTest" en la ubicación definida
New-ADOrganizationalUnit -Name 'OUTest' -Path $OuPath

# Generamos el Path completo de la OU creada
$OuPath = "OU=OUTest,$OuPath"

# Obtenemos las ACL de nuestra OU
$Acl = Get-Acl "AD:\\$OuPath"

# Rompemos la herencia preservando las ACLs heredadas
$Acl.SetAccessRuleProtection($True,$True)

# Escribimos la ACL en la OU
Set-Acl "AD:\\$OuPath" -AclObject $Acl

# Volvemos a obtener las ACLs de nuestra OU
$Acl = Get-ACL "AD:\\$OuPath"

# Recorremos las ACLs y las eliminamos una a una
ForEach ($Ace in $Acl.Access) {
        $Acl.RemoveAccessRule($Ace) | Out-Null
    }

# Escribimos la ACL de nuevo en nuestra OU
Set-Acl "AD:\\$OuPath" -AclObject $Acl

# Volvemos a obtener las ACLs de nuestra OU
$Acl = Get-ACL "AD:\\$OuPath"

# Construimos la ACE para el usuario Marc
$User = (Get-ADUser 'Marc')
$Sid = [System.Security.Principal.SecurityIdentifier]$User.Sid
$Identity = [System.Security.Principal.IdentityReference]$Sid
$Rights = [System.DirectoryServices.ActiveDirectoryRights]"GenericRead"
$Type = [System.Security.AccessControl.AccessControlType]"Allow"
$Inheritance = [System.DirectoryServices.ActiveDirectorySecurityInheritance]"All"
$Ace = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $Identity,$Rights,$Type,$Inheritance

# Añadimos la ACE a la ACL
$Acl.AddAccessRule($Ace)

# Escribimos la ACL de nuevo en nuestra OU
Set-Acl "AD:\\$OuPath" -AclObject $Acl

Bola extra: Copiar los permisos de una OU a otra con PowerShell

Es posible que después de este último punto hayas pensado que escribir una ACL compleja puede hacer que te quede un script extremadamente largo (algo que muchas veces se ve como algo bueno cuando no debería serlo), y razón no te falta. Un truco si vas a estar recreando los mismos permisos muchas veces es el siguiente:

  • Creas una OU y le asignas permisos que necesites a mano (no siempre hay que hacerlo todo desde la línea de comandos).
  • Haces que el script copie esos permisos en tu nueva OU.

Lo mejor de éste método es que lo puedes implementar en dos líneas:

# Obtenemos las ACL de la OU plantilla
$Acl = Get-ACL "AD:\\OU=PlantillaPermisos,DC=sobrebits,DC=local"

# Escribimos la ACL en la nueva OU
Set-Acl "AD:\\$OuPath" -AclObject $Acl

Conclusión

Mediante esta forma de asignación de permisos en OUs con PowerShell podremos automatizar un paso más en nuestros procesos de creación de usuarios, algo que puede ahorrarnos una gran cantidad de horas.

¡Espero que os sea útil!

La entrada Active Directory: Gestionar permisos de OU con PowerShell aparece primero en Sobrebits.

by Marc Meseguer at May 02, 2019 12:27 PM

May 01, 2019

RooTeando

Entrevista En Diferido 8: Jose Carlos.

Hoy comenzamos una entrevista a Jose Carlos, profesor de secundaria, usuario de OpenBSD y Python. 

Antes de todo, gracias por participar y apoyar este proyecto. La primera pregunta es una presentación por parte del entrevistado, para que los lectores te puedan conocer un poco.

Entrevista En Diferido: ¿Te podrías presentar en unas líneas?

 

Jose Carlos:   Hola a todos los suscriptores del canal. En primer lugar, agradezco a José la invitación. Me ...

May 01, 2019 09:39 PM

April 25, 2019

soyadmin.com

Instalando IIS en Windows Server en tan solo 8 pasos

Segun la Wikipedia «Internet Information Services o IIS1 es un servidor web y un conjunto de servicios para el sistema operativo Microsoft Windows. Originalmente era parte del Option Pack para Windows NT. Luego fue integrado en otros sistemas operativos de Microsoft destinados a ofrecer servicios, como Windows 2000 o Windows Server 2003. Windows XP Profesional incluye una versión limitada de IIS. Los servicios que ofrece son: FTP, SMTP, NNTP y HTTP/HTTPS.

Este servicio convierte a un PC en un servidor web para Internet o una intranet, es decir que en los ordenadores que tienen este servicio instalado se pueden publicar páginas web tanto local como remotamente.

Se basa en varios módulos que le dan capacidad para procesar distintos tipos de páginas. Por ejemplo, Microsoft incluye los de Active Server Pages (ASP) y ASP.NET. También pueden ser incluidos los de otros fabricantes, como PHP3 o Perl.»

Una vez definido que es IIS, vamos a ver como instalarlo siguiendo estos pasos a continuación

1) Vamos al Server Manager y le damos a «Add roles and features»

2) Seleccionamos «Add roles and features» y le damos a «Next»

3) Nos mostrará el servidor por defecto y continuamos con «Next»

4) En el listado de aplicativos y servicios tildamos «Web Server (IIS)» se nos abre una nueva ventana donde nos solicita si queremos agregar las «Herramientas de administración» Tildamos en «Add Featured» y «Next»

5) Seleccionamos las funciones adicionales a instalar y damos a «Next»

6) Nuevamente damos click en Siguiente

7) Chequeamos los valores a instalar y finalmente damos click en «Install»

8) Seguimos el proceso de instalación y cuando finalizas rebooteamos.

by Mauro at April 25, 2019 11:10 AM

April 24, 2019

Sobre bits

Serverless y PS – Ejecutar PowerShell en Azure Functions

Sin duda la palabra serverless (una palabra un poco controvertida) está pegando fuerte en los últimos tiempos y parece que ha llegado para quedarse. Si bien este concepto está muy ligado a la parte del desarrollo, desde de sistemas también podemos sacarle mucho jugo. En la entrada de hoy veremos cómo ejecutar PowerShell en Azure Functions, la plataforma serverless de Microsoft.

Ejecutar PowerShell en Azure Functions

Conociendo serverless y Azure Functions

Antes de empezar con el how-to propiamente dicho creo que es importante que tengamos clara la base de todo esto.

Serverless es el “palabro” elegido por la industria para definir un servicio en el que el desarrollador se desentiende del servidor donde se ejecuta su código. En un servicio serverless el desarrollador simplemente copia su código y el proveedor de servicios es el encargado de aprovisionar la infraestructura necesaria para que éste funcione, escale y se mantenga disponible.

No me gusta particularmente la palabra serverless pues puede llevar al error de pensar que realmente no existe un “servidor” que ejecute el código. Lo que nos tiene que quedar claro es que éste no desaparece, sino que pasa a ser transparente para el usuario.

Azure Functions es el servicio serverless de Microsoft, un servicio que nos va a permitir ejecutar funciones o scripts de PowerShell en “la nube” de forma muy sencilla sin tener que desplegar un servidor para ello.

Creando la Azure Function

Ahora que ya conocemos un poco más de serverless y de las Azure Functions vamos a explorar un poco el servicio creando una función de prueba.

Accediendo a Azure

Lo primero que deberemos hacer para empezar con Azure Functions será entrar en nuestra cuenta de Azure. Si no dispones de una puedes crearla de forma gratuita desde su página web. Con tu nueva cuenta dispondrás de:

  • 12 meses de algunos servicios de forma gratuita.
  • 170€ de crédito para usar con cualquier servicio.
  • Muchos servicios de forma gratuita siempre.

En nuestro caso con Azure Functions nos valdremos de su tier gratuito, que es más que suficiente para hacer toda clase de pruebas con él.

Creando nuestra primera Azure Function App

Una vez logeados en nuestra cuenta de Azure podemos proceder a crear nuestra Azure Function App (el contenedor que hospedará nuestras funciones). Para ello nos dirigiremos a su respectivo apartado en el menú lateral izquierdo:

Function App en Azure

Posteriormente pulsaremos sobre el botón Crear Function App y rellenaremos sus campos:

Configuración de Function App

Repasemos los campos configurados:

  • Nombre de la aplicación: El nombre de la aplicación, que a su vez definirá la URL de la misma.
  • Suscripción: Seleccionar cuál de nuestros planes de suscripción utilizaremos. Como esta es una cuenta nueva utilizamos la Evaluación gratuita.
  • Grupo de recursos: Dejamos que nos genere un nuevo grupo de recursos para la aplicación (más sobre los grupos de recursos aquí).
  • OS: Seleccionamos Windows.
  • Plan de hospedaje: Dejamos marcado plan de consumo para utilizar el pago por ejecución (no vamos a pagar nada puesto que utilizaremos el tier gratuito).
  • Ubicación: Seleccionamos una ubicación cercana a nosotros.
  • Pila de tiempo de ejecución: Elegimos .NET para ejecutar PowerShell.
  • Storage: Marcamos la creación de un storage nuevo para nuestra aplicación.

Después de rellenar los campos pulsaremos sobre el botón Crear y esperaremos hasta que la aplicación se cree. Una vez creada deberíamos ver algo así en el apartado Function App:

Function App creada

Por último, antes de pasar a crear la función en si, deberemos cambiar a la versión 1 el runtime de nuestra Funcion App, puesto que la versión 2 no soporta la ejecución de PowerShell. Para ello pincharemos sobre el nombre de nuestra Function App y posteriormente en Configuración de Function App.

Configuración de Function App

Y en Versión en tiempo de ejecución marcaremos ~1.

Versión de Function App
Creando nuestra función de PowerShell en Azure Functions

Ahora que tenemos el entorno de ejecución creado y configurado podemos pasar a crear la función en si. Para ello pincharemos sobre el botón + de al lado de Funciones y posteriormente pulsaremos sobre Crear su propia función personalizada.

Crear nueva Azure Function

En Elegir una plantilla a continuación:

  • Habilitamos la Compatibilidad de lenguaje experimental para poder utilizar PowerShell. (PowerShell en Azure Functions se encuentra en estado experimental, por lo que no se deberían poner cargas críticas en éste servicio)
  • Seleccionamos HTTP trigger como modo de ejecución de nuestra función para esta prueba.
Configuración de Azure Function

En el menú de creación de la función seleccionamos PowerShell como lenguaje y le damos nombre a la función.

Configuración de Azure Function 2

Una vez finalizada la creación ya deberíamos ver nuestra flamante nueva función de prueba:

Azure Function creada

Entendiendo el script de prueba

El script de prueba que se nos proporciona nos puede ayudar a entender de una forma fácil algunas de las particularidades de la ejecución de PowerShell en Azure Functions.

Básicamente lo que hace este pequeño script será buscar un parámetro Name en nuestra petición (tanto si es GET como si es POST) y devolvernos un string con Hello $name. Vamos a examinarlo:

# POST method: $req
$requestBody = Get-Content $req -Raw | ConvertFrom-Json
$name = $requestBody.name

# GET method: each querystring parameter is its own variable
if ($req_query_name) 
{
    $name = $req_query_name 
}

Out-File -Encoding Ascii -FilePath $res -inputObject "Hello $name"
  • Líneas 1-3: Parte del script orientada a peticiones POST.
    • 2: Obtenemos el cuerpo de la petición contenido en la variable $req y lo convertimos de json a un objeto. En Azure Functions el cuerpo de la petición POST siempre vendrá contenido en esta variable.
    • 3: Obtenemos la propiedad name de la petición.
  • Líneas 5-9: Parte del script orientada a peticiones GET.
    • 6: Determinamos si existe la variable $req_query_name.
      • En Azure Functions las propiedades que pasemos mediante GET generan una variable automática $req_query_nombrepropiedad. Esto quiere decir que si lanzamos una query con una propiedad “blog” ésta será accesible en nuestro script con $req_query_blog.
    • 8: De existir la variable la almacenamos en $name para posteriormente devolverla en nuestra string.
  • Línea 11: Devolvemos nuestra string añadiendo su contenido al archivo de salida ubicado en la ruta de la variable $res.
    • En Azure Functions $res es una variable especial que apunta al archivo utilizado para la salida de nuestra función.

Todo esto puede parecer muchas cosas a tener en cuenta pero básicamente hablamos de 3:

  • Si queremos procesar solicitudes POST nos valdremos de $req para obtener los parámetros.
  • En caso de querer procesar solicitudes GET nos valdremos de $req_query_nombredelparametro para obtener el parámetro.
  • Siempre devolveremos el resultado de nuestro script mediante $res.

Ejecutando PowerShell en Azure Functions

Por último, ahora que ya tenemos nuestra Function App y nuestra función de PowerShell podemos probarla. Para ello nos valdremos de Invoke-RestMethod, el cmdlet de referencia para interactuar con APIs REST desde PowerShell.

El primer paso será obtener la URI completa desde la que invocar nuestra función. Desde la vista de nuestra función pulsaremos sobre </> Obtener la dirección URL de la función:

URI de la función

Una vez copiada lo primero que haremos será guardarla en una variable:

$Funcion = "https://sobrebitstest.azurewebsites.net/api/PSSobrebits?code=dKFWt5Ew..."

Y ahora vamos a hacer algunas consultas sobre ella:

Invocar script de PowerShell en Azure Functions

Repasemos el resultado de los comandos:

  • En la primera ejecución no añadimos a la URI ningún parámetro, con lo que nuestro script no puede concatenar ningún nombre a “Hello”.
  • En la segunda ejecución añadimos un nombre a la petición añadiéndolo a la URI y, esta vez sí, se concatena a “Hello”.
  • En la tercera ejecución vemos como para este script el funcionamiento es el mismo tanto con POST como con GET.

Resumen

En la entrada de hoy hemos podido ver como sin desplegar ningún tipo de servidor tenemos código de PowerShell ejecutándose bajo demanda en Azure. Los usos que le podemos dar son muchos y en próximas entradas espero traeros alguno.

Os invito a que exploréis esta forma de ejecutar PowerShell puesto que abre un abanico inmenso de posibilidades y, sin duda, es una forma sencilla de acercarnos al serverless desde una tecnología que todos conocemos.

¡Nos leemos pronto!

La entrada Serverless y PS – Ejecutar PowerShell en Azure Functions aparece primero en Sobrebits.

by Marc Meseguer at April 24, 2019 01:05 PM

April 23, 2019

soyadmin.com

Variety Wallpaper Changer una aplicación para personalizar nuestro Escritorio Linux

Variety es una aplicación Linux, que nos permite personalizar nuestro fondo de escritorio de una manera sencilla y fácil, permitiendo rotar nuestro Wallpapper automáticamente.
Esta herramienta funciona en casi todas las distribuciones y entornos de escritorio KDE, LXDE, XFCE, Unity, GNOME Shell, Cinnamon y Pantheon.

La aplicación descarga y muestra un nuevo fondo de escritorio automáticamente desde múltiples sitios aleatorios: Wallbase.cc, Flickr, Wallpapers.net, Desktoppr.co, además de otros sitios en los que se puedan publicar medios a través de sindicación de contenidos (RSS) como deviantART, SmugMug y Picasa.

Variety es una aplicación creada por Peter Levi, versión tras versión va agregando y anexando nuevas fuentes de imágenes, efectos, opciones y hasta la posibilidad de compartir la imagen de nuestro fondo en Facebook.

Aunque algunos dirán que no es una molestia buscar e instalar su propia imagen de fondo de pantalla, con Variety tenemos la posibilidad de cambiar automáticamente el fondo según los minutos que deseemos, añadirles efectos visuales (sepia, escala de grises, desenfoque, pixelado, blur, etc) y hasta utilizar la imagen de la NASA Astronomy Picture of the Day y World Sunlight Map, que forman un live wallpaper de la tierra que cambia dependiendo de la hora del día.

Variety descarga el wallpaper a una carpeta temporal de nuestra PC, permitiendo que nos quedemos permanentemente con esa imagen.

Personalmente una aplicación que cumple lo que promete y nos permite tener un fondo de escritorio muy llamativo, recomendado para aquellos que no se deciden por que fondo utilizar y para aquellos que les gusta tener una visual distinta cada cierto tiempo o cada vez que encendemos nuestra PC.

Como se instala:
– Debian, Ubuntu y derivados

# sudo add-apt-repository ppa:peterlevi/ppa
# sudo apt-get update
# sudo apt-get install variety

– Arch Linux

# sudo pacman -S variety

by Mauro at April 23, 2019 12:06 PM

April 22, 2019

soyadmin.com

DUFF un comando para detectar archivos duplicados en nuestro sistema

Me considero un acumulador de información digital, archivos, fotos, imágenes, programas, etc., cuando los HD’s se empiezan a llenar hay que buscar alternativas de limpieza. Un buen método es buscar y eliminar archivos duplicados y de esa manera hacer valioso espacio.

En linux existe una herramienta que nos salva en este caso, con duff podremos buscar y eliminar archivos duplicados, sean los que fueran.  El funcionamiento es sencillo indicamos la carpeta a explorar para hacer un escaneo y luego podemos también indicarle que elimine uno de esos 2 archivos.

Como se instala Debian, ubuntu y derivados:

# sudo apt-get install duff

El procedimiento para buscar archivos duplicados es:

# duff -r /ruta-al-direcorio

El resultado sería algo parecido a esto:

2 files in cluster 160 (1202745 bytes, digest 117c6a8b4a15dab31a74a08dbcdafa482540ca86)
/home/mauro/Dropbox/Fotos/Cargas de cámara/2014-07-30 23.06.07.jpg
/home/mauro/Dropbox/Fotos/Imágenes/2014-07-30 23.06.07.jpg
2 files in cluster 161 (1339971 bytes, digest f6d8136fe563c140c2078d9bb43c897dab8188eb)
/home/mauro/Dropbox/Fotos/Cargas de cámara/2014-07-11 00.36.14.jpg
/home/mauro/Dropbox/Fotos/Imágenes/2014-07-11 00.36.14.jpg

El resultado muestra que existen muchos archivos duplicados, en este caso imágenes las cuales podemos luego eliminar con este otro comando:

# duff -e0 -r /ruta-al-direcorio | xargs -0 rm

Este comando es crítico, deben tener en cuenta que esto hace un escaneo y eliminación de archivos sin consultar o sin evaluar que archivos son, por eso mismo se debe tener mucho cuidado.
Lo mejor siempre es verificar la salida del primer escaneo, ver si hay algún archivo importante y en caso de ser solo duplicados sin utilidad eliminarlos definitivamente.

Para ver otras combinaciones de nuestro duff podremos ver su manual

# man duff

by Mauro at April 22, 2019 09:06 PM

Libro: Seguridad en Dispositivos Móviles de Marc Domingo Prieto

Título: SEGURIDAD EN DISPOSITIVOS MÓVILES
Autor:
Marc Domingo Prieto
Páginas: 46 Páginas
Tamaño: 1 MB
Fomato: PDF

Contenido:

La seguridad en dispositivos móviles se ha convertido en un asunto muy importante debido al incremento de «ataques» recibidos y a las consecuencias que estos tienen. Los ataques vienen incentivados por la popularización de los dispositivos móviles, el aumento de información personal y confidencial que almacenan y las operaciones realizadas a través de ellos, como por ejemplo las bancarias.

Los dispositivos móviles están formados por un conjunto de componentes de hardware capaces de soportar una gran variedad de tecnologías inalámbricas (GSM, UMTS, Wifi, Bluetooth, etc.), donde destaca uno o varios procesadores de altas prestaciones que permiten ejecutar un sistema operativo muy complejo y un gran número de aplicaciones que requieren una gran capacidad de cálculo. Todo ello incrementa significativamente las distintas vulnerabilidades a las que están expuestos este tipo de dispositivos.

Un hardware más potente implica que pueden ser tratados más datos (normalmente personales), tanto los que se almacenan en la memoria de los dispositivos móviles como los que se reciben por los diferentes sensores que estos incorporan. Además, el hecho de soportar una gran variedad de tecnologías inalámbricas abre más vías de ataque.

by Mauro at April 22, 2019 11:42 AM

April 17, 2019

soyadmin.com

ttyrec: Comando para grabar sesiones en la Consola

Existe un método mediante el cual podremos grabar la sesión completa de nuestra consola, de manera que podamos luego reproducir lo que hicimos en el lapso de tiempo.
Esto está genial para poder guardar sesiones de alguien que vino a ayudarnos, o para realizar tutoriales de ciertas cuestiones difíciles de explicar.

Bueno el comando que usaremos será ttyrec, el cual está disponible en casi todos los repos oficiales de las principaless distros.

En Debian Ubuntu y derivados:

# apt-get install ttyrec

Como Grabamos?:

# ttyrec -a nombre.tty
Finalizamos la grabación con Control + c

Como reproducimos estos ficheros?:

# ttyplay nombre.tty

Yapa: Como convertir tty a gif?

Para esto es necesario installar ttygif

# apt-get install imagemagick gcc git
# git clone https://github.com/icholy/ttygif.git
# cd ttygif
# make

Para transformar nuestro archivo:

Lo recomendable es mover el archivo .tty a una carpeta donde no haya otras cosas.
# ./ttygif nombre.tty
# ./concat.sh final.gif

by Mauro at April 17, 2019 11:29 AM

April 16, 2019

soyadmin.com

¿Como listar usuarios de Mysql desde la consola?

Mysql almacena los usuarios y los nombres de las DB de usuarios en una base general, digamos en la base de datos principal del servidor. Además de esto, en esa misma DB de guardan los privilegios y permisos de los usuarios, lo que le permite a mysql aceptar o denegar el acceso a las conexiones entrantes.

Para listar los usuarios de nuestras bases de datos y recabar más información al respecto lo que se hace es filtrar la base de datos general del servidor y lograr tener los usuarios y las bd de clientes a disposición.

Lo primero es ingresar al servidor mysql:

# mysql
mysql> select User from mysql.user;
+------------------+
| User             |
+------------------+
| admin_blog       |
| basemuestra      |
| control_back     |
| control2_back    |
| duen_resel       |
| elaster2         |
| furius_mount     |
| nose_otrouser    |
| user_wordpress   |
| wp_user          |
+------------------+
10 rows in set (0.00 sec)

También podemos filtrar para enlazar estos usuarios hacia la base de datos a la que poseen permisos o privilegios de acceso.

mysql> select u.User,Db from mysql.user u,mysql.db d where u.User=d.User;
+------------------+----------------+
| User             | Db             |
+------------------+----------------+
| admin_blog       | prueba         |
| basemuestra      | labdmodesta    |
| basemuestra      | labdtest       |
| control_back     | backups        |
| control2_back    | control2       |
| duen_resel       | test           |
| elaster2         | elaster_joom   |
| furius_mount     | furius_wp      |
| nose_otrouser    | tester         |
| nose_otrouser    | tester2        |
| user_wordpress   | user_db        |
| user_wordpress   | user_wp        |
| user_wordpress   | user_wp2       |
| wp_user          | wp_db          |
+------------------+----------------+
10 rows in set (0.00 sec)

by Mauro at April 16, 2019 10:55 PM

Libro: Fundamentos de Programación (C y Java)

Título: FUNDAMENTOS DE LA PROGRAMACIÓN (C y Java)
Autor:
Administración de Sistemas Informáticos
Páginas: 260 Páginas
Tamaño: 2.2 MB
Fomato: PDF

Contenido:

En este trabajo se recogen los Apuntes de Fundamentos de Programación Primer Curso del Ciclo de Grado Superior de ASI (Administración de Sistemas Informáticos).

La relación de temas tratados en este libro es la siguiente:
Tema I:
se introducen los conceptos de algoritmo, programa, ordenador,.. Se explica el funcionamiento y componentes básicos del ordenador, la codificación y operaciones con números binarios y el proceso de creación de aplicaciones y programas así como los distintos tipos de lenguajes y técnicas de programación.

Tema II: las fases de análisis y diseño del ciclo de vida. Introducción a los diagramas de flujo, pseudocódigo y UML.

Tema III: se explica el origen, estructura y funcionamiento básico de Java. Se cubren cuestiones sobre variables, tipos de datos operadores y el uso de la clase Math. Incluye dos apéndices en los que se explica la configuración y funcionamiento básico de Eclipse y Netbeans.

Tema IV: uso de las instrucciones if, switch, while y for, para crear estructuras de control de flujo.

Tema V: uso de las estructuras fundamentales de datos. En concreto el uso de Arrays y de Strings (textos); incluidos los métos de la clase String que facilitan la manipulación de textos. También se explica el envío de parámetros desde la consola del sistema (argumentos del sistema).

Tema VI: bases de la programación orientada a objetos en Java. Clases, objetos, atributos, métodos constructores. Clases estáticas. Métodos finalize,…

Tema VII: segunda parte de las cuestiones relativas a Programación Orientada a Objetos. Se explican cuestiones sobre asociaciones entre clases, agregación, composición y herencia. Incluye los conceptos más críticos sobre POO: casting de clases, clases abstractas, modificador final, clases internas, interfaces, y el uso e importancia de la clase Object.

Tema VIII: control de errores. Excepciones.

by Mauro at April 16, 2019 01:39 PM

April 15, 2019

soyadmin.com

Currports, app para verificar que puertos se usan en nuestro equipo

CurrPorts es un aplicativo para Windows que nos permite verificar que puertos se están utilizando en nuestra PC y detallarnos que software o programa usa cada uno de estos puertos y una detallada información en nuestra máquina.

Este programa nos sirve como monitor Tcp/IP, listando todos los puertos en uso en ese instante, además de darnos detalles del software que usa ese puerto, tipo de protocolo, número de puerto, dirección ip, nombre del host remoto, etc.

Esto nos puede servir para identificar problemas de consumo de ancho de banda, un posible caso de virus o troyanos, al identificar un puerto extraño abierto se puede explorar y verificar si es necesario que este abierto o verificar que sea utilizado como backdoor de algún troyano o virus. Esta página muestra los puertos normalmente utilizados por troyanos o virus.

Además y algo muy interesante de este aplicativo es que nos permite cerrar conexiones TCP no deseadas, matar el proceso que abrió los puertos, y guardar toda esta información en un archivo HTML, archivo XML o txt.
CurrPorts también marcará con el color rosa aquellos puertos sospechosos o que están siendo usados por aplicaciones no identificadas.

CurrPorts puede ser descargado desde aquí

by Mauro at April 15, 2019 10:23 PM

April 12, 2019

soyadmin.com

Solución a: Thunderbird no elimina correos.

Un curioso error se presentó en una de las PC de la empresa, un user me indicaba que su thunderbird no le permitía eliminar correos. Entre mi pensaba que estaba realizando algo mal y me dirigí a su escritorio ya pensando que sería algo realmente sencillo de solucionar.

Para mi sorpresa, tal cual lo había comentado el usuario, cuando uno tocaba un correo y la tecla delete no pasaba nada, tampoco si le daba click derecho sobre el email y eliminar y tampoco hacía nada si dábamos click al botón de eliminar que aparece al abrir el correo.

La cosa se fue complicando aún más al verificar que dentro de la cuenta configurada no aparecía la Papelera. Donde se había ido!!!!??? Comprendí entonces que no se eliminaban los correos porque el problema estaba en la papelera o trash de esa cuenta.

La única manera que podía eliminar correos era hacer un «Mover a» Carpeta local – Papelera, ahí si me dejaba procesarlo y eliminarlo. Ya sabiendo que el problema venía por un error en la carpeta trash, me fui al sistema de carpetas de las cuentas, para eso vamos a la ayuda del Thunderbird:

Allí se nos abrirá una sección de ayudas e información de thunderbird donde podremos abrir la carpeta del perfil, haciendo click en Mostrar carpeta:

En la carpeta que se nos abre vamos a «Mail» y allí nos aparecerán las carpetas de cada una de las cuentas que tengamos configuradas en el thunderbird, al ingresar al correo, verifique que no existía una carpeta trash ni el archivo trash.msf que normalmente se encargan de deborarse los emails.

Como sabía que la papelera de la carpeta local era funcional procedi a copiar ambos archivos Trash y Trash.msf desde la carpeta local a la cuenta personal del usuario (esto debe hacerse con el thunderbird cerrado)

Y GUALA! reiniciando el Thunderbird pudimos ver que permitía eliminar correos correctamente.

by Mauro at April 12, 2019 03:49 PM

¿Como hacer que el GRUB recuerde el último SO ingresado?

El GRUB es nuestro gestor de arranque en Linux, nos permite seleccionar a que Sistema Operativo queremos ingresar o entrar. Esto es una especie de menú donde se listan todos los SO que tenemos instalados en la pc.
Cada vez que prendemos nuestra máquina el GRUB tiene un orden predefinido y arrancará aquel SO en primer puesto, pasados unos segundos.

Existe una manera de que el GRUB recuerde que SO elegimos en la anterior sesión y automáticamente ingrese a ese. Esto nos facilita el acceso y si ingresamos constantemente a nuestro sistema favorito no tengamos que estar al pendiente de seleccionarlo cada vez que entremos a la pc.

El proceso es sencillo:
1)
Primero backupeamos nuestro GRUB:

# sudo cp /etc/default/grub ~/grub.bak

2) Editamos la configuración de nuestro GRUB

# sudo nano /etc/default/grub

Editamos la linea:

GRUB_DEFAULT=saved

Al reemplazar el valor default por saved activamos el GRUB_SAVEDEFAULT que recordará nuestro sistema operativo elegido anteriormente.
Luego agregamos esta linea:

GRUB_SAVEDEFAULT=true

Aqui le indicamos que elija automáticamente el valor que guardo GRUB_SAVEDEFAULT

3) Terminamos aplicando la configuración realizada

# sudo update-grub

Si tenemos instalado el GRUB2 el proceso es exactamente el mismo:
Editamos el archivo de configuración

sudo nano /boot/grub2/grub.cfg

by Mauro at April 12, 2019 03:30 PM

RooTeando

Tomando Un Café 57: SparkleShare,almacenar y compartir archivos mediante repositorios Git.

Nuevo audio donde hablo sobre mis primeras impresiones con esta aplicación, como la instalación,configuración y uso. 

Artículo sobre como instalar y configurar SparkleShare
https://opensource.com/article/19/4/file-sharing-git

Servicio de gestión de repositorio Git, NotaBug, utiliza Gogs.
https://notabug.org/

Artículo sobre como administrar ficheros multimedia en Git utilizando Git-Portal
https://opensource.com/article/19/4/manage-multimedia-files-git

Extensión de Git para archivos grandes.
GLFS  https://git-lfs.github.com/
 

  ...

April 12, 2019 09:48 AM

April 11, 2019

soyadmin.com

LOCATE, buscando archivos en Linux

Locate es un comando básico que nos permite localizar archivos en Linux, funciona mediante una base de datos que se genera mediante todos los archivos del sistema. Funciona mucho más rápido que Find comando también utilizado en la búsqueda de archivos.

El funcionamiento es sencillo mediante patrones de nombres compara y busca en la base de datos que es generada automáticamente por el sistema, la cual se actualiza automáticamente mediante el cron o con el comando updatedb.

Para instalar en CentOS Rhel y Fedora:

# yum install rlocate

Para instalar en Debian, Ubuntu y Derivados:

# sudo apt-get install mlocate

Para utilizarlo, directamente colocamos:

# locate nombre_a_buscar

by Mauro at April 11, 2019 11:34 AM

April 10, 2019

soyadmin.com

Inxi, el comando Linux que nos dirá todo sobre nuestro Hardware

Inxi es un script o aplicación que nos brindará muchísima información sobre nuestro equipo, más referentemente al Hardware. Seguramente les habrá pasado que en algún momento necesitemos saber o conocer el procesador o la placa madre de nuestro server, hasta la controladora de salida de nuestra placa de red, etc.
Con Inxi podemos tener esos datos y más sobre el hardware que compone nuestra PC o Servidor.

Para Ejecutarlo tenemos varias maneras, dependiendo de lo que necesitemos conocer en nuestro sistema de hardware:

Un resumen del sistema:

# inxi

Motherboard:

# inxi -M

CPU o Procesador:

# inxi -C

RED

# inxi -N

Particiones

# inxi -l

Toda la info de nuestro equipo

# inxi -v7

Aparte de estos ejemplos podemos concatenarlos con:
-A Información de la tarjeta de sonido.
-C Información del CPU, incluyendo la velocidad de reloj del CPU.
-D Información del disco duro, no sólo el modelo.
-F Salida completa para inxi. Incluye todas las letras en mayúscula, además de -s y -n.
-G Información de la tarjeta gráfica (tarjeta, tipo, resolución, procesador glx, versión, etc.).
-I Información general: procesos activos, tiempo de actividad, memoria, cliente de IRC, versión inxi.
-l Particiones.
-n Información avanzada de la tarjeta de red. Igual que -Nn. Muestra la interfaz, velocidad, dirección MAC, estado, etc.
-N Información de la tarjeta de red. Con -x, muestra PCI BusID, número de puerto.

by Mauro at April 10, 2019 07:50 PM

RooTeando

Tomando Un Café 56: Telegram NO ES una aplicación de mensajería

Nuevo audio que he grabado de un "calenton" debido a un artículo que comparaban Telegram vs WhatsApp, en xatakandroid. Para explicar porque Telegram no es solo una aplicación de mensajería.

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython @EntrevistaEnDiferido
Podcast @RadioDev  @ARMparaTODOS @TomandoUnCafe

Grupos de Telegram
Alternativas a la Raspberry
https://t.me/AlternativasRaspberry

Twitter
Tomando Un Café https://twitter.com/Tomando_Un_Cafe
RadioDev https://twitter.com/RadioDevPodcast
Un Día Una Aplicación https://twitter.com/UnDiaUnaApp
Un ...

April 10, 2019 09:21 AM

April 09, 2019

soyadmin.com

Hablemos de SPAM en cPanel (Medidas básicas para detenerlo)

El spam es una de las amenazas a la que cualquier sysadmin esta combatiendo día a día y minuto a minuto. Una sola cuenta de correos de cualquiera de los clientes que posea el servidor que haga SPAM puede desencadenar una serie de problemas (algunos muy graves en nuestro servidor)

El SPAM produce:
– Pérdida de calidad en el servicio.
– Posible pérdida de correos electrónicos.
– Listado de IP del servidor en listas negras de spam.
– Embotellamiento o tráfico desmedido.
– Etc etc.

Un servidor sin configurar o con escasas medidas de seguridad puede ser vulnerado y terminar sin servicio de correos a causa de este problema de SPAM.

Detallaremos las acciones mínimas que todo Sysadmin debe tomar en su servidor Linux con cPanel, la mayoría estan presentes en Tweak Setings o dentro de la configuración de Exim.

1) Count mailman deliveries towards a domain’s Max hourly emails
Los correos enviados desde mailman en las listas de distribución se contabilizarán como enviados por el usuario.

2) Prefix “mail.” onto Mailman URLs
Los correos que se manden desde mailman tendrán el prejifo “mailman” en los logs. Para rastrear envíos desde la consola.

3) Max hourly emails
Coloca un máximo de correos por hora para cada dominio.

4) SpamAssassin spam filter
Software y filtro antispam, sencillo útil y efectivo.

5) Maximum percentage of failed or deferred messages a domain may send per hour
Si los emails que envia un cliente vienen rebotados en su mayoría se suspende el servicio temporalmente para el cliente/sitio que realiza el envío. Cada vez que se envia spam a una base de datos contratada la gran mayoría de correos exitentes posiblemente no exista entonces habrá muchisimos mails rebotados. Esta opción en un 35% será muy eficaz.

6) Utilizar RBL’s
Las RBL’s son entidades que regulan el tráfico de correos bloqueando servidores que envían spam. Si un dominio/ip esta listado en las RBL no se reciben/enviarán los correos.

Tenemos 2 RBL’s para activar en la sección RBLs:

RBL: bl.spamcop.net
RBL: zen.spamhaus.org

7) Query Apache server status to determine the sender of email sent from processes running as nobody
Si no tienen compilado Apache con MailHeaders cPanel consultará el servidor web con el fin de determinar el remitente.
Esto consumirá más recursos que utilizar las cabeceras X-PHP-Script

8) Trust X-PHP-Script headers to determine the sender of email sent from processes running as nobody
Si tenemos MailHeaders en uso (compilado a través de EasyApache) se utilizará X-PHP-Script para determinar el servidor remitente.

Esto es a nivel servidor/admin, más adelante dejaremos algunos tips para los usuarios, referentes a las medidas a tomar si eres dueño de un sitio.

by Mauro at April 09, 2019 11:07 PM

CloudAdmins.org

Barcelona OpenNebula TechDay – May 8, 2019

OpenNebula TechDay - Barcelona, Spain

https://www2.eventsxd.com/event/9187/opennebulatechdaybarcelonaspain/sessions

OPENNEBULA TECHDAY – BARCELONA

MAY 08, 2019 • BARCELONA

 

Containers 2.0 and beyond (LXD, RANCHER, KUBERNETES, UNIKERNELS,…)  

https://www2.eventsxd.com/event/9187/opennebulatechdaybarcelonaspain/sessions

SCHEDULE

OPENNEBULA WELCOME

Wednesday, May 08 – 10:00AM to 10:20AM
Michael Abdou

OPENNEBULA LXD CONTAINER SUPPORT OVERVIEW

Wednesday, May 08 – 10:20AM to 10:40AM

HUAWEI – A LOOK AT DISRUPTIVE TECHNOLOGIES AND WHAT’S TO COME

Wednesday, May 08 – 10:40AM to 11:00AM
Daniel Justicia

RANCHER LABS – YOUR OWN PAAS IN ACTION

Wednesday, May 08 – 11:30AM to 11:50AM
Raúl Sánchez

UDL – OPENNEBULA AND RESEARCH ENVIRONMENTS

Wednesday, May 08 – 11:50AM to 12:10PM
Ivan Teixido

ITHINKUPC – OPENNEBULA AND AWS

Wednesday, May 08 – 12:10PM to 12:30PM

CSUC – UNICORE PROJECT: UNIKERNEL POWER

Wednesday, May 08 – 12:30PM to 01:00PM
Jordi Guijarro

LUNCH

Wednesday, May 08 – 01:00PM to 02:00PM

OPENNEBULA HANDS-ON TUTORIAL

Wednesday, May 08 – 02:00PM to 05:00PM

This hands-on tutorial will give an overview of how OpenNebula is used to build and operate private clouds. The attendees will build, configure and operate their own OpenNebula cloud.

 

Register here -> https://www2.eventsxd.com/event/9187/opennebulatechdaybarcelonaspain/

by Cloudadmin JordiGuijarro at April 09, 2019 05:20 PM

April 08, 2019

RooTeando

Entrevista En Diferido 7: Ernesto(Elav).

Empezamos una nueva entrevista, el entrevistado es Ernesto ,alias Elav, podcaster, blogero,youtuber, linuxero y amante de la tecnología en general. 

 

Entrevista En Diferido: Antes de todo, gracias por participar y apoyar este proyecto. La primera pregunta es una presentación por parte del invitado, para que los lectores te puedan conocer un poco.

¿Te podrías presentar en unas líneas?

 

Ernesto: Hola José, y un saludo a todos los miembros del ...

April 08, 2019 06:10 AM

April 03, 2019

Sobre bits

Cómo utilizar Git con PowerShell (Parte 2): Git en Visual Studio Code

En la primera parte de esta entrada vimos cómo utilizar Git con PowerShell mediante el uso del fantástico módulo posh-git. Si bien esta forma de utilizar Git nos puede resultar muy útil en muchos casos, la realidad es que cuando más necesitaremos el uso de un control de versiones será cuando estemos realizando nuestros desarrollos en un editor. Es por eso que en esta segunda parte nos centraremos en el uso de Git en Visual Studio Code que, con permiso de PowerShell ISE, es el editor por excelencia de PowerShell.

Git con PowerShell: Git en Visual Studio Code

Qué necesitas antes de empezar

Como ni el uso de Visual Studio Code en PowerShell es la primera vez que aparece en este blog ni evidentemente el uso de Git en PowerShell tampoco, reciclaremos parte de lo visto en éstas entradas para sentar las bases de ésta (sería un poco incoherente que me gustara tanto la automatización y repetir el mismo trabajo en cada entrada, ¿no?).

Para continuar necesitaremos:

Inicializando un repositorio de Git desde Visual Studio Code

Tal y como hicimos en la primera parte lo primero que deberemos hacer será crear nuestro repositorio de código para empezar a juguetear con Git.

Lo primero que haremos será crear la carpeta de nuestro ‘proyecto’:

  • Abrimos Visual Studio Code.
  • Nos dirigimos a Explorer y pulsamos en Open Folder.
Abrir una carpeta en Visual Studio Code
  • Creamos la carpeta y pulsamos en Seleccionar carpeta.
Abrir área de trabajo en VSCode

Como podemos ver nuestra ventana de trabajo de Visual Studio Code ha cambiado ligeramente:

  • En la parte superior aparece el nombre del área de trabajo (Sobrebits-VSCode-Git).
  • Y en el explorador también vemos el área de trabajo sin archivos dentro.
Área de trabajo en VSCode

Con nuestra área de trabajo abierta podemos dirigirnos a Source Control, que debería indicar que no hay proveedores de control de código registrados:

Source Control en Visual Studio Code

Ésto puede inducir a error ya que parece indicar que no disponemos de Git en nuestra máquina, pero lo que realmente indica es que nuestro repositorio no está inicializado. Para inicializarlo deberemos:

  • Pulsar sobre el botón con el logo de Git al lado de SOURCE CONTROL.
  • Lo que abrirá la paleta de comandos en la que seleccionaremos nuestra área de trabajo.

Después de ello podremos ver como el error ha desaparecido y ya empezamos a disponer de opciones relacionadas con Git en Visual Studio Code:

Utilizando Git en Visual Studio Code

Ahora sí que ya lo tenemos todo listo para empezar utilizar Git desde nuestro editor. Para probar ésta funcionalidad haremos lo siguiente en nuestro recién creado repositorio:

  • Añadir un archivo.
  • Realizar un commit del mismo.
  • Crear una nueva rama.
  • Hacer un merge de la rama a master.
Añadir un archivo

Lo primero que haremos en el repositorio será crear un archivo para que tenga contenido. Para ello:

  • Nos dirigimos a Explorer.
  • Pulsamos sobre el botón New File.
Crear archivo en Git con VSCode
  • Damos nombre al archivo y pulsamos Enter.
Realizar un commit

Después de crear nuestro archivo podemos ver varias cosas interesantes:

  • El nombre del archivo aparece en color verde y con una U a su derecha.
  • El icono de Source Control tiene un 1.

Lo que se nos está indicando es que existe un archivo en estado ‘untracked’ (la U) y que hay un cambio pendiente (el 1).

Antes de realizar nuestro commit deberemos poner nuestro archivo en estado tracked, es decir, bajo el rastreo de Git:

  • Pulsamos sobre el icono de Source Control.
  • Hacemos clic sobre el icono ‘+’ al lado del nombre, lo que añadirá el archivo a nuestra staging area.
Añadir archivo a staging con VSCode

El archivo ahora pasará al apartado de STAGED CHANGES, indicando que nuestro archivo está preparado para ser commiteado.

Para crear nuestro primer commit lo único que deberemos hacer será rellenar el mensaje del commit y pulsar sobre el check de encima del campo de texto:

Commit en Visual Studio Code

Después de realizar el commit la interfaz vuelve a mostrarse como antes de añadir el archivo, indicando que no hay cambios pendientes.

Interfaz después del primer commit.
Crear una nueva rama

Para crear una nueva rama utilizaremos la paleta de comandos, una de las funcionalidades más importantes de Visual Studio Code. Desde ella podemos acceder a toda la funcionalidad del editor.

  • Abrimos la paleta de comandos de una de estas formas:
    • View > Command Palette.
    • Con la combinación de teclas Ctrl+Shift+P.
  • Escribimos en la paleta ‘git branch’ para mostrar todas las opciones relacionadas con las ramas de git.
Crear rama Git en Visual Studio Code
  • Seleccionamos Git: Create Branch…
  • Escribimos el nombre de la rama y pulsamos Enter.
Nombre de rama Git en Visual Studio Code
  • Seleccionamos el puntero HEAD que nos indica la rama actual.

Después de esto nuestra rama ya estará creada y nosotros estaremos situados en ella. En la esquina inferior izquierda podremos ver sobre la rama que nos encontramos:

Rama actual en VSCode

Si pulsamos sobre el nombre de la misma aparecerá en nuestra paleta de comandos las ramas existentes y la posibilidad de cambiar entre ellas:

Ramas disponibles en VSCode
Hacer merge de una rama a master

Por último vamos a realizar un merge de nuestra rama a master. Para ello lo primero que haremos será realizar algún cambio en la rama:

Archivo modificado en VSCode con Git

Como vemos ahora tanto el color como la letra al lado del nombre del archivo han cambiado. Lo que nos están mostrando en esta ocasión es que el archivo ha sido modificado.

Añadimos la modificación a la staging area y realizamos un commit igual que lo hemos hecho en nuestro primer commit.

Commit en nueva rama en VSCode

Con nuestra modificación ya hecha podemos pasar a realizar el merge:

  • Cambiamos a la rama master.
  • Abrimos la paleta de comandos de una de estas formas:
    • View > Command Palette.
    • Con la combinación de teclas Ctrl+Shift+P.
  • Escribimos git merge y seleccionamos la opción: Git: Merge Branch…
  • Seleccionamos la rama que hemos creado como origen del merge.
Rama desde la que realizar merge

Después de esto podemos ver como los cambios realizados en nuestro archivo en la rama Test-git ya aparecen en la rama master:

Conclusión

Y hasta aquí esta entrada doble en la que hemos podido ver dos de las mejores formas de disfrutar de Git en PowerShell. Sin duda la opción que hemos visto en esta entrada es la más sencilla de las dos, puesto que Visual Studio Code nos abstrae de los comandos de Git para centrarnos simplemente en producir.

Mi recomendación es que si no estáis utilizando ya Git para vuestros desarrollos de PowerShell lo empecéis a utilizar cuanto antes, te cambia la forma de desarrollar para bien.

¡Nos vemos en la próxima

La entrada Cómo utilizar Git con PowerShell (Parte 2): Git en Visual Studio Code aparece primero en Sobrebits.

by Marc Meseguer at April 03, 2019 01:53 PM

March 27, 2019

Sobre bits

Cómo utilizar Git con PowerShell (Parte 1): posh-git

Una de las mejores ideas que podemos tener cuando empezamos a pasar de utilizar PowerShell únicamente como consola de comandos y scripting básico a desarrollos algo más serios es involucrar una herramienta de control de versiones en la ecuación. Sin duda la herramienta de control de versiones de código más extendida en la actualidad es Git, por lo que en la entrada de hoy vamos a ver de qué manera podemos utilizar Git con PowerShell para nuestros desarrollos.

Git con PowerShell: posh-git

Antes de empezar…

En esta entrada voy a suponer que ya dispones de cierta base acerca del funcionamiento de Git. De no ser así te recomiendo que antes de entrar en la parte práctica te empapes un poco del funcionamiento de Git, existen multitud de recursos tanto online como offline para ello. Te aseguro que cada minuto que emplees en ello será un minuto aprovechado.

Insalar Git en Windows

Sea cual sea la forma en la que queramos consumir Git en PowerShell lo primero que deberemos hacer será instalar el cliente de Git para Windows. Para ello descargaremos la aplicación con nuestro navegador desde ésta URL.

La instalación básicamente es un siguiente > siguiente, pero vamos a verla paso por paso por si nos interesa cambiar algo:

  • Information: Aceptamos los terminos y condiciones.
  • Select destionation location: Elegimos la ruta de instalación del cliente.
  • Select components: Para una instalación básica dejamos los componentes marcados por defecto.
    • Si no queremos añadir entradas en el menú del explorador podemos desmarcar las opciones de Windows Explorer integration.
    • Puede resultar interesante marcar el checkeo automático de las actualizaciones para mantener Git siempre al día.
Elegir componentes de Git
  • Select Start Menu Folder: Dejamos por defecto.
  • Choosing the default editor used by Git: Aquí podemos elegir el editor que utilizará Git por defecto. Yo siempre utilizo Vim puesto que es el que utilizo en GNU/Linux, pero tenemos multitud de opciones a nuestra disposición:
Elegir editor de Git
  • Adjusting your PATH environment: Aquí podemos empezar a ver algo de PowerShell en la opción por defecto. Dejando la opción por defecto nos permitirá invocar comandos de Git desde Git Bash (la consola por defecto de Git) así como en cmd o nuestra querida PowerShell.
Path de Git en Windows
  • Choosing HTTPS transport backend: Aquí podemos elegir la opción que pefiramos. Si en vez de marcar la opción por defecto marcamos la segunda utilizaremos nuestro almacén de certificados de Windows y podremos validar contra las CA root de nuestro dominio. A gusto del consumidor.
  • Configuring the line ending conversions: Dejamos la opción por defecto puesto que será la que nos asegurará mayor compatibilidad si realizamos desarrollos multiplataforma en los saltos de línea (para poder utilizar PowerShell Core para GNU/Linux sin problema).
  • Configuring the terminal emulator to use with Git Bash: Dejamos la opción por defecto puesto que nos dejará redimensionarla sin problemas en versiones anteriores a Windows 10. No es una opción que nos interese mucho puesto que la idea es utilizar la propia PowerShell con Git.
  • Configuring extra options: Otra vez podemos dejar los settings por defecto para una instalación básica.
Instalación finalizada de Git para Windows

Como podéis ver es un instalador con muchas pantallas pero que si no deseamos ningún tipo de personalización podremos pasar a base de siguientes.

Ahora que ya tenemos la instalación finalizada podríamos abri la consola Git bash para empezar a trabajar con Git:

Git bash para Windows

Instalación de posh-git

Ahora que ya tenemos el requisito fundamental para trabajar en Git con PowerShell nos falta el módulo que va a complementar la consola para convertirla en una herramienta completa para el uso de Git. El módulo es posh-git, un módulo muy popular que podemos encontrar dentro de la PowerShell Gallery, y que nos ofrece la siguiente funcionalidad:

  • Personalización del prompt al más puro estilo Git en el que podemos ver la rama en la que nos encontramos y los cambios realizados en la misma.
  • Autocompletado de comandos de Git así como de nombres de las ramas.

Para instalar el módulo como siempre nos valdremos de Install-Module:

Install-Module posh-git -Scope CurrentUser -Force

Una vez instalado el módulo lo importaremos con Import-Module o utilizaremos la función Add-PoshGitToProfile que añadirá dicho Import-Module a nuestro perfil de PowerShell

# Opción 1: Importamos manualmente el módulo
Import-Module posh-git

# Opción 2: Modificamos nuestro perfil de PowerShell para que cargue automáticamente 
# (cerramos y abrimos la consola para que cargue el módulo)
Add-PoshToGitProfile

Utilizando Git con PowerShell mediante posh-git

Con posh-git ya instalado y cargado podemos empezar a trastear con Git. Para probar su funcionamiento vamos a hacer lo siguiente:

  • Crear una nueva carpeta (nuestro “proyecto”).
  • Inicializar un repositorio de git en ella.
  • Añadir un archivo.
  • Realizar un commit.

Antes de empezar configuraremos en Git nuestro correo y nuestro email (algo necesario para poder realizar nuestros commits):

C:\Scripts> git config --global user.email "[email protected]"
C:\Scripts> git config --global user.name "Marc"

Con esto hecho podemos empezar con los primeros dos puntos:

Inicializando un repositorio con posh-git

En esta captura vemos un par de cosas interesantes:

  • Los comandos de Git están disponibles en PowerShell gracias a la configuración del instalador en la pantalla “Adjusting your path environment”.
  • Una vez inicializado el repositorio nuestro prompt cambia indicando la rama en la que estamos (master) así como el título de la ventana que nos indica tanto el repositorio (Sobrebits-Git) como la rama.

Si ahora creamos un nuevo archivo en el repositorio veremos nuevos cambios en nuestro prompt:

Nuevo archivo en posh-git

Como podemos observar han aparecido unos números en rojo que nos vienen a indicar unas cuantas cosas:

  • +1: Se ha creado un archivo nuevo en el repositorio.
  • ~0: No se ha modificado ningún archivo.
  • -0: No se ha eliminado ningún archivo.
  • !: Existen archivos en el repositorio no trackeados.

Por último vamos a añadir nuestro nuevo archivo a la staging area y a crear nuestro primer commit:

Primer commit con git-posh
  • Al añadir nuestro nuevo archivo a la staging area vemos como la “!” del final se cambia por una “~”, que nos indica que tenemos archivos pendientes de ser commiteados.
  • Al hacer commit el prompt vuelve a su estado original.

Para más información sobre los cambios en el prompt te recomiendo que revises el README.md del proyecto en GitHub.

Conclusión

Con posh-git disponemos de la capacidad de usar Git con PowerShell sin depender de otras terminales en las que realizar nuestras operaciones de versionado.

En la segunda parte veremos cómo utilizar Git con PowerShell desde Visual Studio Code, el editor de preferencia de muchos para éste lenguaje.

¡Nos vemos en la próxima!

La entrada Cómo utilizar Git con PowerShell (Parte 1): posh-git aparece primero en Sobrebits.

by Marc Meseguer at March 27, 2019 03:30 PM

March 25, 2019

RooTeando

Entrevista En Diferido 6: Carlos del blog de Lázaro.

Hoy empezamos la sexta entrevista. En este caso con Carlos del Blog de Lázaro,https://elblogdelazaro.gitlab.io/.

Antes de todo, darte las gracias por aceptar la invitación para una entrevista y la  primera pregunta sería una pequeña presentación por parte del entrevistado para que los lectores puedan conocerte un poco. 

Entrevista En Diferido: ¿Te podrías presentar en unas líneas?

 

Carlos: 

Gracias  a tí por invitarme a participar.

Soy un gran apasionado ...

March 25, 2019 09:57 AM

March 24, 2019

RooTeando

Tomando Un Café 55: Como diseñar un curso

Nuevo audio de un tema que tenia planificado desde hace tiempo, donde explico de un forma personal, como diseñar un curso enfocado a  programación.  Que pasos hay que seguir, factores que debemos tener en cuenta, como estructurar un curso,generar ficha e índice o como desarrollar un temario.

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython @EntrevistaEnDiferido
Podcast @RadioDev  @ARMparaTODOS @TomandoUnCafe

Grupos de Telegram
Alternativas a la Raspberry
https://t.me/AlternativasRaspberry

Twitter 
Podcast
Tomando Un ...

March 24, 2019 10:44 PM

March 20, 2019

blog de Rodolfo Pilas

whois para nuevos TLDs

Los nuevos TLDs como guru, americanfamily, showtime y muchos otros son un desafío para el comando whois con cierta antigüedad, ya que no los pueden resolver y muestra el error:

No whois server is known for this kind of object.

La solución es configurar un archivo /etc/whois.conf con las referencias a los nuevos TLDs y los servidores whois que los resuelven.

Este gist es un archivo /etc/whois.conf pronto para pegar y tener resuelto el problema para la siguiente consulta whois que se haga con los nuevos TLDs.

by pilasguru at March 20, 2019 03:08 PM

Sobre bits

Descubriendo módulos: Listar máquinas Windows con reinicio pendiente con PowerShell

Después de casi cinco meses desde el último descubriendo módulos retomamos la sección para hablar de PendingReboot. PendingReboot es un módulo que, tal y como habréis podido leer en el título, nos ayudará a listar de forma masiva (si queremos) máquinas Windows con reinicio pendiente, algo más que común en sistemas operativos de Microsoft. ¡Vamos a ver cómo funciona!

Listar máquinas Windows con reinicio pendiente con PowerShell

Conociendo cómo funciona el módulo PendingReboot

PendingReboot es un módulo de PowerShell muy pequeño que alberga una única función: Test-PendingReboot. Como decía en la introducción ésta función nos puede ayudar a descubrir máquinas Windows con reinicio pendiente dentro de nuestro entorno.

Cuando una máquina se encuentra en un estado de reinicio pendiente se puede deber a varias causas: instalación de parches del sistema operativo, instalación de roles del sistema, adición a dominio, cambio de hostname, instalación/desinstalación de software de terceros…

PendingReboot nos facilitará la tarea de revisar las posibles señales que determinan si hay un reinicio pendiente en un sistema:

  • Claves de registro que indican un reinicio pendiente:
    • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending
    • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootPending
  • Revisión de si la máquina va a entrar en dominio:
    • HKLM\SYSTEM\CurrentControlSet\Services\Netlogon
  • Comparativa entre el nombre de máquina y el nombre actual de la máquina.
  • Operaciones de renombrado de archivos.
    • HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
  • Clases utilizadas WMI utilizadas por el SDK de SCCM.

Test-PendingReboot utiliza Invoke-WmiMethod para realizar las consultas contra el registro de Windows de las máquinas remotas (y de la propia máquina local) tal y como vimos en ‘Utilizando CIM y WMI con PowerShell‘.

Primer uso del módulo PendingReboot

Ahora que ya conocemos un poco las entrañas del módulo vamos a sacarle jugo. Para instalarlo como siempre tiraremos de Install-Module:

Install-Module -Name PendingReboot -Scope CurrentUser -Confirm:$false

Con el módulo ya instalado podemos pasar a hacer la consulta sobre nuestra propia máquina utilizando:

PS C:\>Test-PendingReboot -ComputerName localhost -SkipConfigurationManagerClientCheck

ComputerName IsRebootPending
------------ ---------------
localhost               True

Utilizo -SkipConfigurationManagerClientCheck para que no aparezca un error indicando que la máquina no dispone del ClientSDK de SCCM.

Como podemos ver, la máquina local dispone de un reinicio pendiente. Si quisiéramos ver exáctamente qué operación es la que pide el reinicio podremos consultarlo utilizando el flag -Detailed:

PS C:\>Test-PendingReboot -ComputerName localhost -SkipConfigurationManagerClientCheck -Detailed


ComputerName                     : localhost
ComponentBasedServicing          : False
PendingComputerRenameDomainJoin  : False
PendingFileRenameOperations      : True
PendingFileRenameOperationsValue : {\??\C:\Program Files (x86)\Mozilla Firefox\tobedeleted\moz67c...}
SystemCenterConfigManager        :
WindowsUpdateAutoUpdate          : False
IsRebootPending                  : True

Y como podemos apreciar en las líneas resaltadas éste reinicio pendiente se debe a una operación de renombrado de archivos relacionada con Firefox.

Cómo listar máquinas Windows con reinicio pendiente masivamente

Revisar si nuestra propia máquina dispone de reinicio pendiente puede ser útil, pero en la mayoría de los casos se puede quedar en anecdótico. Lo realmente potente será realizar estas consultas a máquinas remotas y hacerlo a gran escala.

Lo primero que necesitaremos será almacenar las credenciales de las máquinas a las que conectaremos en un objeto PSCredential que utilizaremos en cada conexión:

$Credencial = Get-Credential

Para ejecutar masivamente Test-PendingReboot nos valdremos del parámetro -Name que acepta múltiples valores. Una forma de pasarle todos los nombres sería leyendo un archivo txt con un nombre de servidor por cada línea

PS C:\>Test-PendingReboot -ComputerName $(Get-Content C:\Scripts\Computers.txt) -Credential $Credencial -SkipConfigurationManagerClientCheck

ComputerName  IsRebootPending
------------  ---------------
Sobrebits1              False
Sobrebits2               True
Sobrebits3              False
Sobrebits4              False
Sobrebits5              False

Otra forma es utilizar PowerCLI para listar las máquinas virtuales y pasárselas a Test-PendingReboot (deberemos estar conectados a una infraestructura vSphere):

PS C:\>Test-PendingReboot -ComputerName $($(Get-Folder Sobrebits-VMs | Get-VM).ExtensionData.Guest.Hostname) -Credential $Credencial -SkipConfigurationManagerClientCheck

ComputerName  IsRebootPending
------------  ---------------
Sobrebits1              False
Sobrebits2               True
Sobrebits3              False
Sobrebits4              False
Sobrebits5              False

Por último, podríamos hacer una query a una OU desde un DC (o utilizando PSRemoting contra uno) para obtener las máquinas de la misma:

PS C:\>Test-PendingReboot -ComputerName $($(Get-ADComputer -Filter * -SearchBase "OU=Computers,DC=Sobrebits,DC=local").DNSHostName) -Credential $Credencial -SkipConfigurationManagerClientCheck

ComputerName  IsRebootPending
------------  ---------------
Sobrebits1              False
Sobrebits2               True
Sobrebits3              False
Sobrebits4              False
Sobrebits5              False

Conclusión

Con la información obtenida utilizando PendingReboot podremos realizar las acciones correctoras que necesitemos. Antes de realizar un reinicio “a la brava” de las máquinas que detectemos que tienen un reinicio pendiente sería conveniente revisar el motivo por el que se ha llegado a dicho estado por si éste se debe a un comportamiento anómalo de la misma.

¡Espero que os sea de ayuda!

¡Nos vemos en la próxima! 🙂

La entrada Descubriendo módulos: Listar máquinas Windows con reinicio pendiente con PowerShell aparece primero en Sobrebits.

by Marc Meseguer at March 20, 2019 01:00 PM

March 19, 2019

systemadmin.es

MySQL: Your password does not satisfy the current policy requirements

Mediante el plugin validate_password podemos definir unos requisitos minimos de seguridad para las contraseñas de MySQL:

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER ON `dbdemo`.* TO 'demouser'@'%' identified by 'demopassword';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER ON `dbdemo`.* TO 'demouser'@'1.2.3.4' identified by 'demopassword';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

Evidentemente para ciertos entornos dicho plugin puede resultar un problema por lo que podemos querer desactivarlo.

Podemos desactivar el plugins mediante el siguiente comando:

mysql> uninstall plugin validate_password;
Query OK, 0 rows affected (0.04 sec)

A continuación los password ya no serán examinados con los criterios mínimos de seguridad:

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER ON `dbdemo`.* TO 'demouser'@'%' identified by 'demopassword';
Query OK, 0 rows affected, 1 warning (0.06 sec)

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER ON `dbdemo`.* TO 'demouser'@'1.2.3.4' identified by 'demopassword';
Query OK, 0 rows affected, 1 warning (0.01 sec)
Tags:

by Jordi Prats at March 19, 2019 10:49 AM

March 13, 2019

Sobre bits

Redimensionar una máquina virtual de forma programada con PowerCLI

Una de las tareas habituales dentro de una plataforma vSphere es la de redimensionar máquinas virtuales existentes. Si queremos aumentar recursos es probable que con CPU/Memory Hot Add tengamos suficiente para no tener una parada de servicio, pero si dichos settings no están habilitados en nuestra VM o lo que queremos es disminuir los recursos de la máquina sí que la tendremos. En la entrada de hoy veremos cómo redimensionar una máquina virtual de forma programada con PowerCLI para poder ajustar nuestra parada de servicio a horas no productivas.

Redimensionar una máquina virtual de forma programada con PowerCLI

Construyendo el script

Si no te interesa el proceso detallado de la creación del script puedes pasar directamente al siguiente punto. 😉

Antes de empezar a construir un script, por simple que sea, recomiendo siempre planear las acciones que vamos a realizar en el mismo. Para este caso serán las siguientes:

  • Conectar a vSphere.
  • Apagar la máquina virtual (si recurrimos a este método probablemente es porque no podemos tirar de Hot Add).
  • Comprobar que la máquina llegue a apagar. (si intentáramos redimensionar la máquina estando encendida obtendríamos un error)
  • Redimensionar la máquina virtual.
  • Encender la máquina virtual.
  • Desconectar de vSphere.

Nada muy complejo, así que con un script de pocas líneas lo tendremos resuelto. Para empezar crearemos una pequeña zona de configuración del script:

#### Configuración del script ####
# Conexión a vCenter
$VcenterIp = '192.168.168.168'
$VcenterCred = Import-Clixml -Path "$PSScriptRoot\Credenciales\VMware.xml"

# Nombre de la máquina virtual a modificar
$VmName = 'Sobrebits01'
# Número de CPUs (Para no modificarlo dejar el valor en '')
$Cpu = '3'
# GBs de RAM (Para no modificarlo dejar el valor en '')
$Memory = ''
  • Líneas 3-4: Datos de la conexión a vCenter. Para almacenar las credenciales utilizamos el método en ésta entrada.
  • 7-11: Configuramos los valores de la máquina virtual. Para las $Cpu y $Memory si dejamos el valor vacío implicará no modificar dicho valor.
    • En este caso de ejemplo modificaríamos la CPU a 3 y dejaríamos la memoria con el valor ya configurado en la máquina.

Con el apartado de configuración finalizado pasamos a conectar al vCenter, apagar la máquina y esperar a que se haya apagado:

#### Cuerpo del script ####
# Conectamos al vCenter
Connect-VIServer -Server $VcenterIp -Credential $VcenterCred -WarningAction SilentlyContinue | Out-Null

# Apagamos la máquina virtual
Get-VM $VmName | Shutdown-VMGuest -Confirm:$false | Out-Null

# Esperamos hasta que la máquina se apague
Do {
    Start-Sleep -Seconds 5
    $Vm = Get-VM -Name $VmName
} Until ($Vm.PowerState -eq 'PoweredOff')

Creo que todo es bastante autoexplicativo, pero vamos a verlo por encima:

  • 3: Conectamos a vCenter utilizando la IP y credenciales generadas en el área de configuración.
  • 6: Obtenemos la máquina virtual y la apagamos de forma “amigable” con Shutdown-VMGuest.
    • De no tener las VMware Tools instaladas y activas la máquina virtual no se apagaría. Para hacer un apagado forzoso deberíamos utilizar Stop-VM.
  • 9-12: Ejecutamos el bucle hasta que la propiedad PowerState de la máquina virtual no sea PoweredOff.

Con la máquina apagada ya podemos pasar a redimensionar la máquina, iniciarla y desconectar del vCenter:

# Redimensionamos en función de lo que hayamos especificado en la configuración
if ($Cpu -and $Memory) {
    Get-VM $VmName | Set-VM -NumCpu $Cpu -MemoryGB $Memory -Confirm:$false | Out-Null
}
elseif ($Cpu) {
    Get-VM $VmName | Set-VM -NumCpu $Cpu -Confirm:$false | Out-Null
}
elseif ($Memory) {
    Get-VM $VmName | Set-VM -MemoryGB $Memory -Confirm:$false | Out-Null
}

# Iniciamos la máquina virtual
Get-VM $VmName | Start-VM | Out-Null

# Desconectamos del vCenter
Disconnect-VIServer -Confirm:$false
  • 2-10: Redimensionamos la máquina virtual con Set-VM en función de los parámetros especificados.
    • 2-4: Si especificamos tanto $Memory como $Cpu modificamos ambas configuraciones.
    • 5-7: Si únicamente hemos especificado $Cpu la modificamos.
    • 8-10: Si únicamente hemos especificado $Memory la modificamos.
  • 13: Iniciamos la máquina virtual con Start-VM.
  • 16: Desconectamos del vCenter.

Script para redimensionar una máquina virtual de forma programada con PowerCLI

El resultado final del script sería el siguiente:

#### Configuración del script ####
# Conexión a vCenter
$VcenterIp = '192.168.168.168'
$VcenterCred = Import-Clixml -Path "$PSScriptRoot\Credenciales\VMware.xml"

# Nombre de la máquina virtual a modificar
$VmName = 'Sobrebits01'
# Número de CPUs (Para no modificarlo dejar el valor en '')
$Cpu = '3'
# GBs de RAM (Para no modificarlo dejar el valor en '')
$Memory = ''

#### Cuerpo del script ####
# Conectamos al vCenter
Connect-VIServer -Server $VcenterIp -Credential $VcenterCred -WarningAction SilentlyContinue | Out-Null

# Apagamos la máquina virtual
Get-VM $VmName | Shutdown-VMGuest -Confirm:$false | Out-Null

# Esperamos hasta que la máquina se apague
Do {
    Start-Sleep -Seconds 5
    $Vm = Get-VM -Name $VmName
} Until ($Vm.PowerState -eq 'PoweredOff')

# Redimensionamos en función de lo que hayamos especificado en la configuración
if ($Cpu -and $Memory) {
    Get-VM $VmName | Set-VM -NumCpu $Cpu -MemoryGB $Memory -Confirm:$false | Out-Null
}
elseif ($Cpu) {
    Get-VM $VmName | Set-VM -NumCpu $Cpu -Confirm:$false | Out-Null
}
elseif ($Memory) {
    Get-VM $VmName | Set-VM -MemoryGB $Memory -Confirm:$false | Out-Null
}

# Iniciamos la máquina virtual
Get-VM $VmName | Start-VM | Out-Null

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

Conclusión

Si utilizamos éste script junto con lo que vimos anteriormente en Ejecutar un script de PowerShell de forma programada podremos pasar a realizar nuestras redimensiones de máquinas virtuales de forma totalmente desatendida, ahorrándonos acciones manuales fuera de horario, que creo que a ninguno nos gustan. 🙂

Eso sí, hay que tener en cuenta que el script no hace comprobaciones posteriores de que el servicio de nuestra máquina virtual levante correctamente, por lo que o lo scriptamos, o lo tenemos monitorizado o habrá que hacer un chequeo manual antes de empezar el horario productivo.

¡Espero que os sea útil!
¡Hasta la próxima!

La entrada Redimensionar una máquina virtual de forma programada con PowerCLI aparece primero en Sobrebits.

by Marc Meseguer at March 13, 2019 04:00 PM

March 12, 2019

RooTeando

Tomando Un Café 54: Fragmentación en Linux

Nuevo audio, donde doy mi opinión sobre la fragmentación en Linux,  me centro mas en el porque de la fragmentación que en decir si es bueno o malo.

 

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython @EntrevistaEnDiferido
Podcast @RadioDev  @ARMparaTODOS @TomandoUnCafe

Grupos de Telegram
Alternativas a la Raspberry
https://t.me/AlternativasRaspberry

Twitter 
Podcast
Tomando Un Café https://twitter.com/Tomando_Un_Cafe
RadioDev https://twitter.com/RadioDevPodcast

Canales de Telegram
Un Día Una Aplicación https://twitter ...

March 12, 2019 09:20 AM

March 11, 2019

debianhackers.net

[Short] FreshRSS: aloja tu propio servidor RSS

Como un soplo de aire fresco, llega FreshRSS un agregador de canales RSS libre y ligero donde mantener al día y sincronizados vuestros feed RSS. Es compatible tanto con Apache como con Ngnix, así que debería funcionar sin problema aunque vayáis un poco justos de hardware (RasPi calling!). El funcionamiento es simple, instalas un servidor web (guía aquí -de momento sólo está en inglés-) y accedes a él desde cualquier dispositivo, bien vía web o desde la aplicación android (la podéis encontrar en F-droid pero ojo que aún está en versión alpha).

Aquí podéis indagar un poco sobre el funcionamiento de la aplicación y aquí se explica como programar cron para que actualice los feeds automáticamente cada cierto tiempo.

Happy hacking!

by Debish at March 11, 2019 07:34 PM

March 10, 2019

RooTeando

Entrevista En Diferido 5: Laura

Hoy empezamos una entrevista a Laura,  podcaster, participante activa en la  Unión Podcastera y usuaria de Bullet Journal. 

Antes de todo, darte las gracias por aceptar la invitación para una entrevista y la  primera pregunta sería una pequeña presentación por parte del entrevistado para que los lectores puedan conocerte un poco. 

 

Entrevista En Diferido: ¿Te podrías presentar en unas líneas?

Laura:  Lo primero agradecerte la invitación a participar en este proyecto que ...

March 10, 2019 11:45 PM

March 08, 2019

blog de Rodolfo Pilas

Sobre escribir variables al invocar el shell script

Todos utilizamos variables de tipo constantes en nuestros shell scripts, que en principio no son modificables pues están en el código, un ejemplo simple:

#!/bin/bash
HOLA="Hola, soy el script"
echo $HOLA

así en cada ejecución de este script se mostrará el contenido de la variable HOLA:

$ ./hola
hola soy el script
$

Pero al definir/crear la variable podemos hacerlo con un contenido por defecto, que se usa en caso que la variable no tenga otro valor, mediante esta sintaxis de definición:

HOLA=${HOLA:-"Hola, soy el script"}

de esta forma HOLA tomará el valor que ya traiga o, en caso de ser nula, asignará el string indicado luego del :-

Esta sintaxis para la definición de las variables en nuestros script permite que se le pueda cambiar el valor al invocar el script, así:

$ HOLA="Hola, soy el shell" ./hola
Hola, soy el shell
$

También esta sintaxis de valor por defecto de las variables puede ser asignado directamente al invocarlas, utilizando una sintaxis equivalente:

#!/bin/bash
echo ${HOLA:-"Hola, soy el script"}

lo que simplifica el script, aunque puede distribuir los valores de las variables a lo largo y ancho del código así que a usarlo con cuidado.

Obviamente es algo muy documentado y explicado, aquí unos ejemplos:

by pilasguru at March 08, 2019 07:08 PM

March 06, 2019

RooTeando

Tomando Un Café 53: Charla con Rafa, casi un monográfico de C y C++.

Nuevo audio, un crossover con Rafa del podcast Leña al mono que es goma y Loleido, hablamos sobre Linux, lenguaje de programación (mucho C/C++ y algo Python) y otros temas.

Podcast de Rafa
Leña al mono que es de goma:  https://www.ivoox.com/lena-al-mono-es-goma_sq_f1479496_1.html
Loleido  https://www.ivoox.com/loleido-libros-sin-horas_sq_f1650517_1.html

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython @EntrevistaEnDiferido
Podcast @RadioDev  @ARMparaTODOS @TomandoUnCafe

Grupos de Telegram
Alternativas a la Raspberry ...

March 06, 2019 10:17 PM

debianhackers.net

[Truco] Convierte un vídeo en imágenes con ffmpeg

¿Pulsaste el botón de vídeo en lugar del de la foto en aquel lugar y momento difícilmente repetible? ¿Te gustaría tener una de las escenas icónicas de tu película favorita de fondo de pantalla? Con ffmpeg es muy sencillo. Imaginemos que necesitamos extraer los primeros 30 segundos de un vídeo en fotogramas. Basta con teclear:

ffmpeg -ss 00:00 -i video.mp4 -t 00:30 fotograma%05d.png

En detalle:

  • -ss indica el inicio temporal a partir del cual empezar a extraer fotogramas.
  • -t el intervalo de tiempo en el que queremos extraerlos
  • %05d es una wildcard que sirve para añadir el número de fotograma con 5 dígitos al final del nombre de cada .png generado

Fácil ¿verdad? Esta es solo una pequeña muestra del potencial de ffmpeg, os invito a echar un vistazo más detallado a esta navaja suiza del multimedia. Aquí os dejo el enlace a la lista de formatos de vídeo soportados.

¡Que aproveche!

by Debish at March 06, 2019 08:05 PM

Sobre bits

3 formas distintas de crear objetos en PowerShell

Como ya hemos visto en entradas anteriores, cuando trabajamos con PowerShell acostumbramos a pasarnos todo el tiempo manipulando objetos, ya sea consultándolos, modificándolos, creándolos o eliminándolos. En la entrada de hoy vamos a ver de qué formas podemos crear objetos en PowerShell, cuál es la más adecuada y por qué deberíamos hacerlo.

3 formas distintas de crear objetos en PowerShell

Antes de nada: ¿por qué es importante crear objetos en PowerShell?

Como decía en la introducción y como ya he dicho en más de una ocasión en este blog, en PowerShell todo es un objeto.

Cuando utilizamos cualquier cmdlet éste va a devolvernos un objeto. Lo potente de ello es que podemos utilizar todo el set de herramientas habituales para procesar dicho objeto, estemos tratando con un objeto que representa un servicio de Windows o con uno que representa una máquina virtual de vSphere indistintamente.

En la medida de lo posible, cuando desarrollemos nuestras propias funciones o scripts deberíamos seguir dicha práctica e intentar devolver objetos en vez de texto. Hacerlo garantiza que cualquier persona que vaya a ejecutar dicha herramienta pueda manipular la salida de la misma de la forma que está acostumbrada con cualquier otro cmdlet de PowerShell.

Ahora que ya conocemos los beneficios de devolver objetos en nuestras funciones y scripts pasemos a la acción y empecemos a ver cómo crearlos.

Método 1: Crear objetos en PowerShell con New-Object y Add-Member

La primera forma que vamos a utilizar para crear objetos en PowerShell será utilizando New-Object y Add-Member. New-Object nos permitirá crear el objeto y con Add-Member le podremos añadir propiedades y métodos.

# Creamos el objeto
$ObjetoSobrebits = New-Object -TypeName PSCustomObject

# Le añadimos las propiedades
$ObjetoSobrebits | Add-Member -MemberType NoteProperty -Name Nombre -Value "Sobrebits"
$ObjetoSobrebits | Add-Member -MemberType NoteProperty -Name URL -Value "https://sobrebits.com"
$ObjetoSobrebits | Add-Member -MemberType NoteProperty -Name Autor -Value "Marc Meseguer"

Si ahora examinamos el contenido de nuestro objeto $ObjetoSobrebits veremos lo siguiente:

Objeto creado con New-Object

Como podemos observar New-Object ha creado un nuevo objeto del tipo PSCustomObject y Add-Member ha añadido nuestras propiedades. Como decía al principio con Add-Member también podemos añadir métodos a nuestro objeto:

$ObjetoSobrebits | Add-Member -MemberType ScriptMethod -Name Status -Value {(Invoke-WebRequest https://sobrebits.com).StatusDescription}

Si ahora invocamos al método Status de nuestro objeto nos devolverá, en este caso, el estado de la transacción web a sobrebits.com:

Método en objeto creado con New-Object

Método 2: Utilizando New-Object y una hashtable

Después de ver el primer método la sensación que se nos puede quedar es que para crear un objeto hay que picar mucho código. Nada más lejos de la realidad, con este método vamos a intentar disminuir la cantidad de código a escribir con el uso de una hashtable (o diccionario en otros lenguajes de programación):

# Creamos las propiedades del objeto
$Propiedades = [ordered]@{
    Nombre = "Sobrebits"
    URL = "https://sobrebits.com"
    Autor = "Marc Meseguer"
}

# Creamos el objeto con las propiedades creadas anteriormente
$ObjetoSobrebits2 = New-Object -TypeName PSCustomObject -Property $Propiedades

Veamos qué hemos hecho:

  • Líneas 2-6: Creamos una hashtable con las propiedades que daremos al objeto y la almacenamos en $Propiedades.
    • En la creación utilizamos [ordered] para que se conserve el orden en el que definimos los valores de la hashtable. De no hacerlo aparecerían desordenados.
  • Línea 9: Creamos el objeto utilizando las propiedades definidas en la hashtable.
Objeto de PowerShell creado con hashtable

Como podemos comprobar tenemos el mismo objeto que en el primer método pero generado de una forma mucho más rápida al ahorrarnos todos los Add-Member.

Método 3: Utilizando una Hashtable y un acelerador de tipo

Si bien el método 2 supone un gran ahorro a la hora de crear nuestros objetos, éste método viene para hacerlo todo aún más minimalista. Para ahorrarnos la creación del objeto con New-Object utilizaremos el acelerador de tipo [pscustomobject] delante de la definición de la hashtable. Con ello tendremos el objeto creado con un solo paso.

$ObjetoSobrebits3 = [pscustomobject]@{
    Nombre = "Sobrebits"
    URL = "https://sobrebits.com"
    Autor = "Marc Meseguer"
}

Si miramos el contenido de nuestra variable veremos que nada ha cambiado respecto a los métodos anteriores más allá de la reducción del código utilizado:

Objeto creado mediante hashtable y acelerador de tipo

Nota: Utilizando el acelerador de tipo [pscustomobject] ya incluye el uso de [ordered] en la hashtable que hemos visto en el método anterior.

Conclusión

Como he dicho al principio de la entrada es muy importante que utilicemos siempre que sea posible objetos como salida de nuestros scripts y funciones.

Espero que estos tres métodos os sean útiles. Si bien hay más éstos son los más utilizados. Yo particularmente utilizo el 3 siempre que puedeo desde que lo descubrí, todo lo que sea ahorrar en líneas es bienvenido en mi código. 🙂

¡Hasta la próxima!

La entrada 3 formas distintas de crear objetos en PowerShell aparece primero en Sobrebits.

by Marc Meseguer at March 06, 2019 02:53 PM

March 03, 2019

fraterneo.blogspot.com.es

February 28, 2019

www.rootzilopochtli.com

Fedora México: 1er meetup


Desde hace ya mucho tiempo, tenía la inquietud de poder colaborar con la comunidad Fedora en México. Por muchas razones que no vale la pena mencionar, la comunidad se había estancado un poco.

Gracias a la invitación del buen Alberto Rodríguez y Efrén Robledo, pude cumplir esta meta de re-impulsar la comunidad, con el reinicio de la comunidad en la plataforma Meetup.com, dando la primer plática-taller: Fedora Containers Lab.

En esta larga plática, les compartí como realizo mis pruebas de laboratorio con KVM, probando podman para la administración de containers.

Alberto ha organizado grandes eventos para la comunidad, como el Fedora Women’s Day y las Fedora Release Party en la UAM Azcapotzalco y que decir del buen Efrén con el estupendo trabajo que ha realizado en Eva Fedora.

Uniendo estos esfuerzos es como queremos impulsar y reavivar la llama de la comunidad en México.

Pueden unirse en meetup.com o al grupo de telegram, para conocer los siguientes eventos que estaremos organizando y participando como comunidad.


Les dejo el link de la presentación, así como el archivo tlog de la sesión.

Espero les sirva…

by Alex Callejas at February 28, 2019 04:51 PM

RooTeando

Entrevista En Diferido 4: Juan Febles

Volvemos con una nueva Entrevista En Diferido, con un entrevistado bastante conocido en el ambito de Linux y software Libre. Entrevistamos a Juan Febles, podcaster de PodcastLinux y Linux Express, creador de proyectos como Maraton Linuxero, defensor del Linux y software libre.

En esta entrevista, Juan ha preferido responder mediante audios, donde en cada audio leía la pregunta y respondia . He pensado que la forma mas cómoda es juntar todos los audios y ponerlo ...

February 28, 2019 12:35 AM

February 27, 2019

Sobre bits

Mostrar conexión a vSphere en el prompt de PowerShell

Algo que me ocurre habitualmente cuando estoy trabajando es que acabo con varias consolas de PowerShell abiertas a la vez y al final me cuesta distinguir desde qué terminal estoy conectado a algún servidor vCenter y aún más determinar contra cuál estoy conectado. En la breve entrada de hoy os enseñaré cómo mostrar la conexión a vSphere en el prompt de PowerShell, que es como he solucionado este problema.

Mostrar conexión a vSphere en el prompt de PowerShell

Determinando a qué servidor estamos conectados

Antes de ponernos a personalizar el prompt de nuestra consola necesitamos saber contra qué servidor o servidores estamos conectados. Para hacerlo podemos valernos de la siguiente variable global que se asigna una vez nos conectamos a algún servidor vSphere: $global:DefaultVIServers. Lo bueno de $global:DefaultVIServers es que nos refleja si estamos conectados a un servidor, a múltiples servidores o no estamos conectados a ninguno. Veamos como se comporta:

Conectado a un servidor:

PowerCLI un servidor

Conectado a dos servidores:

PowerCLI dos servidores

Sin servidores conectados:

Sin conexiones PowerCLI


Mostrando la conexión a vSphere en el prompt de PowerShell

Ahora que ya tenemos claro dónde ir a buscar nuestra conexión de PowerCLI podemos pasar a modificar nuestro prompt.

Como vimos en la entrada Cómo personalizar nuestro perfil de PowerShell para hacer dicha modificación necesitamos crear una función especial llamada prompt. La función prompt es llamada cada vez que se muestra una nueva línea, por lo que después de cada comando se refrescará el estado de nuestro prompt. Vamos a ver cómo quedaría:

function prompt { 
    if ($global:DefaultVIServers) { 
        Write-Host "[PowerCLI: $(($global:DefaultVIServers.Name) -join (', '))] " -ForegroundColor DarkGreen -NoNewline 
        "PS $pwd>" 
    } 
    else { 
        "PS $pwd>" 
    } 
}

Vamos a diseccionar la función

  • Línea 2: Determinamos si existe contenido dentro de $global:DefaultVIServers.
    • 3:
      • Write-Host “[PowerCLI: Mostramos [PowerCLI al principio del prompt.
      • $(($global:DefaultVIServers.Name) -join (‘, ‘)): Juntamos los posibles nombres de los servidores vSphere y los separamos por comas.
      • -ForegroundColor DarkGreen -NoNewline: Cambiamos el color de la letra a DarkGreen e impedimos que se cree una nueva línea.
    • 4: Añadimos PS y el path donde estamos ubicados (el prompt clásico de PowerShell).
  • 6-8: En caso de que no exista contenido en $global:DefaultVIServers volvemos a establecer el prompt clásico de PowerShell (ésto es útil para restablecer el prompt al desconectar de un servidor).

¿Cuál sería el resultado de esto? Ahí va:

Prompt PowerShell servidor PowerCLI

Ahora con un simple vistazo podremos determinar si estamos conectados a algún servidor vSphere y saber concretamente a cual.

Bola extra: Mostrando la conexión a vSphere en el título de PowerShell

Además de mostrar la conexión a vSphere en el prompt de PowerShell podemos hacer lo propio en el título de nuestra ventana de terminal. Éste cambio podemos incorporarlo también a nuestra función prompt para que se refresque en cada nueva línea:

function prompt { 
    if ($global:DefaultVIServers) { 
        $host.ui.RawUI.WindowTitle = "PowerCLI: $(($global:DefaultVIServers.Name) -join (', '))" 
        Write-Host "[PowerCLI: $(($global:DefaultVIServers.Name) -join (', '))] " -ForegroundColor DarkGreen -NoNewline 
        "PS $pwd>" 
    } 
    else { 
        $host.ui.RawUI.WindowTitle = "Windows PowerShell" 
        "PS $pwd>" 
    } 
}

Como podemos ver simplemente hemos modificado dos líneas:

  • 3: Mostramos el mismo contenido que en nuestro prompt en el título de la terminal en el caso de que exista contenido en $global:DefaultVIServers.
  • 8: De no existir contenido en $global:DefaultVIServers mostramos el título clásico de PowerShell.

Y el resultado sería el siguiente:

Título PowerShell servidor PowerCLI

Conclusión

Con esto ya estaría todo, lo único que nos faltaría sería añadir el contenido de esta función a nuestro perfil de PowerShell para que éstas configuraciones apliquen en cada nueva ventana de terminal que abramos.

¡Espero que os haya sido útil!

La entrada Mostrar conexión a vSphere en el prompt de PowerShell aparece primero en Sobrebits.

by Marc Meseguer at February 27, 2019 04:01 PM

February 20, 2019

Sobre bits

Cómo crear un entorno de prueba para PowerCLI con govcsim

Un gran problema al que nos enfrentamos cuando realizamos cualquier tipo de desarrollo es el de tener una infraestructura de test contra la que probar nuestros avances (a no ser que tengamos ganas de hacer algún destrozo en una infraestructura productiva). En un desarrollo en PowerCLI puede resultar especialmente complicado puesto que deberemos disponer de servidores ESXi, vCenter y máquinas virtuales sobre las que testear, lo que nos supone una gran cantidad de recursos que no siempre es sencillo tener a mano. En la entrada de hoy vengo a presentaros govcsim (vCenter Server Simulator), un desarrollo que nos permitirá crear un entorno de prueba para PowerCLI muy liviano y portable.

Cómo crear un entorno de prueba para PowerCLI con govcsim

¿Qué es govcsim (vCenter Server Simulator)?

vCenter Server Simulator (govcsim) es un simulador open source de la API de vCenter y ESXi desarrollado en Go utilizando la librería govmomi. Lo que nos ofrece govcsim es un entorno vCenter/ESXi totalmente funcional sobre el que desarrollar nuestros scripts de PowerCLI sin la necesidad de desplegar todos los elementos citados en la introducción.

En este simulador encontraremos desde el primer momento los elementos típicos que componen dichas infraestructuras: datacenter, hosts, cluster, resource pools, redes y datastore. Podemos utilizar estos elementos para realizar todo tipo de operaciones que necesitemos como:

  • Desarrollar nuevos proyectos en PowerCLI u otro lenguaje que ataque contra la API de vSphere.
  • Realizar tests de nuestros desarrollos.
  • Probar desarrollos de terceros en un entorno seguro.
  • Aprender a utilizar PowerCLI de forma segura.

Cómo instalar vCenter Server Simulator

La forma más sencilla para instalar govcsim es utilizando un contenedor docker con la aplicación ya instalada. Gracias a ello podremos tener nuestro entorno de desarrollo en cualquier plataforma y de forma muy sencilla.

En esta entrada me centraré en el uso de govcsim mediante Docker Desktop for Windows, la forma más “nativa” de tener el entorno corriendo en sistemas Windows. Si no lo tienes instalado puedes seguir estas sencillas instrucciones.

Una vez tengamos nuestra plataforma Docker corriendo ejecutaremos el siguiente comando que ejecutará nuestro contenedor:

docker run --rm -d -p 443:443/tcp nimmis/vcsim:latest

Vamos a desgranar la línea:

  • docker run: Ejecutamos el contenedor.
  • –rm: Eliminamos el contenedor después de pararlo. (Esto es opcional pero nos ayudará a tener un entorno limpio cada vez que ejecutemos el contenedor)
  • -d: Ejecutamos el contenedor en modo “detached”, es decir, que corra en background.
  • -p 443:443/tcp: Exponemos el puerto 443TCP del host de docker al contenedor.
  • nimmis/vcsim:latest: Utilizamos la última versión de la imagen nimmis/vcsim para crear nuestro contenedor.

Una vez ejecutado el comando, si es nuestra primera vez, deberíamos ver algo parecido a la siguiente captura, en la que antes de ejecutar el contenedor descargamos la imagen:

Descarga contenedor govcsim

Con la ejecución del comando completada ya podemos ejecutar docker ps para ver que nuestro contenedor está corriendo en background:

docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
141543f1548c nimmis/vcsim:latest "/docker-entrypoint.…" 11 minutes ago Up 11 minutes 0.0.0.0:443->443/tcp gallant_rosalind

Utilizando nuestro entorno de prueba para PowerCLI

Antes de comenzar a utilizar nuestro contenedor debemos saber la IP de nuestro servidor docker. En nuestra instalación de Docker Desktop for Windows la forma más fácil de hacerlo es, como no, con PowerShell:

(Get-NetIPAddress -InterfaceAlias *docker* -AddressFamily IPv4).IPAddress

10.0.75.1

Con esto ya lo tenemos todo para conectarnos a nuestro flamante vCenter simulado:

Conectara govcsim con PowerCLI

Como podemos ver las credenciales por defecto de govcsim son:

  • Usuario: u
  • Password: p

Si investigamos un poco lo que nos ofrece este vCenter simulado veremos que tenemos todo lo que podamos imaginar de un vCenter normal:

Recursos govcsim

Y podemos realizar acciones que afecten al estado del “servidor” como parar una máquina virtual:

Apagar VM de govcsim

O poner un “nodo” en mantenimiento:

Nodo en mantenimiento govcsim

Conclusión

Desarrollar y testear nuestros scripts directamente contra una infraestructura VMware productiva nunca es una buena idea, por lo que os recomiendo muchísimo que le deis una oportunidad a vCenter Server Simulator, y generéis vuestro entorno de prueba para PowerCLI desde ya. Es sin duda la manera más segura de desarrollar en PowerCLI y con la que seguro que os ahorraréis más de un disgusto.

¡Nos vemos en la próxima!

La entrada Cómo crear un entorno de prueba para PowerCLI con govcsim aparece primero en Sobrebits.

by Marc Meseguer at February 20, 2019 01:00 PM

RooTeando

Tomando Un Café 52: Telegram no es WhatsApp

Nuevo audio, que grabe hace un tiempo y ahora publico, es una pequeña reflexión sobre Telegram, WhatsApp y las diferencias que hay entre estos dos programas y que uso que le podemos dar a cada uno.

Música: Podingtoon Bear- Piano I: Surface Tension 2

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython @EntrevistaEnDiferido
Podcast @RadioDev  @ARMparaTODOS @RadioDev

Grupos de Telegram
Alternativas a la Raspberry
https://t.me/AlternativasRaspberry

Twitter 
Podcast
https://twitter.com/Tomando_Un_Cafe ...

February 20, 2019 11:39 AM

February 17, 2019

www.rootzilopochtli.com

tlog – grabar sesiones en la terminal

One person can keep a secret, but not two
Ernest Cline, Ready Player One

Hace ya varios años, les recomendaba un muy buen complemento para sudo, con el cual se podía grabar la sesión que utilizaba dicho comando. La herramienta (sudosh) fue abandonada en 2006 y recuperada en 2 versiones, actualmente en github:

sudosh
sudosh2

Y aunque son buenas versiones, siempre sentí que no cumplían al 100% con lo que necesitaba, principalmente, porque al sustituir la shell con dichos programas, la experiencia de usuario disminuía, ya que en ocasiones no se ejecutaba correctamente y mandaba diversos errores que no le permitían trabajar de la mejor forma.

Recientemente, como parte del proyecto Scribery (Open-Source User Session Recording) se desarrolló tlog, un paquete de grabación y reproducción de I/O de terminal adecuado para implementar la grabación centralizada de sesiones de usuario.

Tlog no depende de sudo, lo cual simplifica mucho su instalación y uso. Para instalarlo, en mi caso, utilice el rpm proporcionado en github, pero también se puede clonar el repositorio y compilarlo para cada distribución.

Instalando el rpm:

[[email protected] ~]# dnf localinstall tlog-5-1.fc28.x86_64.rpm


Una vez instalado, para grabar una sesión ejecutamos:

[[email protected] ~]# tlog-rec --writer=file --file-path=tlogtest.log


A partir de entonces, todo lo que tecleemos en la terminal, incluso los errores y la corrección de los mismos, será grabada en el log.

Para salir de la grabación tecleamos:

[[email protected] ~]# exit


Para revisar la grabación de la sesión, ejecutamos

[[email protected] ~]# tlog-play --reader=file --file-path=tlogtest.log


Si quisiéramos grabar todas las sesiones de algún usuario en particular, primeramente personalizamos la configuración de la grabación y localización de los archivos en:

/etc/tlog/tlog-rec-session.conf


Y modificamos la shell que utilizará el usuario:

[[email protected] ~]# usermod -s /usr/bin/tlog-rec-session <user>

Espero les sirva… 🙂

by Alex Callejas at February 17, 2019 03:51 PM

February 16, 2019

RooTeando

Monográfico del canal de Telegram Un Día Una Aplicación

En mi canal de Telegram Un Dia Una Aplicación, @UnDiaUnaAplicacion, cada mes realizó un monográfico donde durante cinco días, Lunes a Viernes, cada día pongo una aplicación de un sola temática. A continuación muestro todos los monográficos que se han realizado en el canal.

Monográficos

 

Herramientas de programación

GitLab: https://about.gitlab.com/

Fabric: http://www.fabfile.org/

Ligth Table: http://lighttable.com/

Plastic SCM: https://www.plasticscm.com/

Repl.it: https://repl.it ...

February 16, 2019 12:11 AM

February 13, 2019

Sobre bits

Primeros pasos con PowerShell para Google Cloud Platform

Cuando alguien me pregunta si realmente merece la pena aprender a manejarse con PowerShell siempre uso como uno de los argumentos a favor el gran apoyo de los fabricantes sobre éste. Compañías como VMware, Veeam, Amazon o Google (además de la propia Microsoft) han creado módulos oficiales con los que administrar sus productos. En la entrada de hoy vamos a ver cómo empezar a utilizar PowerShell para Google Cloud Platform, la plataforma de cloud público de Google.

Primeros pasos con PowerShell para Google Cloud Platform

Un vistazo al módulo de PowerShell para Google Cloud

Las Cloud Tools for PowerShell, que es el nombre que da Google a su módulo, nos van a permitir interactuar con la sintaxis habitual de PowerShell y usar todas sus bondades directamente contra los servicios y recursos de nuestra cuenta de Google Cloud Platform.

Si bien no todos los productos de Google Cloud Platform están cubiertos en su módulo de PowerShell a fecha de hoy, podemos ver que existen cmdlets para una buena cantidad de ellos:

A fecha de hoy ésto supone una nada despreciable cifra de 144 cmdlets disponibles una vez hayamos instalado su módulo, que es lo que vamos a hacer a continuación.

Cómo instalar el módulo de PowerShell para Google Cloud

Para obtener éste módulo de PowerShell tenemos dos opciones:

  • Instalar el módulo mediante Install-Module y luego instalar el SDK de Google.
  • Instalar directamente el SDK de Google que también nos instalará el módulo de PowerShell.

Para esta entrada vamos a ir con la segunda opción, por lo que podemos dirigirnos a la página de descarga del SDK de Google para Windows y descargaremos y ejecutaremos el instalador.

La instalación básicamente es un siguiente > siguiente > siguiente, pero debemos fijarnos en que en la pantalla para elegir componentes tengamos marcado Cloud Tools for PowerShell:

PowerShell para Google Cloud

Y en la pantalla final también nos aseguraremos de dejar marcado Run ‘cloud init’ to configure the Cloud SDK para configurar nuestra conexión a Google Cloud Platform una vez finalice el asistente.

Iniciar gcloud init tras instalacion

Tras pulsar en Finish se iniciará gcloud init, el cuál nos preguntará si queremos logear en nuestra cuenta. Evidentemente introduciremos Y para logear:

Tras ésto se abrirá una nueva pestaña en nuestro navegador por defecto en la que deberemos logear con nuestra cuenta de Google y permitir el acceso que se nos solicita.

Una vez hecho deberemos volver de nuevo a nuestra pantalla de gcloud init en la que deberemos indicar:

  • Proyecto a utilizar.
  • Zona por defecto.

Y tras finalizar la configuración deberíamos recibir un mensaje indicando que la instalación de Google Cloud SDK se ha completado con éxito:

Your Google Cloud SDK is configured and ready to use!

Trasteando con el módulo de PowerShell para Google Cloud Platform

Ahora que ya lo tenemos todo listo podemos empezar a cacharrear con nuestros nuevos cmdlets. Si queremos ver una lista completa de los cmdlets disponibles podemos ejecutar:

Get-Command -Module GoogleCloud

Si queremos ver el detalle de la funcionalidad de algún cmdlet podemos acudir a la referencia del módulo o bien ejecutar Get-Help sobre alguno de ellos.

A partir de aquí toca trastear el módulo. Algo que podríamos querer hacer sería programar un backup de algún archivo o carpeta hacia nuestro Google Cloud Storage. El procedimiento para ello sería sencillísimo.

Primero creamos el bucket donde guardaremos nuestro backup con New-GcsBucket:

 
New-GcsBucket -Name "sobrebits" -StorageClass COLDLINE 

Name        TimeCreated         Updated 
----        -----------         ------- 
sobrebits   10/02/2019 21:34:30 10/02/2019 21:34:30 

Con -Name le damos nombre al bucket y con -StorageClass seleccionamos el tipo de almacenamiento del bucket.

Y posteriormente creamos un nuevo objeto en nuestro bucket con New-GcsObject utilizando el que queremos copiar:

 
New-GcsObject -Bucket sobrebits -File C:\Scripts\Archivo_para_backup.txt -ObjectName "Archivo_par a_backup$((Get-Date).Day)" 

Name                      Size ContentType TimeCreated         Updated 
----                      ---- ----------- -----------         ------- 
Archivo_para_backup10     0    text/plain  10/02/2019 21:44:12 10/02/2019 21:44:12 

Con -Bucket indicamos el bucket creado en el paso anterior, con -File el archivo que utilizaremos para nuestro nuevo objeto y con -ObjectName el nombre que le daremos al objeto en destino añadiendo el día del mes con Get-Date.

Con esto lo último que nos faltaría sería programar una tarea de PowerShell que ejecutara esta última línea cada día y ya tendríamos nuestro backup externalizado a GCP con PowerShell en 2 minutos.

Conclusión

Y hasta aquí esta entrada introductoria sobre PowerShell para Google Cloud Platform. En próximas entradas nos centraremos en algunos de los productos de GCP para ver qué somos capaces de hacer con PowerShell y qué posibilidades de automatización tenemos con éste módulo.

¡Os espero en la próxima!

La entrada Primeros pasos con PowerShell para Google Cloud Platform aparece primero en Sobrebits.

by Marc Meseguer at February 13, 2019 01:30 PM