aboutsummaryrefslogtreecommitdiff

./deployhugo.sh

Acerca de

Normalmente, cuando mantenemos un sitio web estático generado con hugo cada vez que hacemos cambios en el sitio, agregamos una página o escribimos una nueva entrada (si se trata de un blog, por ejemplo) debemos dar varios pasos para publicar esos cambios en la web. Comunmente llamamos a esa tarea despliegue del sitio y consiste a lo menos en tres pasos:

Ejecutar hugo en el directorio de trabajo: cd mi_sitio && hugo. Copiar el directorio public/ al directorio de publicación: rsync -avzh public /var/www/mi_sitio/public. Finalmente, darle permisos a nuestro servidor web para leer el contenido del directorio: chown www-data:www-data -R /var/www/mi_sitio/public. Si todo sale bien y hemos hecho estos pasos de manera sistemática habremos ganado algo de tiempo.

./deployhugo.sh es un script escrito para bash que automatiza todo el proceso de despliegue del sitio, de tal manera que con un único comando tengamos nuestro sitio publicado sin sobresaltos. Además, si el directorio raíz del virtualhost se encuentra en un servidor remoto basta con pasarle una opción (-s) con su respectivo argumento (usuario@host:/ruta) para que el script le pase a rsync los argumentos necesarios para enviar los archivos mediante el protocolo ssh.

Requisitos

Un servidor con acceso ssh (sólo cuando remoto), privilegios de escritura y ejecución en el directorio de trabajo del sitio generado por hugo (directorio de trabajo) y privilegios de escritura en el directorio de publicación.

Uso

./deployhugo.sh [OPTIONS] <args> ...

Options

  -w    path: directory where hugo sites resides (hugo command will be executed here)

  -d    path: destination directory, i.e: /var/www/mysie. Do not use this with -s option

  -s    [user]@host:/path: if destination is on a remote server it parses args to rsync ssh protocol

  -v    VERBOSE: increase verbosity

  -h    HELP: print this help


Use "hugo --help" to see the hugo static site generator help or visit https://gohugo.io for full description.

Use "rsync --help" to see help for this command or visit https://rsync.samba.org

Ejemplo:

$ ./deployhugo.sh -w mi_sitio -d /var/www/mi_sitio/public

Running ./deployhugo.sh with -w mi_sitio -d /var/www/mi_sitio/public options
Executing hugo into mi_sitio
synchronizing mi_sitio/public into /var/www/mi_sitio/public
Started building sites ...
Built site for language es-es:
2 of 3 drafts rendered
1 future content
0 expired content
11 regular pages created
86 other pages created
0 non-page files copied
39 paginator pages created
3 categorias created
2 autores created
32 etiquetas created
total in 124 ms
Contraseña:

+++

./tellmewhoisssh.sh

Acerca de

.tellmewhoisssh.sh es un script para bash para ssh hardening basado en el script ./piluso.sh. De la misma manera que aquel, cada vez que un comando ssh es ejecutado en el servidor, ya sea un inicio de sesión o un comando rsync, git o netcat (por ejemplo, en entornos multihop), el script envía un mensaje, pero en este caso lo envía a un chat de telegram (@chat_id) utilizando la api bot de telegram.

Requisitos

No hace falta decir que se requiere un servidor ssh configurado y funcionando en el que se posean privilegios de usuario root. Una cuenta de usuario en telegram y/o un grupo preferentemente privado como destinatario del mensaje también es requerido. Por supuesto, debe crearse y configurarse un bot telegram y obtener el correspondiente token para utilizar la api pública de telegram para enviar el mensaje (para mayor información, referirse a Bots: An introduction for developers y Telegram APIs.

Instalar y configurar

Descargar el script o clonar el repositorio en un directorio local. Colocar el script en la ruta /usr/local/bin/tellmewhoisssh.sh y darle permisos de lectura y ejecución para propietario, grupo y otros.

$ git clone https://git.p4g.club/git/ziggyscripts

$ cp ziggyscripts/tellmewhoisssh.sh /usr/local/bin/

$ chmod ugo+rx /usr/local/bin/tellmewhoisssh.sh

Editar el script añadiendo la información correspondiente al token y chat_id. Personalizar el mensaje para cada caso según tus preferencias.

$ su -c "vim /usr/local/bin/tellmewhoisssh.sh"

    TOKEN="123456789:ABCDEFG..."
    CHAT_ID="@supergroup"
    (replace @supergroup with your user id or group id)

    ...

    'rsync --server'*)
    COMMAND=$SSHORIGINALCOMMAND
    MESSAGE="Personalized message"

    ...

