You are on page 1of 28

ADMINISTRACION DE SERVIDORES

LINUX
Índice:

1- INTRODUCCION A LINUX:

1-1 ¿Por qué se usa Linux en servidores?

1-2 Configuración y guía básica usando VirtualBox

1-3 Iniciar un servidor Linux con AWS

1-4 Manejo de sesiones remotas con Tmux y SSH

1-5 Editores de texto en Linux

1-6 Editar archivos con VIM

2- INSTALACION Y CONFIGURACION DE PROGRAMAS:

2-1 Añadir y administrar repositorios

2-2 Instalar, actualizar y remover programas en Linux

2-3 Empaquetar y comprimir archivos en Linux

2-4 Compilar un programa en Linux

2-5 Donde encontrar la documentación de los programas

2-6 Gestores de paquetes en Linux

3-ADMINISTRACION DE PARTICIONES Y ARRANQUE:

3-1 Estructura de archivos en Linux

3-2 Administrar discos y particiones en Linux

3-3 Formateo y montaje de particiones en Linux

3-4 Administración de swap en Linux


3-5 Generar imágenes de discos duros

3-6 Administrar particiones GPT

3-7 Administrar el arranque del sistema GRUB

3-8 Administrar discos duros con LVM

3-9 Apagar servidores de forma remota

4- EL SISTEMA Y LO QUE HAY QUE HACER:

4-1 Arrancando el sistema runlevels, systemd

4-2 Uso de variables de entorno, bashrc, profile

4-3 Uso de redireccionamiento y pipes para logs

4-4 Monitorear, eliminar y establecer prioridades en procesos

4-5 Enlaces duros, simbólicos y sistemas de backups

4-6 Manejo de usuarios y grupos

4-7 Generar backup de Base de Datos

4-8 Uso de socat y manejar de redireccionamiento de puertos

4-9 Tareas programadas y como monitorearlas

5- Administración:

5-1 Seguridad del Kernel

5-2 Permisos de archivos

5-3 Configuracion de interfaces de red

5-4 Como manejar mi firewall

5-5 Manejo de DNS y dig

5-6 Instalación de NTP

5-7 Auditoria de login y logs


5-8 Túneles con SSH, AutoSSH y socat

5-9 Backup de archivos de configuración con etckeeper

5-10 Prevenir ataques con fail2ban

6- Contenido Bonus:

6-1 Encriptación de datos

6-2 Encontrar el dueño del paquete

6-3 md5sum, integridad de archivos y paquetes

6-4 Como podemos monitorear servidores


1-Introduccion a Linux

1-1 ¿Por qué se usa Linux en servidores?


Lo común de Facebook, Google, NASA y Platzi, es que todos utilizan servidores con
GNU/Linux.

GNU /Linux, es un sistema operativo que está enfocado por 2 partes; La parte principal que es
el kernel desarrollado por la fundación Linux y los compiladores desarrollados por la
comunidad GNU

Hoy las personas usan Linux directa e indirectamente en muchos dispositivos y maquinas
como locomotoras, celulares, cohetes, computadoras, GPS, autos-inteligentes y los servidores
que ejecutan los servicios de empresas como Facebook, Google, Youtube.

5 RAZONES PARA USAR LINUX:

-Costos: Cualquier usuario puede tener acceso al código fuente, modificarlo de manera
gratuita, instalarlo en computadoras o servidores.

-Comunidad: Trabaja en Open Source, la comunidad contribuye para mantener actualizado


Linux.

-Seguridad: Aunque Linux no sea inmune, la velocidad de respuesta es superior a otros


sistemas.

-Estabilidad: Su gran estabilidad y tiempo de respuesta lo hace casi perfecto.

-Flexibilidad: Hay todo tipo de distribución, para cada tipo de usuario.


1-2 Configuracion y guía básica de VirtualBox
Vamos a configurar nuestra máquina virtual con VirtualBox, utilizaremos la versión 16.04 de
Ubuntu.

Recuerda debes tener instalado VirtualBox y dentro del programa darle la opción de File
import y seleccionar la imagen de Ubuntu que hayas descargado. El usuario: Ubuntu |
Contraseña: ubuntu123

Para poder conectarnos a la máquina virtual, dentro de los Settings (Preferencias) en la


seccion de Network debes seleccionar Bridge Adapter (Adaptador Puente) y la interfaz de red
que vas a usar. Podemos primero crear una nueva interfaz en Settings > Network > Creamos
una red vboxnet0.

Una vez tengas conexión entre las 2 máquinas (Puedes hacer un ping IP_ASIGNADA para
comprobar que hay conexión) podemos configurar para conectarnos vía SSH.

Autenticarse:
Una opción es iniciar con el usuario ubuntu usando el comando # ssh ubuntu@IP_A_Conectar

Recuerda usar IP que se asigne al servidor, PERO USAR USUARIO Y CONTRASEÑA NO


ES UNA FORMA CORRECTA DE CONECTARSE A UN SERVIDOR.

Crear llaves:
Dentro del Host debemos crear una llave para podernos conectar, lo hacemos con el
comando #ssh-keygen -b 4096 -> (Donde la opción de -b es la cantidad de bits a usar),
esta instrucción creara llaves en RSA.

Al crear esto se crean dos imágenes, una pública y una privada, NUNCA COMPARTAS LA
PRIVADA.

