Bases del sistema operativo

1

Aviso de renovación del curso

2

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

3

Distribuciones más utilizadas de Linux

4

Instalación de Ubuntu Server

5

Instrucciones para instalar CentOS

6

Gestión del árbol de directorios

7

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

8

Interacción con archivos y permisos

9

Conociendo las terminales en linux

10

Manejo y monitoreo de procesos y recursos del sistema

11

Monitoreo de recursos del sistema

Instalación y manejo de software en Linux

12

Análisis de los parámetros de red

13

Administración de paquetes acorde a la distribución

14

Manejo de paquetes en sistemas basados en Debian

15

Administración de software con YUM y RPM para CentOS

16

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

Administración de usuarios

17

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

18

Creando y manejando cuentas de usuario en el sistema operativo

19

Entendiendo la membresía de los grupos

20

Usando PAM para el control de acceso de usuarios

Servicios en el sistema operativo

21

Autenticación de clientes y servidores sobre SSH

22

Configurando DNS con bind

23

Arranque, detención y recarga de servicios

24

NGINX y Apache en Ubuntu server

25

Instalación y configuración de NGINX

26

¿Qué es NGINX Amplify?

27

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

28

Monitoreo de MySQL con Nagios

29

Configuración de Nagios

30

Los logs, nuestros mejores amigos

31

Otros servicios de logs

Bash scripting

32

Las bases de bash

33

Las variables y su entorno de ejecución

34

Automatizando tareas desde la terminal

35

Automatizando la copia de seguridad

36

Crontab

Asegurando tu servidor

37

Entendiendo la gestión de vulnerabilidades

38

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

39

El firewall y sus reglas

40

Escaneo de puertos con NMAP y NIKTO desde Kali Linux

41

Lynis: Herramientas de auditoria de seguridad en Linux

Proyecto

42

Configuración de Node.js en un ambiente productivo

43

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

Bonus: Linux en Azure

44

Aprende sobre Linux en Azure

45

Despliegue de una aplicación web MEAN

46

Crea una máquina virtual en la nube de Azure

Conclusiones

47

Lo que aprendiste sobre servidores linux

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripción 🔥

Aprende todo un fin de semana sin pagar una suscripción 🔥

Regístrate

Comienza en:

5D
13H
7M
57S

Automatizando la copia de seguridad

35/47
Recursos

Aportes 47

Preguntas 11

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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!!

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.

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

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

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

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

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

¿Enserio no lo corrio? mal ahi

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

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

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

Se te fue la mano con el tema de los Scripts

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.

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

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.

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

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.

Solo espero que nada de esto salga en el examen 😦

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

Por si se perdieron

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?

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

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

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

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

The script appears to be a Bash script for performing a MySQL database backup and sending the backup file to Amazon S3. The script performs the following steps:

It first defines a number of functions that are used later in the script, including log_error for logging error messages, assert_is_installed for checking if a required binary is installed, and make_backup for creating the backup file.

It then calls the run function, which checks if the required binaries (mysql, mysqldump, gzip, and aws) are installed and available in the system’s PATH. If any of these binaries are not found, the script will exit with an error message.

The make_backup function is then called, which performs the following steps:

It sets some local variables for the backup directory, MySQL and mysqldump binary paths, and backup file name.

It checks if the backup directory exists, and if not, creates it.

It creates the backup file by running the mysqldump command with the specified options (–single-transaction, --set-gtid-purged=OFF, -u, -h, -p, and -P), which dump the specified database to the gzip command, which compresses the output and saves it to the specified backup file.

It logs the duration of the backup process.

It copies the backup file to the specified S3 bucket using the aws s3 cp command.

The script is intended to be run on a Unix or Linux system with the specified binaries installed and available in the PATH. It will create a MySQL database backup and send the backup file to the specified Amazon S3 bucket

Osea, mas de 20 minutos haciendo un script en bash (lenguaje que desconocemos) y no ejecutó el script. Osea que tenemos que adivinar como hacer que funcione y rogar que no tenga otro error como los que corrigió al final del video. Y de paso enlazarlo a aws (cosa que también desconocemos como funciona). Está muy bien ponerle retos a los alumnos, pero al menos debes explicarlos,🤦‍♂️

No entendí

Nos quedamos con las ganas de verlo correr.

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")"