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 鈥淏UCKET鈥, 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 鈥渞un鈥 y 鈥渕ake_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")"