Ahora debemos subir la imagen pública al servidor, esto lo podemos hacer con # ssh-copy-
id -i .ssh/id_rsa.pub ubuntu@192.168.56.101 es hora de volver a conectarte al
servidor.

Desactivar opción con contraseña:


Para poder desactivar el entrar el sistema remoto con contraseña debemos abrir el archivo
/etc/ssh/sshd_config recuerda que requieres permisos de superusuario.

Buscamos la opción PasswordAuthentication y le configuramos el valor no.

Reiniciamos el servicio de ssh con # sudo /etc/init.d/ssh restart


1-3 Iniciar un Servidor Linux en AWS
Usando plataformas como AWS (Amazon Web Services), podemos tener servidores de
manera fácil, permitiendo iniciar un servidor en cuestión de minutos. Para iniciar con Amazon
debes entrar a su sitio web y realizar su registro.

Iniciar una instancia:


Una vez dentro del Dashboard, encontraras el menú izquierdo una seccion llamada Instances,
al ingresar en esta opción seleccionamos Crear una nueva instancia.

Seleccionamos el Sistema Operativo en este caso Ubuntu Server 16.04.

Dejamos seleccionada la instancia por defecto. igual que en la configuración de los detalles.

El Disco Duro lo dejamos de 8 GB, usando un disco SSD.

Al configurar el Security Group, debes crear un nuevo grupo, seleccionando los puertos a
usar, en este caso serán los puertos: 22, 80, 443, 8080.

Al tener definida toda la configuracion, lanzamos la instancia.

Conectarse a la instancia:
Las llaves nos permiten conectarnos al servidor, al lanzar la instancia nos da la opcion de
crear una nueva llave y descargarla al ordenador.

ES MUY MALA PRACTICA COMPARTIR LA MISMA LLAVE EN VARIAS COSAS.

Para conectarnos al servidor podemos usar el comando:

# ssh -i [Nombre de la llave] [usuario] @ [IP_Servidor]


Recuerda que en el Dashboard puedes ver la IP asignada a tus instancias.

Al conectarte por primera vez te pedirá aceptar una verificación y mostrará una alerta de
seguridad relacionadas con permisos de la llave, para solucionar esto debemos buscar la llave
y cambiarle los archivos con # chmod 600 Llave.pem

Intenta conectarte de nuevo y ya estarás dentro del servidor.

¡1 LLAVE ES UNICA, DIFERENTE Y SI LA PIERDES NUNCA MAS LA RECUPERARAS!!!


1-4 Manejo de sesiones remotas con Tmux y SSH
Las llaves SSH son las más importantes para un administrador de servidores, estas nos
permiten conectarnos a un servidor para poder conectarnos de forma remota (No presencial).

Donde guardar las llaves SSH:


Existe una manera; podemos crear un archivo para no tener que recordar todos los datos de
ingreso al servidor; Para esto debemos crear un archivo .ssh/config y colocar el contenido:

Host EJEMPLO_Platzi_Escuela

HostName 55.66.77.88  IP Servidor a Conectar

Port 22 Puerto de SSH

User ubuntu  Usuario

IdentityFile ~/.ssh/Llave.pem  Llave de Autenticacion

Manejar conexiones con Tmux


Podemos usar Tmux para poder tener varias terminales bajo la misma conexión, para esto
debemos instalarlo dentro del servidor con:

# sudo apt-get install tmux


Usamos el comando tmux para iniciarlo

Una vez iniciado podemos usar el comando Ctrl + B y la opcion que queramos:

Ctrl + B C  Abre una nueva terminal

Ctrl + B N Avanza a la siguiente terminal

Ctrl + B D Desconecta la sesion

# tmux attach  Conectarse a la sesion de tmux

RECUERDA: EN LINUX LAS CARPETAS QUE INICIEN CON .carpeta SON CARPETAS
OCULTAS!

#ls -a Sirve para ver carpetas ocultas


1-5 Editores de Texto en Linux

GNU/Linux se caracteriza por tener muchas alternativas para hacer ciertas tareas. En el caso
de edición de texto hay muchas opciones tanto gráficas como a nivel de consola, las más
famosas: VI y Nano.

VI / VIM

Es un editor de texto desarrollado por Bill Joy (Co-fundador de Sun Microsystem) en 1976; VI
está en casi todos los sistemas operativos *NIX y funciona a través de la consola. Por su
gran aceptación tiene un fork (un software derivado) llamado VIM (Vi IMProved) que mejora
sustancialmente sus características, por ejemplo, en VIM se agrega soporte de coloreado de
sintaxis, plugins, soporte a múltiples lenguajes, multi ventana, editor gráfico (gVim o kVim).
Ambos editores (se distribuyen por separado) están disponibles en la mayoría de los
repositorios de GNU/Linux, VI viene pre-instalado e instalar VIM es super fácil desde los
repositorios.
Modos de VI/VIM:

Tanto VI como VIM tienen dos modos que funcionan para interactuar con el editor sin el uso
del ratón. El primer modo, el “modo de comandos”, permite al usuario insertar un comando,
ya sea para guardar el archivo, abrir otro archivo o cerrar el programa, y el segundo es el
“modo de insertar” y permite al usuario ingresar contenido al archivo que está editando
actualmente. VIM tiene cuatro modos de trabajo adicionales en comparación a VI:

 Modo de línea de órdenes


 Modo visual
 Modo selección
 Modo ex

