Bases del sistema operativo

1

Lo que aprenderás sobre la administración de servidores linux

2

Distribuciones más utilizadas de Linux

3

Instalación de Ubuntu Server

4

Instrucciones para instalar CentOS

5

Gestión del árbol de directorios

6

Diferencias entre LESS, CAT, HEAD y TAIL para lectura de archivos

7

Interacción con archivos y permisos

8

Conociendo las terminales en linux

9

Manejo y monitoreo de procesos y recursos del sistema

10

Monitoreo de recursos del sistema

Instalación y manejo de software en Linux

11

Análisis de los parámetros de red

12

Administración de paquetes acorde a la distribución

13

Manejo de paquetes en sistemas basados en Debian

14

Administración de software con YUM y RPM para CentOS

15

Nagios: Desempaquetado, descompresión, compilación e instalación de paquetes

Administración de usuarios

16

Los usuarios, una tarea vital en el proceso de administración del sistema operativo

17

Creando y manejando cuentas de usuario en el sistema operativo

18

Entendiendo la membresía de los grupos

19

Usando PAM para el control de acceso de usuarios

Servicios en el sistema operativo

20

Autenticación de clientes y servidores sobre SSH

21

Configurando DNS con bind

22

Arranque, detención y recarga de servicios

23

NGINX y Apache en Ubuntu server

24

Instalación y configuración de NGINX

25

¿Qué es NGINX Amplify?

26

NGINX Amplify: Instalación y configuración de un servidor para producción

27

Monitoreo de MySQL con Nagios

28

Configuración de Nagios

29

Los logs, nuestros mejores amigos

30

Otros servicios de logs

Bash scripting

31

Las bases de bash

32

Las variables y su entorno de ejecución

33

Automatizando tareas desde la terminal

34

Automatizando la copia de seguridad

35

Crontab

Asegurando tu servidor

36

Entendiendo la gestión de vulnerabilidades

37

¿Qué es una superficie de ataque? Principio del menor privilegio

38

El firewall y sus reglas

39

Escaneo de puertos con NMAP y NIKTO desde Kali Linux

40

Lynis: Herramientas de auditoria de seguridad en Linux

Proyecto

41

Configuración de Node.js en un ambiente productivo

42

Configuración de NGINX para la aplicación de Node.js

Bonus: Linux en Azure

43

Aprende sobre Linux en Azure

44

Despliegue de una aplicación web MEAN

45

Crea una máquina virtual en la nube de Azure

Conclusiones

46

Lo que aprendiste sobre servidores linux

Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Automatizando la copia de seguridad

34/46
Recursos

Aportes 44

Preguntas 10

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

RESUMEN DE LA CLASE
|
Automatizando la copia de seguridad
|
|
Script final
|

  • Generar backup de base de datos MySQL
#!/bin/bash
# Shell script para obtener una copia desde MySQL
# Desarrollado por Jhon Edison

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

set -e

readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
readonly SCRIPT_NAME="$(basename "$0")"

run
make_backup

function assert_is_installed {
	local readonly name="$1"
	if [[ ! $(command -v ${name})]]; then
		log_error "The binary '$name' is required but it isn't in 		our system"
		exit 1
	fi
}

function log_error {
	local readonly message "$1"
	log "ERROR" "$message"
}

function  log {
	local readonly level="$1"
	local readonly message="$2"
	local readonly timestamp=$(date +"%Y-%m-%d %H:%M:%S") >&2 echo -e "${timestamp} [${level}] [$SCRIPT_NAME] ${message}"
		
}

function run {
	assert_is_installed "mysql"
	assert_is_installed "mysqldump"
	assert_is_installed "gzip"
	assert_is_installed "aws"
}

