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 鈥淏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

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鈥檚 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 (鈥搒ingle-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 鈥渞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")"