Nano

Es un editor de texto más sencillo de usar en comparación a VI/VIM pero con menos
características, no viene incorporado a ningún sistema operativo *NIX, pero su instalación es
muy sencilla. Nano es un clon de Pico (editor de texto para UNIX, con licencia propietaria),
en su web oficial puede verse cómo es su interfaz.
Instalación de VIM y de Nano en Fedora / CentOS:

Los dos editores pueden estar instalados al tiempo, con el gestor de paquetes podemos
instalarlos con un solo comando:

$ yum install vim nano -y

Y para abrir VIM o Nano basta ejecutar:

$ vim | nano <nombre_archivo> o $ vim | nano</nombre_archivo>

Instalación de VIM y de Nano en Debian / Ubuntu

También con Fedora / CentOS es posible tener instalados los dos editores.

# apt-get install vim nano

Y la forma de ejecutar el editor es la misma que con Fedora / CentOS.


1-6 Editar archivos con VIM
Vim es un editor de texto que viene instalado por defecto en muchos servidores y con el
vamos a modificar muchos archivos a lo largo del curso.
Uso básico
Para abrir archivos podemos usar el comando vim seguido del nombre del archivo.
Para salir de vim luego de modificar, usamos: wq para guardar los cambios y salir.
Para no guardar los cambios usamos: q!
Si deseas deshacer algo puedes usar la tecla U dentro del modo de comandos.
Modos de vim
Vim funciona con modos, en cada modo vas a poder realizar diferentes acciones, los tres
modos principales son:
Esc modo de comandos
i modo insertar
v modo visual

Comandos para desplazarse por un archivo:

h - Se desplaza un espacio a la izquierda.


l - Se desplaza un espacio a la derecha.
k - Se desplaza una línea hacía arriba.
j - Se desplaza una línea hacía abajo.

Comandos de inserción:

a - Agrega texto después del cursor y entra al modo de inserción.


A - Agrega texto al final de la línea y entra al modo de inserción.
i - Inserta texto antes del cursor y entra al modo de inserción.
I - Inserta texto al inicio de la línea y entra al modo de inserción.
o - Abre una línea debajo del cursor y entra al modo de inserción.
O - Abre una línea encima del cursor y entra al modo de inserción.

Comandos de deshacer y reemplazar:

u - Revierte la última modificación.


U - Revierte todas las modificaciones hechas en la línea actual

Comandos para encontrar texto:

/ - Buscar una cadena de caracteres a partir del cursor hacía el fin del
archivo.
? - Buscar una cadena de caracteres a partir del cursor hacía el inicio del
archivo.
n - Ir a la siguiente cadena que coincida con la que se busca en el
archivo.
Comandos para guardar y salir:

:w - Guardar (salvar) el archivo.


:q! - Salir sin guardar.
:wq - Guardar todas las modificaciones y salir.

2 Instalación y configuracion de programas


2-1 Añadir y administrar repositorios
Los repositorios son una lista de paquetes, que pueden ser oficiales de la distribución.
En el archivo /etc/apt/source.list se guardan las fuentes de los repositorios que va a consultar
el sistema, cada fuente contiene una URL, configuración y una versión del paquete.
Actualizar la lista de paquetes:
Con el comando # apt-get update actualizamos la información de las fuentes listados
en source.list
Recuerda actualizar la lista de paquetes antes de instalar o eliminar cualquier repositorio o
programa.
Las llaves añaden una capa de seguridad a los repositorios.
2-2 Instalar, actualizar y remover programas
Instalar un programa:
aptitude es un programa que nos permite administrar e instalar componentes en Linux.
+ marcar paquete para instalar
- marcar para no instalar/desinstalar
g para instalar paquetes marcados
Desinstalar:
# apt-get remove [nombre], desinstala un paquete con seguridad, pero las
configuraciones o bases de datos NO.
# apt-get purge [nombre] | dpkg –P [nombre] Borra absolutamente todo.

2-3 Empaquetar y comprimir archivos en Linux


Empaquetar y comprimir son cosas diferentes:
Empaquetar: reunir varios archivos en uno solo.
Comprimir: reducir el tamaño de un archivo, generando una versión comprimida sin perder
información.
Empaquetar:
# tar cvf [directorio de salida] [carpeta a empaquetar]
Comprimir:
#gzip -9r [archivo a comprimir]
Comprimir, descomprimir
# tar cvfz archivo.tar.gz [carpeta para comprimir] Permite comprimir un
archivo
# tar xvfz archivo.tar.gz Permite descomprimir y desempaquetar un archivo.
- c --> para empaquetar
- x --> para desempaquetar
- zc --> empaqueta y comprime en gzip
- zx --> empaqueta y comprime en gzip
- jc --> empaqueta y comprime en bzip2
- jx --> empaqueta y comprime en bzip2
- Jc --> empaqueta y comprime en xz
- Jx --> empaqueta y comprime en xz

2-4 Compilar un programa