function make_backup {
	local BAK="$(echo $HOME/mysql)"
	local MYSQL="$(which mysql)"
	local MYSQLDUMP="$(which mysqldump)"
	local GZIP="$(which gzip)"
	local NOW="$(date +"+%d-%m-%Y")"
	local BUCKET="xxxxx"
	
	USER="xxxxxx"
	PASS="xxxxxx"
	HOST="xxxxxx"
	DATABASE="xxxxxx"

	[! -d "$BAK" ] && mkdir -p "$BAK"

	FILE=$BAK/$DATABASE.$NOW-$(date +"%T").gz
	local SECONDS=0
	
	$MYSQLDUMP --single-transaction --set-gtid-purged=OFF -u $USER -p $PASS -h $HOST $DATABASE | $GZIP -9 > $FILE

	duration=$SECONDS
	echo "$($duration / 60) minutes"
	aws s3 cp $BAK "s3://$BUCKET" --recursive
}

Como recomendación para no perder tiempo: las personas que ya entienden BASH intenten hacer el código por ustedes mismos y refuercen los conocimientos. SI no saben nada o casi nada de BASH. Solo copie y pegue el script de los archivos y enlaces, pruebe que funciona y sigua a la siguiente clase.

Curso obligado: Programación en Bash!!

Creo que hizo muy largo el script, debio ser de menos a mas

Si el curso de programación en Bash no es obligatorio antes de empezar este curso, deberían de dar ejemplos más sencillos de seguir. Lo peor de todo es que el ejemplo esta basado en almacenamiento de AWS… Pésimo!!! En lo personal, este curso empezó a perder mi interés antes de la clase 20.

Mucha perdida de tiempo dos clases con un script confuso y peor aún que no demostró la ejecución xD

Tampoco entendí ni papá xD no se de programación en si.

¿Enserio no lo corrio? mal ahi

con esto finalizamos el teclear lo que dice sin saber que hace

Emmm. ¿Qué era lo que tenía que aprender en este video? XD Ya me perdí.

creo que el curso de bash scripting iba antes de este hehe

Hmm… entiendo cómo funciona, pero no veo en qué momento toma las credenciales de S3, tendré que mirar el curso de S3

Cabe mencionar que es es mejor ofuscar el script Bash que se creo para el backup de la base de datos ya que es una mala practica almacenar password dentro de un Shell para ejecución.

Aquí un enlace que puede ser de interés. Ofuscar en Bash

Muy bonito y todo, pero qué le costaba ejecutarlo? Era sencillo poder ver que se ejecutara bien todo el script.

No soy especialista en bash, quiero especializarme en esto parte de todo lo que necesito aprender. Pero considero que no se está explicando bien el porque de las cosas. La idea es que todos podamos pasar los módulos con el aprendizaje correcto pero por ejemplo ese escript no me funcionó. Continúaré pero tengo muchas dudas y la idea si es una ruta de aprendizaje que el material y la explicación nos generen conocimientos de base bastante sólidos. Mi recomendación es a parte de sugerirnos lecturas y recomendaciones, profundicen en los temas.

Se te fue la mano con el tema de los Scripts

Falto la ejecución y verificación del codigo, lo unico que automatice fue copiar y pegar

sinceramente creo que dejaré este curso hasta aquí, no estoy entendiendo nada, aprendí algunas cosas sobre nginx, apache2, control de servicios, monitoreo de procesos y a copiar y pegar lo que el profesor dice sin saber para que sirve, de ahí nada mas, de las 34 clases que llevo siento que solo 10 me han dejado cosas de valor, de ahí en mas solo siento que fue todo una perdida de tiempo, y estoy seguro que no soy el único que piensa así, muy mal el curso la verdad, y el profesor pues lo intento, pero no se da a explicar en el 75% de cosas que hace.
cada clase que tomé en este curso eran 2 horas de busqueda por mi cuenta en internet para tratar de entender que es lo que estaba haciendo, la verdad hasta aquí llego yo.
Espero que pronto actualizen este curso, o que al menos el siguiente profesor explique mas a detalle todo lo que hace.

Como recomendaciones, las instrucciones:

run
make_backup

ponerlas al final del código, y en la instrucción:

$MYSQLDUMP --single-transaction --set-gtid-purged=OFF -u $USER -h $HOST -p$PASS $DATABASE | $GZIP -9 > $FILE

hay que tener en cuenta que

-p$PASS

debe estar sin espacios. Lo digo porque con esos cambios pude ejecutar el código.

Agrego el código que me funciono en la vm de centos, no tengo servicio de aws, asi que lo saque del script:

#!/bin/bash
# Shell script para obtener una copia desde MySQL
# Desarrollado por WL

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

set -e

readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
readonly SCRIPT_NAME="$(basename "$0")"

function assert_is_installed {
        local readonly name="$1"
        if [[ ! $(command -v ${name}) ]]; then
                log_error "The binary '$name' is required but it isn't in our system"
                exit 1
        fi
}

function log_error {
        local readonly message "$1"
        log "ERROR" "$message"
}

function  log {
        local readonly level="$1"
        local readonly message="$2"
        local readonly timestamp=$(date +"%Y-%m-%d %H:%M:%S") >&2 echo -e "${timestamp} [${level}] [$SCRIPT_NAME] ${message}"

}

function run {
        assert_is_installed "mysql"
        assert_is_installed "mysqldump"
        assert_is_installed "gzip"
}

function make_backup {
        local BAK="$(echo $HOME/mysql)"
        local MYSQL="$(which mysql)"
        local MYSQLDUMP="$(which mysqldump)"
        local GZIP="$(which gzip)"
        local NOW="$(date + "+%d-%m-%Y")"
        local BUCKET="xxxxx"

        USER="xxxx"
        PASS="xxxx"
        HOST="localhost"
        DATABASE="test"

        [ ! -d "$BAK" ] && mkdir -p "$BAK"

        FILE=$BAK/$DATABASE.$NOW-$(date +"%T").gz

        local SECONDS=0

        $MYSQLDUMP --single-transaction -u $USER -h $HOST -p$PASS $DATABASE | $GZIP -9 > $FILE

        duration=$SECONDS
        echo "$(($duration /60)) minutes"
}

run
make_backup