Para activar la ejecución del script debe editarse el archivo /etc/ssh/ssd_config/ añadiendo la línea ForceCommand.

$ su -c "vim /etc/ssh/sshd_config

    ...

    ForceCommand /usr/local/bin/tellmewhoisssh.sh

    ...

Por último, reiniciar el servicio ssh para cargar los cambios.

+++

./beto.sh

Acerca de

./beto.sh es un script bash que utiliza la herramienta sendxmpp junto con openssl para verificar la expiración de un certificado x509 y notifcarnos a través de un mensaje a una sala de chat jabber utilizando el protocolo xmpp de manera que podamos renovarlo oportunamente antes de experimentar problemas en con los servicios que utilizan SSL.

El script notificará por defecto el día mismo del vencimiento del certificado, pero además contiene una variable (DAYSTONOTIFY) que nos permite configurar una cantidad de días previos a la fecha de expiración.

Requisitos

Por supuesto es requisito para ejecutar el script contar con una cuenta de usuario jabber y con acceso a una sala de chat (importantísimo que sea privada, por razones obvias). Además, como es obvio también, debemos contar con un certificado x509 que verificar.

El script ha sido puesto a prueba con certificados emitidos por la autoridad certificadora letsencrypt y con certificados autogenerados con openssl. Certificados de otras autoridades pueden requerir configuraciones adicionales en el script o modificación de los comandos que utiliza para dar valor a las variables.

Si se desea automatizar la ejecución del script debe contarse con alguna herramienta que realice esta tarea. Nosotros usamos cron.

Instalar y configurar

En este caso se utilizará una tabla de cron (crontab) para ejecutar la verificación diariamente. Para esto, se debe descargar el script o clonar el repositorio completo en un directorio local, copiarlo al directorio /etc/cron.daily/ y darle permisos de ejecución (por un tema de ejecución de cron, el archivo en cron.daily no posee la extensión .sh)

$ git clone https://git.p4g.club/git/ziggyscripts

$ cp ziggyscripts/beto.sh /etc/cron.daily/beto

$ chmod +x /etc/cron.daily/beto

Ahora debemos editar el script para añadir la información correspondiente a nuestro certificado, los datos de la cuenta de usuario, contraseña, sala de chat y recurso, y por último los días previos a la expiración que deseamos ser notificados. Por ejemplo:

$ vim -c "/etc/cron.daily/beto

  ...

  # main variables to edit
  CERT="/etc/letsencrypt/live/mi_dominio.dom/fullchain.pem"
  USER="usuario@conversations.im"
  PASSWORD="secreto"
  CHATROOM="notificaciones@salas.conversations.im"    # importantísimo: debe ser una sala privada
  RESOURCE="beto"
  DAYSTONOTIFY="7"

  ...

  # editar el mesaje si se desea y otras variables si es requerido

Crontab

Verificar que la tabla de cron posea la línea de ejecución correcta para los scripts en /etc/cron.daily. Si no está la línea o está errónea, basta con añadirla o editarla respectivamente modificando el archivo /etc/crontab.

$ vim -c "/etc/crontab"

  ...

  # ejecutar todos los scripts contenidos en el directorio /etc/cron.daily cada día a las 12:30hs
  30 12  * * *  root   cd / && run-parts --report /etc/cron.daily

  ...

Con esto ya tendremos nuestro script verificando la expiración del certificado cada día y notifcándonos (en el ejemplo) 7 días antes que expire y luego, por supuesto, el mismo día.

+++

Licencia

Este repositorio y todo su contenido se distribuye bajo una Licencia BSD 2.0 (3-Clause BSD License)

# Licence BSD License 2.0 (3-Clause)
#Copyright (c) 2017, 2018 ziggys
#All rights reserved.

#Redistribution and use in source and binary forms, with or without
#modification, are permitted provided that the following conditions are met:
#    * Redistributions of source code must retain the above copyright
#      notice, this list of conditions and the following disclaimer.
#    * Redistributions in binary form must reproduce the above copyright
#      notice, this list of conditions and the following disclaimer in the
#      documentation and/or other materials provided with the distribution.
#    * Neither the name of the <organization> nor the
#      names of its contributors may be used to endorse or promote products
#      derived from this software without specific prior written permission.

#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
#ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
#WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
#DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
#DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
#(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
#LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
#ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
#(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
#SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+++