Muchas veces tenemos que compilar un programa en Linux, en debian y ubuntu bajamos
paquetes pre-compilados.
Proceso de Compilar:
Instalar asistente para compilación:
# sudo apt-get update | sudo apt-get install module assistant
Preparar el sistema, instalando paquetes requeridos:
# sudo m-a prepare
Agregar fuente de datos habilitando fuentes deb-src:
# sudo vim /etc/apt/Source.list
Instalar dependencias del paquete:
# sudo apt-get build-dep [nombre_del_paquete]
Compilar:
# sudo apt-get source –b [nombre_del_paquete]
2-5 Donde encontrar la documentación de los paquetes
Cada distribución tiene un lugar donde guarda la documentación de los paquetes.
En Ubuntu encuentras las opciones de documentación en /usr/share/doc
# man #info son programas que muestran la documentación del programa que consultes.
3- Administración de particiones y arranque
3-1 Estructura de archivos en Linux
Linux es un Sistema Operativo desarrollado por Linus Torvalds

Arquitectura:
Una de las cosas más importantes que debes entender es la estructura de archivos, el
directorio raíz /
Directorios importantes:
/bin archivos binarios de los usuarios del sistema.
/boot guarda los archivos del arranque del sistema.
/dev guarda las definiciones de todos los dispositivos.
/etc archivos de configuración del sistema.
/home se almacenan los archivos de cada usuario.
/lib, almacena las librerías del sistema.
/lib64 almacena las librerías del sistema de 64 bits.
/lost+found espacio temporal donde se guardan datos que se recuperan despues de la
caída del sistema.
/media cuando montamos en el sistema dispositivos, los podemos ver en esta carpeta.
/mnt cuando montamos en el sistema dispositivos, los podemos ver en esta carpeta.
/opt almacenas los programas instalados de terceros.
/proc sistema de archivo virtual que lo crea y destruye el sistema. Contiene informacion
del mismo. (forma anárquica)
/root almacena los archivos del super usuario Root.
/run datos variables en tiempo de ejecución. Informacion del sistema desde el ultimo
booteo.
/sbin archivos binarios del administrador.
/srv archivos de datos específicos para cada servicio instalado en el sistema.
/sys evolución de /proc pero localizado de forma jerarquica.
/tmp almacenamiento de archivos temporales .
/usr programas instalados por defecto.
/var se utiliza para guardar archivos de logs, backups, servidor web.
Recuerda: Todo en Linux es un Archivo
3-2 Administrar discos y particiones Linux
Todos los discos duros tienen particiones, puedes pensar en esto como una torta que se
divide en pedazos físicos.
Las particiones nos permiten segmentar un disco, asignando cada espacio para una labor en
particular.
Crear disco duro en Amazon:
En Amazon puedes crear un nuevo volumen que asignamos al servidor que creamos.
Para asignarlo con click derecho le damos la opción attach y podemos dejar la configuración
por defecto.
Recuerda seleccionar la misma zona al crear el volumen.
Verificar el montaje del disco:
Ingresa como super usuario con el comando sudo su
Podemos usar el comando # dmesg para verificar que se montó el disco duro que creamos.
Listar discos y particiones:
Podemos usar el comando # fdisk y nos va a listar todos los discos.
También podemos utilizar # fdisk /dev/xvd para ingresar a un disco en específico.
Recuerda, los discos son los que no tienen un número.
Tipos de particiones: Existen dos tipos de tablas de particiones:
La tradicional: Que permite 4 particiones primarias y muchas lógicas (las particiones
lógicas sirven como contenedores para más particiones).
Gpt: Que permite tener muchas más particiones.
Crear partición:
Ejecutamos # fdisk /dev/xvd para ingresar al disco.
Creamos una nueva partición con N
Sí es la primera partición debemos crear una primaria, usamos el comando p
Seleccionamos el tamaño de la partición, diciéndole +20G
Cambiar tipo de partición
Ejecutamos fdisk /dev/xvd para ingresar al disco.
Seleccionamos el número de la partición.
Seleccionamos t
Elegimos el número del tipo de partición.
Eliminar partición
Entramos a fdisk especificando el disco duro.
Usamos el comando d
Seleccionamos la partición.
Guardamos cambios con w
Guardar los cambios:
Con w guardamos los cambios que realizamos, si salimos sin guardar la configuración que
hacemos no se va a escribir en el disco.
Ver tabla de particiones
Con el comando # fdisk -l podemos ver cómo están distribuidas las particiones.

3-4 Formateo y montaje de particiones


Existen muchos tipos de sistemas de archivos, cada uno tiene características que lo hacen
útil para diferentes dispositivos.

Formatear particiones
El comando mkfs nos permite formatear una partición usando el sistema de archivos que
queramos.
Formato con FAT32:
Podemos ejecutar el comando # mkfs.vfat /dev/xvdf1 para formatear la partición xvdf1 con
FAT32.
Formato con EXT3:
Podemos ejecutar el comando # mkfs.ext3 /dev/xvdf5 para formatear la partición xvdf5 con
EXT3.
Formato con EXT4:
Podemos ejecutar el comando # mkfs.ext4 /dev/xvdf6 para formatear la partición xvdf6 con
EXT4.
Formato con XFS:
Podemos ejecutar el comando # mkfs.xfs /dev/xvdf6 para formatear la partición xvdf6 con
XFS.
Montar las particiones
Debemos crear un directorio por cada partición que deseamos montar, en este caso usamos
tmp dentro de esta carpeta podemos ejecutar:
mkdir xvdf1
mkdir xvdf3
mount /dev/xvdf1 /tmp/xvdf1
mount /dev/xvdf3 /tmp/xvdf3
Desmontar una partición
Para poder desmontar una partición, debes no estar sobre la partición.
Puedes ejecutar el comando:
unmount /tmp/xvdf1
En este caso /tmp/xvdf1 es donde tenemos montada la partición.