Me perd[i un poco sobre todo en la definición de la variable “BUCKET”, osea no se que poner en ese parámetro para el resto del script.

Quedaron muchas dudas, se asume que el alumno sabe de script y al menos en mi caso, no es asi. Proximo curso, Bash script

una verguenza. Se supone q debe de enseñar no hacer un fichero de script sin ni siquiera probarlo. tela… Así damos clases todos.

mal que ni lo haya ejecutado >:c

Muy lindo ambos scripts y todo, pero al final no demuestra la ejecución de ambos, con lo que me queda duda de sí de verdad funcionaron. Sí encontré como hacerlos funcionar al final, pero creo que muchos se quedarán igual.

Creo que es muy necesario que el ejercicio se haga completo y se vean los resultados. Si es un curso de enseñanza ¿porque no usar un usuario y clave dummy?

Solo espero que nada de esto salga en el examen 😦

estoy mas familiariado en realizar backaups con herramientas, hasta ahora no he tenido problemas, pero muy util

No entiendo el porque la necesidad de llevar la copia de seguridad a amazon s3

Yo no guardiaria el password en el script lo ofuscaria

Por si se perdieron

Veo bastantes comentarios al respecto de que no se ha entendido el script… honestamente creo que este curso es de aspecto avanzado no para alguien que comience su camino. y en este punto tu deberías de saber acerca de:

  • programación básica: si administras un servidor debe ser por que expones un aplicativo
  • bases de datos: se presenta mysql en el curso por que es la mas común, dudo que alguien comiece programando con MongoDB, Redis, etc. por lo que no cuesta pensar que el estudiante lo sepa
  • variables de entorno: usualmente utilizadas para configurar tus aplicaciones y no esten quemadas en el codigo
  • existencia de la nube: no un experto pero mas de una vez alguien habra escuchado de los servicios en la nube, y probablemente comenzo desplegando un servidor en heroku

Ahora bien el objetivo del script no es enseñar bash (ya hay un curso para eso) sino presentarlo y mostrarte un ejemplo practico de lo que se puede hacer con el, para que tu lo investigues por tu cuenta

El script no muestra mas que definicion de variables, creacion y llamado de funciones, condicionales, impresión en consola, concatenación (donde aprovecha las variables de entorno), cosas que si tu ya tienes bases de lo antes mensionado solo es cuestion de verlo y comprenderas lo que trada de dar a entender, sin importar que la sintaxis no la conozcas, tu ves una sentencia if y tu sabes que es una condición a pesar que no se escriba como en el lenguaje que utilizas

En resumen creo que si alguien se siente perdido debería probar los cursos de programación antes, y luego regresar, no se puede abordar las mismas cosas en todos los cursos ya que se haría demasiado largo y alguien que si tenia esos conocimientos previos necesarios

Nos quedamos con las ganas de verlo correr.

Lo que yo hice fue eliminar las líneas de BUCKET, simplemente guardarlo en local. Otra cosa es exportar la pass de usuario de mysql como variable de entorno y no guardarlo en el script.
export PASSUSERSQL="tu_password"
reiniciar bash
source ~/.bashrc
Luego en el script:
PASS=$PASSUSERSQL

Para poder probar el codigo si es funcional, pueden hacerle backup a una base que ya existe como por ejemplo yo coloque la de mysql, obviamente deberian tener un usuario con maximos privilegios (GRANT ALL PRIVILEGES), y el codigo quedaria de la siguiente manera:

#!/bin/bash
# Shell script para obtener una copia desde MySQL
# Desarrollado por ejemplo de platzi:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

set -e 

readonly SCRIPT_DIR="$(cd $(dirname ${BASH_SOURCE[0]} ) && pwd)"
readonly SCRIPT_NAME="$(basename ${0})"

function assert_is_installed {
        local readonly name="$1"

        if [[ ! $(command -v ${name}) ]]
        then
                log_error "El binario '${name}' se requiere pero no esta disponible"
                exit 1
        fi
}

function log_error {
        local readonly message "$1"
        log "ERROR ${message}"

}

function log 
{
        local readonly level="$1"
        local readonly message="$2"
        local readonly timestamp="$(date +'%Y-%m-%d %H:%M:%S')" >&2 echo -e "${timestamp} [${level}] [${SCRIPT_NAME}] ${message}"

}

function run {
        assert_is_installed "mysql"
        assert_is_installed "mysqldump"
        assert_is_installed "gzip"
        #assert_is_installed "aws"

}

function make_backup
{
        local BAK="$(echo $HOME/mysql)"
        local MYSQL="$(which mysql)"
        local MYSQLDUMP="$(which mysqldump)"
        local GZIP="$(which gzip)"
        local NOW="$(date +'%d-%m-%Y')"
        local BUCKET="xxxxx"

        USER="admin"
        PASS="admin07Y."
        HOST="localhost"
        DATABASE="mysql"

        [ ! -d "$BAK" ] && mkdir -p "$BAK"

        FILE="${BAK}/$DATABASE.$NOW-$(date +'%T').gz"

        SECONDS=0

        $MYSQLDUMP --single-transaction --set-gtid-purged=OFF -u $USER -h $HOST -p$PASS $DATABASE | $GZIP -9 > $FILE

        duration=$SECONDS

        echo "$((${duration} / 60)) minutes"
        echo "ARCHIVO DE RESPALDO : ${FILE}"
}

run
make_backup

No me funciona, copie el ejemplo que está en los enlaces y copie lo que sé mostró en los dos videos. Debería revisar la funcionalidad.

./copia_sql.sh: line 12: run: command not found

¿Hay forma de encriptar el usuario y la contraseña?

El script es muy útil, gracias

bueno aun no me anda por q no esta el aws

buenos comandos nuevos… gracias 😃

Me parece que en la última línea en vez de que diga cp $BAK, debería decir cp $FILE

Muy interesante.

Comparto mi script que saca el backup de una BD:

#!/bin/bash
#@cocoPaivaPeru
#saca backup de la BD de prueba
clear
echo sacando backup…

fecha=$(date +"%F%T")
sudo mysqldump -u root -pclavesecreta dbprueba > bak_dbprueba_"$fecha".sql

Me funcionó! Tuve que comentar la parte de AWS porque no lo tengo instalado, y tuve que mover la llamada a las funciones “run” y “make_backup” al final del codigo porque me reportaba que tales funciones no estaban declaradas. Al corregir eso ya empezó a funcionar.

Otra forma de obtener el directorio del script:

readonly SCRIPT_DIR="$(readlink -f "$0")"