Listar puntos de montaje


El comando # df -h nos lista los directorios que están montados y el espacio que tienen
disponible.
Montar particiones automáticamente
Sí queremos montar las particiones de forma automática podemos ir al archivo /etc/fstab,
añadimos:
/dev/xvdf3 /var_new ext4 defaults,discard 0 0

3-5 Administración swap en Linux


El área de intercambio o partición swap, es muy útil para máquinas que tienen muy poca
memoria RAM.
Ver memoria y swap:
Con el comando # free podemos ver el uso de la memoria y swap.
También podemos utilizar el comando # htop, pero este lo debemos instalar.
Crear partición swap:
Entramos al disco con # fdisk /dev/xvdf
Podemos eliminar una partición o cambiarle el tipo
Seleccionamos el tipo 82
Guardamos con w
Formateamos la partición con # mkswap /dev/xvdf5
Una vez creada podemos activarla con # swapon /dev/xvdf5, seleccionando la partición a la que
le dimos formato swap.
# free Este programa muestra el uso de la memoria RAM y la swap.
# htop Este programa también muestra el uso del CPU, memoria RAM, la swap, entre otras
cosas, es más completo y se debe instalar.
# mkswap [nombre de la partición swap]  Formateamos la partición de tipo swap.
# swapon [nombre de la partición swap] Activo la partición swap.
# swapoff [nombre de la partición swap] Desactivo la partición swap.
3-6 Generar imágenes de Discos Duros
Muchas veces necesitamos sacar backups, o imágenes de discos duros, veamos algunas
herramientas para esto.
Crear imágenes con dd:
# dd nos permite sacar una imágen completa del disco duro, para realizar la imagen.
Primero debemos estar seguros que tenemos la partición desmontada.
Usamos el comando:
dd if=/dev/xvdf6 of=/var_new/backup/backup_xvdf7 bs=1MB
if es la partición que deseamos hacer la imágen,
of donde se va a guardar la imágen.
Montar una imagen con loop:
Primero debemos activar el módulo del kernel con # modprobe loop.
Una vez activo, creamos una carpeta donde vamos a montar la imagen con:
# mkdir /tmp/iso_debian recuerda puedes seleccionar la ruta que desees.
Ahora con el comando # mount debian.iso /tmp/iso_debian -o loop estamos montando la
imágen.
Recuerda debes estar seguro de la ruta del archivo, puedes ir autocompletando la ruta con
tab
Escribir un archivo lleno de ceros:
En Linux existe una ruta /dev/zero esta siempre va a devolver cero.
Podemos crear el archivo con:
dd if=/dev/zero of=zeros100M bs=1M c=100

Leer un archivo para medir la velocidad del disco:


En Linux existe una ruta /dev/null la cual todo lo que enviemos va a desaparecer.
Podemos medir la velocidad de un disco leyendo un archivo, enviando la información a null
con:
dd if=zeros100M of=/dev/null
Recuerda: con el comando # sync sincronizas el disco duro.
3-7 Administrar particiones GPT
Sí el arranque del sistema no funciona correctamente, no vamos a poder tener acceso al
servidor, por esto es importante tenerlo configurado correctamente.
Históricamente hemos podido iniciar el sistema con sistemas MBR o el sistema UEFI.
Saber tipo de tabla de particiones:
Con # fdisk -l /dev/xvda Muestra el tipo de la tabla de partición.
Tabla de particiones GPT:
GPT permite tener 128 particiones en un disco duro.
# gdisk es un comando especial para particiones GPT.
Crear particiones con gdisk
Usamos el comando # gdisk /dev/xvdh para acceder a configurar las particiones del disco.
Recuerda debes seleccionar el disco que deseas configurar.
Usamos la opción N para crear una nueva, y seleccionamos el número de la partición.
Asignamos el tamaño de la partición en este caso +1G
Seleccionamos el tipo de partición, por ejemplo 8300 para cargar tipo Linux filesystem

3-7 Administrar el arranque del sistema GRUB


El GRUB es gestor de arranque, que permite cargar el kernel y el sistema.
Archivos de configuración:
En la carpeta /etc/grub.d vemos los archivos del grub.
/boot/grub/grub.cfg es el archivo de configuración, pero no modifiques este archivo, para
configurarlo usa /etc/grub.d
El grub se coloca en el MBR, que está en los primeros 512 Bytes del disco.
Backup del MBR:
Podemos generar un backgrup del MBR con dd
dd if=/dev/dvda of=/root/mbr_backup bs=512 count=1
Actualizar grub:
update-grub2
Instalar grub:
grub-install /dev/xvdf
3-8 Administrar discos duros con LVM
LVM nos permite realizar una configuración de discos duros que nos permita administrar el
espacio de almacenamiento del servidor.
Instalación:
apt-get install lvm2

Crear volúmenes físicos:


Primero debemos agregar los discos físicos que vamos a usar para crear el LVM, para esto
debemos formatear la partición a usar con tipo 8e
# pvcreate /dev/xvdf3, agrega la partición a los volúmenes físicos del LVM
# pvs listar los discos en los volúmenes lógicos
Grupos:
# vgcreate databases /dev/xvdf3 se agrega la partición a un grupo
# vgs listar los grupos
# vgreduce databases /dev/xvdg remueve una partición del grupo
Volúmenes lógicos:
#lvcreate -n postgres -L 10g databases, crea una partición usando el espacio de un grupo

Extender tamaño de la partición:


lvextend -L+10G /dev/databases/posgress
resize2fs /dev/databases/posgress

3-9 Apagar servidores de forma remota


Los administradores de servidores normalmente deben apagar servidores de forma remota,
recuerda:
Revisar en cual servidor estas conectado
Linux no preguntar confirmación
Es diferente apagar y reiniciar
Comandos:
# shutdown -r now reincia la máquina
# shutdown -h now apagar la máquina
# systemctl reboot reiniciar
4- El sistema y lo que hay que hacer
4-1 Arrancando el sistema runleves, systemd
En Linux por defecto han existido 6 niveles que todos los programas arrancan, se pueden ver
en las carpetas /etc/rc0.d hasta /etc/rc6.d
Dentro de estas carpetas los archivos con S son de arranque y K es de salida
Runlevel: # runlevel dice en qué sistema se está corriendo
Systemd: #systemd permite saber un árbol de procesos, indicando las dependencias de
estos para interactuar con systemd usamos systemctl
Listar dependencias: # systemctl list-dependencies [servicio]
Ver servicios: #systemctl
Ver un servicio: # sysctl show [nombre del servicio]
Buscar servicios: # ps aux | grep [servicio]
Recargar un servicio: # systemctl deamon-reload
Reiniciar un servicio: # systemctl restart [nombre]
Estado de un servicio: # systemctl status [nombre]

4-2 Uso de variables de entorno, bashrc, profile


Las variables de entorno permiten configurar diferentes ambientes cómo de desarrollo o
producción y también guardar llaves de seguridad. Una variable de entorno es simplemente
una variable
Crear una variabla de entorno:
# Platzi="http://platzi.com"
Imprimir variable:
# echo $PLATZI
con # export listas todas las variables
.bashrc y .profile:
Estos archivos guardan configuraciones de la sesión como alias, variables de entorno, etc.
Agregar una variable de entorno:
En el archivo /etc/bash.bashrc agregar una línea declarando las variables:
# export HOME_DB=/var_new
Recuerda:
Cada sesión tiene sus variables de entorno
En PATH se guardan las rutas donde el sistema busca binarios
Las variables de entorno solo se mantienen durante la sesión, debes exportarlas para
guardarlas
4-3 Uso de redireccionamiento y pipes para logs
Muchas veces los logs se centralizan en un sistema para verlos otros se guardan en el
servidor, para poder darle valor a los logs, debemos encontrar informacion en el.
Leer un archivo:
# less [nombre archivo]
# more [nombre archivo]
Filtrar información:
# grep -r "25/Nov" Buscar los del 25 Nov en todos los archivos recursivamente
Contar líneas:
# wc [archivo]
Encadenar procesos:
# grep -r "25/Nov" | wc El resultado de grep se le pasa a wc
Enviar la salida de un comando a un archivo:
# grep -r "25/Nov" * > /tmp/25nov
Ver últimos logs:
# tail [nombre]

4-4 Monitorear, eliminar y establecer prioridades en los procesos.


Los procesos permiten al sistema operativo trabajar, definiendo cuando se debe procesar
información. Los procesos en Linux están encapsulados, esto quiere decir que el usuario que
lanzo el proceso es quien lo debe quitar.
Listar procesos del sistema:
# ps aux
Revisar carga del sistema:
# htop
Recuerda:
Todo proceso en Linux tiene un número único
Un proceso puede tener un valor de prioridad desde -20 hasta 19

4-5 Enlaces duros, simbólicos y sistemas de backups


Enlace simbólico:
Un archivo sin datos, que solo contiene una referencia a la ubicación del archivo original.
# ln -s /home/ubuntu/archivo.iso debian.iso
Enlaces duros:
En un archivo enlazado al archivo original, pero con un nombre diferente.
# ln a/zero b/
4-6 Manejo de usuarios y grupos
Linux es un sistema multiusuario, cada usuario puede correr con diferentes configuraciones,
permisos, etc.
Crear un usuario: # adduser platzi  Crea un usuario.
Todo usuario tiene un id, home y el terminal a usar.
Cambiar de usuario:
# su - [nombre de usuario] Es muy buena práctica usar –r por cada inicio de sesion
Grupos: Cada usuario puede pertenecer a diferentes grupos que le permita acceder a
recursos # groups te dice a qué grupos tienes acceso
Añadir a un nuevo grupo:
# addgroup [Usuario] [grupo]
# addgroup platzi sudo
Contraseña:
# passwd [nombre del usuario] Cambia la contraseña del usuario
Se necesita volverse a conectar al usuario para que cargue los permisos al usuario.
Recuerda: En el archivo /etc/shadow se guardan las contraseñas.

4-7 Generar backup de Base de Datos


Existen muchas formas de generar un backup, en este video veremos algunas de las formas:
En Amazon puedes generar una imagen de la instancia en la que estás trabajando.
Generar un backup de la base de datos:# pg_dump [base de datos] > backup.2017.sql
Es una buena práctica nombrar el archivo con el nombre de la base de datos y la fecha.
4-8 Uso de socat y manejo de redireccionamiento de puertos
Muchas veces necesitamos redireccionar el tráfico entre puertos para esto podemos usar
socat
Instalar socat: # sudo apt-get install socat
Crear redirección: # socat TCP-LISTEN:8080, fork, reuseaddr TCP:localhost:80
Redirecciona todo el tráfico del puerto 8080 al 80
Redirección UDP: # socat UDP-LISTEN:80, reuseaddr, fork TCP4:localhost:8080
4-9 Tareas programadas y como monitorearlas
# crontab nos permite crear tareas programadas
Comando: # crontab -e nos permite crear una nueva tarea
El cron se compone de cinco valores importantes.
Minuto hora [día del mes] mes [día de la semana]
0 9 1 date >> /tmp/date
Script para backup:
Ir a la carpeta de scripts /etc/cron.d/
Crear el script # vim backup_database
# 55 15 * postgres /usr/bin/pg_dump jav_spheb > /var/lib/postfresql/new_db
5- Administración
5-1 Seguridad del Kernel
El kernel es la pieza fundamental del sistema operativo, el interactúa entre el hardware y los
programas que se están ejecutando. Por defecto el kernel de Linux está bien asegurado,
veamos cómo modificar estos límites
Modificar límites:
En el archivo /etc/security/limits.conf se encuentra la configuración de límites del kernel
soft nofile 32000
hard nofile 35000
De esta forma estamos estableciendo la cantidad de archivos que puede abrir el sistema al
tiempo.

5-2 Permisos de archivos


Los permisos de Linux son para darle propiedades a cualquier tipo de ARCHIVO O
CARPETA ya sea para compartir algo vía SSH (Así puedes restringir accesos), o para x o y
propósito..
Cada archivo contiene información sobre sí mismo:
Dueño del archivo.
Grupo del archivo.
Permisos del archivo.
Todavía se necesita entender estos caracteres:
Tipo de archivo: (primer carácter):
Significado:
d Directorio
l Enlace simbólico
s Socket
p Pipe (Tuberías)
Para representar del 0 al 7 necesitamos 3 bits, que son los 3 bits utilizados para dar permisos
a propietario, grupo y al resto. Con un ‘1’ damos permiso y con un ‘0’ se lo quitamos. Va en el
siguiente orden: rwx.
Estos permisos son en Sistema de Numeración OCTAL (Van del 0-7):
Binario Decimal Permisos Descripción
000 0 - - - Ningún permiso
001 1 - - x Ejecución
010 2 - w - Escritura
011 3 - w x Escritura y ejecución
100 4 r - - Lectura
101 5 r - x Lectura y ejecución
110 6 r w - Lectura y escritura
111 7 r w x Lectura, escritura y ejecución
5-3 Configuracion de red
Ver la configuración de interfaces de red: # ifconfig
Inicializar la interfaz: # dhclient eth1
Archivos de configuración:
/etc/network/interfaces
/etc/network/interfaces.d
Activar DHCP automático:
En el archivo interfaces.d agregamos la línea: # iface eth1 inet dhcp
Apagar interfaz de red: # ifdown eth0
Multiples IP sobre una misma interfaz: # ifconfig eth0:0 192.168.10.5
Comando IP: Con este comando podemos sustituir # ifconfig
# ip addr show  Mostar las direcciones
Enrutamiento: Para ver la tabla de enrutamiento se puedes usar # route -n

5-4 Como manejar mi firewall


# iptables permite transmitir la información entre las interfaces de red y el sistema operativo.
Por defecto el firewall tiene algunas políticas generales
Listar información del firewall:
# iptables –nLVer paquetes de forma completa
# input Paquetes que entran
# output Paquetes que salen
# forward Paquetes que llegan y se redireccionan
Configurar acceso a todas los paquetes, de añadir una regla seria para
bloquear o condicionar alguna conexión:
# iptables -P INPUT ACCEPT
Permitir acceso a paquetes desde la red LOCAL (Todas las IP privadas):
# iptables -A INPUT -s 192.168.0.1/24 -j ACCEPT
Regla para que entren paquetes a través de conexiones establecidas o
relacionadas (Por ejemplo, HTTP):
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Rechazar todos los paquetes de entrada:
# iptables -P INPUT DROP
Aceptar conexiones de un puerto específico:
# iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
Borrar alguna regla especifica:
#iptables -D INPUT [Numero de la regla]
Borrar todas las reglas:
# iptables –F
Respaldar reglas de iptables:
# iptables-save > /etc/iptables.rules
Restaurar las reglas de iptables:
# iptables-restore < /etc/iptables.rules
Guardar las reglas:
# iptables-save > /etc/iptables.rules
5-5 Manejo de DNS y dig
El DNS permite mapear un nombre a una dirección IP, /etc/host guarda la lista de IP’s y
nombres asignados en la máquina. Los distintos tipos de DNS son:
A IPv4
CNAME  Nombre
MX Correo
AAAA Dirección IPv6
TXT Texto
PTR DNS reverso
Consultar dominios
# apt-get install dnsutils
# dig linux.platzi.com A DNS oficiales
# dig linux.platzi.com @[servidor dns] A un servidor especifico
Existe un comando llamado # nslookup que permite realizar pruebas de DNS

Para ver la información de un dominio se ejecuta el comando:

$ nslookup www.google.com
nslookup www.google.com
Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
Name: www.google.com
Address: 172.217.8.100
Name: www.google.com
Address: 2607:f8b0:4008:811::2004

Para ver los DNS que tiene el servidor o la maquina ejecutamos nslookup sin parámetros y
nos va a presentar un prompt. En ese prompt escribimos la palabra server y nos devolverá
las IP’s de nuestros DNS

> server
Defaultserver: 8.8.8.8
Address: 8.8.8.8#53
Defaultserver: 8.8.4.4
Address: 8.8.4.4#53
Tambien es posible visualizar información específica indicando el tipo de búsqueda (Query)
que queremos realizar, por ejemplo, si queremos localizar el servidor de correo de Gmail, en
el prompt del nslookup escribimos set Q=MX y luego el dominio, en este caso gmail.com
> set Q=MX
> gmail.com
Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
gmail.com mail exchanger = 20 alt2.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 30 alt3.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 5 gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 40 alt4.gmail-smtp-in.l.google.com.
gmail.com mail exchanger = 10 alt1.gmail-smtp-in.l.google.com.

Authoritative answers can be found from:


>

Si queremos ver toda la información de un dominio, como Servidores DNS, Servidores de


correo y demás configuramos el query en ANY:

> set Q=ANY


> google.com
Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
Name: google.com
Address: 172.217.2.142
Name: google.com
Address: 2607:f8b0:4008:811::200e
google.com nameserver = ns3.google.com.
google.com nameserver = ns1.google.com.
google.com mail exchanger = 20 alt1.aspmx.l.google.com.
google.com mail exchanger = 40 alt3.aspmx.l.google.com.
google.com nameserver = ns4.google.com.
google.com mail exchanger = 50 alt4.aspmx.l.google.com.
google.com text = "v=spf1 include:_spf.google.com ~all"
google.com rdata_257 = 0 issue "pki.goog"
google.com mail exchanger = 30 alt2.aspmx.l.google.com.
google.com nameserver = ns2.google.com.
google.com mail exchanger = 10 aspmx.l.google.com.
google.com
origin = ns1.google.com
mail addr = dns-admin.google.com
serial = 178412874
refresh = 900
retry = 900
expire = 1800
minimum = 60
Authoritative answers can be found from:
>

Eso es muy útil para realizar una revisión de nuestro dominio si, por ejemplo, estamos
implementando un servidor de correo electrónico o un servidor web para nuestra aplicación o
página web. Esto también es posible realizarlo con dig

5-6 Instalación NTP


NTP es un servicio que permite sincronizar la hora.
Instalación: # apt-get install ntp
Consultas: #ntpq Permite hacer consultas al servicio
Activar: #ntpdate-debian Selecciona un servidor y hace la configuración.
Archivo de configuración: /etc/default/ntpdate
5-7 Auditoria de login y logs
# who Muestra los usuarios conectados
# w Quién está conectado y hace cuanto están inactivos
/var/log/auth Queda registrado todos los intentos de acceso
5-8 Túneles con SSH, AutoSSH y socat
Abrir un túnel en el servidor:
# ssh -Ng -L9898:localhost:80 -i platzi
Acceder a la máquina local
# ssh -NR 10022:localhost:22 -i platzi
# ssh -p 10022 usuario@localhost
Crear proxy: # ssh -N -D10090 platzi
5-9 Backup de archivos de configuracion con etckeeper
Cuando mantenemos un gran sistema necesitamos tener auditoria de las acciones en el
servidor.
Backup de etc/:
Con etckeeper podemos guardar las configuraciones de etc, usando git.
Instalación: #apt-get install etckeeper
Guardar cambios: # etckeeper commit
5-10 Prevenir ataques con fail2ban
Muchas veces los servidores están expuestos a ataques, fail2ban nos permite bloquear
ataques.
Instalación: # apt-get install fail2ban
Configuración:
/etc/fail2ban/fail2ban.conf
/etc/fail2ban/jail.conf
Filtros
Para activar un filtro lo debes buscar y añadir la línea enabled = true, por ejemplo, en nginx
debes buscar el archivo etc/fail2ban/filter.d/nginx-http-auth.conf
Restaurar el servicio: fail2ban.service restart
CONTENIDO BONUS
Encriptación de datos con gpg
gpg es un programa que maneja una serie de configuracion para encriptación.
Encriptación simétrica: #gpg –ca –o [Salida] [Entrada]
Desencriptación: #gpg –d Archivo_encriptado
Nota: La salida será el nombre del archivo que asignes para encriptar, y la entrada el
archivo a encriptar en cuestión.

Encontrar el dueño del paquete


Para encontrar al dueño del paquete o archivo podemos usar el comando:
# dpkg –S [Nombre_de_Archivo]
Para ver todos los archivos de un programa: # dpkg –l [Nombre_del_Paquete]

MD5SUM, integridad de archivos y paquetes


# md5sum Permite sacar una suma binaria de un archivo con un hash
Calcular md5sum: # md5sum [Nombre_Archivo]

You might also like