Está en la página 1de 41

Administración de servidores Linux

Autor Pablo Pérez

Date

Fecha de Creación Feb 4, 2021 1140 PM

Notes

Status Finished

Bases del sistema


Buenas practicas:

Usar SHA para comprobar integridad del iso .

$ sha256sum Downloads/ubuntu-18.04.5-live-server-amd64.iso

Comprobar el output de este comando con el SHA en la pagina de descarga.

Instalar Ubuntu Server

En la configuración de nuestra máquina virtual, en la sección Red cambiar de NAT a Adaptador puente. En avanzadas,
colocar en el Modo promiscuo “Permitir todo”

Comprobar memoria antes de instalar.

Seleccionar teclado ingles para el server.

Al crear un usuario crear contraseñas de más de 8 caracteres.

Instalar OpenSSH .

Instalar CentOS
Se repite el proceso anterior

Comandos
tail -f archivo1 archiv2 archivo3 Permite dejar el archivo en modo de espera para revisar las ediciones en tiempo real. Algo

util en entornos productivos cuando tenemos que hacer analisis en tiempo reall.
Tambien puede recibir más de un archivo, para así revisar 2 o 6 a la vez.

Interacción con archivos y permisos


Cuando creamos un archivo con touch los permisos por defecto son los siguientes:

r Lectura
w Escritura

Pero además existe: rw- r-- r--

x Ejecución Los primero 3 son para el usuario actual, los siguientes


para el grupo y los subsiguientes son para otros usuarios.

Administración de servidores Linux 1


¿Como cambiamos los permisos?
Primero debemos saber los tipos de permisos según usuario.

u Es para el usuario actual


g Para el grupo
o Para los demás usuarios que no estan en el grupo

a Para todos

Usuario actual

$ chmod u+x test

Aquí estamos cambiando el permiso de ejecucción del archivo test . Reemplaza la x por r y w dependiendo si quieres
limitar la escritura o lectura sobre el archivo.

Grupo

$ chmod g+r test

Estamos dando lectura del archivo test al grupo .

Otros

Creo que la idea se entiende con los ejemplos superiores, en este solo debes reemplazar, sea g o u por o .

Para borrar permisos usas envez de el signo + el signo - .

$ chmod o-rwx test

Estamos quitando todos los permisos del archivo test a los otros usuarios que no pertenezcan al grupo .
Tambien podemos cambiar esto con el formato octal .
r equivale a 4 , w equivale a 2 y x equivale a 1 .
Para cambiar el permiso escribimos según la suma que nos de.

$ chmod 777 test

Estamos dando todos los permisos a todos los usuarios! Mala practica.

$ chmod 000 test

Ningun permiso a nadie.

$ chmod 731 test

Estamos dando todos los permisos al usuario actual: 4 + 2 1 7 . Solo escritura y ejecución a el grupo: 2 1 3 y solo
ejecución a los otros usuarios: 1 .

Cambiar el propietario del archivo


Para saber quien es el propietario solo debemos ver el nombre que sale despues de los permisos:

Administración de servidores Linux 2


En mi caso es pablo el propietario.

En este otro ejemplo el usuario root es el propietario test2 y mi usuario del test .
Para cambiar el propietario de un archivo, usamos chown .
Ahora queremos hacer que el archivo de propiedad del usuario pablo sea del super-usuario o root .
Para hacerlo hacemos lo siguiente:

$ sudo chown root:root test

El archivo test ahora es inmutable por el usuario, ya que pertenece a root.

Con esto estamos pasando el archivo al usuario root y tambien al grupo al pone el :root .
Si quisieramos podriamos deshacer esta acción pero dejar el archivo en el grupo root .

$ sudo chown pablo:root test

Ahora podemos acceder a el archivo test al igual que los


admins o root users .

💡 Usamos sudo porque para cambiar desde o hacia propietario root necesitamos permiso del administrador.

Terminales en linux
Como notaste las distribuciones de linux para servidore no incluyen interfaz grafica, ya que consumen muchos recursos.
Terminales Virtuales Están tendran una numeración de tty1 - tty6.
Para cambiar de terminal usamos ctrl + alt + fx o podemos usar chvt .

Usando chvt :

$ sudo chvt 1

Estamos moviendonos a la terminal física 1

$ sudo chvt 5

Estamos moviendonos a la terminal física 5

Para saber en cual terminal fisica actual debemos introducir:

$ tty

Para mostrar los usuarios de nuestro sistema usamos:

Administración de servidores Linux 3


$ w

O de forma más simple:

$ who

Para listar los procesos usamos:

$ ps $ ps -ft tty1

Para matar un proceso usamos:

$ kill -9 PID

Para obtener el PID usamos:

$ ps -ft tty6

Esto nos lista los procesos y sus PID , lo copiamos y lo


introducimos en el kill -9 <PID>

Como ejemplo quiero matar el proceso con PID 9062 de la tty6 .

Para eso uso kill -9 9062 . Y listo!

Manejo y monitoreo de procesos y recursos del sistema


Monitorieo
Para identificar los procesos que se ejecutan en el sistema usamos ps .

$ ps aux

Esto nos muestra el PID , el uso de cpu, memoria y el


comando que lo inicializa.

Como identificamos procesos de un usuario en especifico?


Con la ayuda de el comando grep y los pipes .

$ ps aux | grep <cadena de caracteres>

Enviar procesos a segundo plano

Administración de servidores Linux 4


Para enviar un proceso a segundo plano primero debemos correr un programa en primer plano, como ejemplo ejecutaremos
nvim para editar un archivo:

$ touch test.txt
$ nvim test.txt
### Se ejecuta en nvim ####

Ahora oprimimos ctrl-z .

Luego de oprimirlo se mostrara lo siguiente

nvim editando test.txt

Esto quiere decir que suspendimos o detuvimos la ejecucción del programa.


Ahora podemos seguir utilizando más programas en la terminal mientras este queda en el background .

Para volver al programa debemos usar fg .

$ fg

Al terminar de editar el archivo en nvim usamos :wq y nos


mostrara que se continuo el uso del programa.

Como saber si tengo programas en el background ?


Para saber cuantos programas tienes en el background debes usar:

$ jobs

Este comando nos mostrara los procesos en suspendidos o pausados.


Como acceder al ultimo ejecutado? Con fg accedemos al ultimo

Como acceder al primero o segundo?


Para acceder a cualquiera de estos debemos saber su ID , su ID es el número que aparece cuando ejecutamos jobs .

$ fg %1 $ fg %2

Debemos anteponer el símbolo % y luego el número.

💡 Con esto estamos evitando ejecutar x cantidad de consolas por cada tarea.

Como ejecutar un programa directamente en background ?


Con el & ampersand!

$ ./programa-ejecutable &

Administración de servidores Linux 5


Al programa.py que acabo de crear le doy el permiso de
ejecucción con:

$ chomod +x programa.py

Al ejecutarlo normalmente

$ ./programa.py

Obtengo lo esperado: "Hola!" .

Pero cuando lo ejecuto con el & este se va al segundo plano y nos avisa cuando termino.
En este caso el script es muy simple para ejecutarse en segundo plano, si fuera uno más grande con mayor complejidad si
sería util mandarlo a segundo plano.

Ejecutar un script a travez de otro con nohup

Nohup nos permite guardar la salida del programa en un archivo de texto. En sintesis es quien opera el programa y obtiene

su output en un archivo.

$ nohup ./programa.py &

Con esto estamos generando un archivo llamado nohup.out .


En el cual almacenara toda la información que este
mostrara por pantalla.
Con esto estamos generando un archivo llamado nohup.out .
En el cual almacenara toda la información que este
mostrara por pantalla. El programa bat es un reemplazo de cat escrito en rust.

Monitoreo de recursos del sistema

CPU
El comando top nos permite interactuar con una interfaz gráfica que nos muestra información especifica del sistema, como
lo es la cantidad de usuarios, las tareas en ejecucción, los id de los procesos, etc.

Al ejecutar top veremos algo así:

$ top

Como vemos en la primera fila, nos


muestra las horas encendido up
4:57 , la carga promedio de la cpu

load average .

Para verificar la carga promedio de la cpu debemos usar el comando:

Administración de servidores Linux 6


$ cat /proc/cpuinfo | grep "processor"

Esto nos mostrara lo siguiente 👉


Esto varia por la cantidad de procesadores de tu maquina.

Otra forma de buscar esto es evitando la distinción de mayusculas y minusculas en la busqueda. O sea, que ahora E sea lo
mismo que e .

$ cat /proce/cpuinfo | grep -i "Processor"

Esto encontrara lo mismo, pero si no usaramos el flag -i

no obtendriamos nada. Esto sirve para cuando queramos


buscar sin disntición de mayus o minusculas. 😼
Volvemos a top a consulatar el uso promedio de la cpu.

Si te das cuenta aparecen 3 numeros decimales en el promedio, esto Usando top.


significa lo siguiente:
El primer número 1.78 indica el promedio de uso de la cpu dentro de hace
1 minuto

El segundo número 2.28 indica el promedio de uso dentro de hace 5

minutos.
El tercer número 2.24 indica el promedio de uso dentro de hace 15

minutos.

¿Como interpretar estos valores?


Para interpretar estos valores debes saber cuantos procesadores o nucleos poseé tu maquina. En mi caso como vimos,
eran 4 procesadores.

Si se indica en cualquiera de los promedios de uso de cpu que estoy usando 1.78 significa que un cpu esta al 100% de
carga y otro cpu esta al 78% de carga.

Con esto podemos concluir lo siguiente:


Nucleos de mi maquina: 4

Uso promedio de mi maquina: 1.78

Nucleos en promedio libres: 2.22 → 4 - 1.78


Uso promedio porcentual de mi maquina: 44% → 1.78 usado, 2.22 libre. (2.22  −  1.78)  ⋅ 100%  =  44%
¿Que sucede cuando los valores se sobrepasan?

Cuando los valores se sobrepasan, o sea, tienes 4 nucleos y el uso promedio es 5.4 significa que existe un nucleo que
esta sobre usado. No, no significa que esta trabajando a más de su 100% solo que esta trabajando a su 100% y tiene más
tarea que hacer luego.

Ejemplo:

En mi caso lance muchas instances de mi terminal, en este


caso núcleo tenia que realizar más y más tareas, tantas que
tenia tareas en espera ya que le pedi lanzar muchas. 🤯

Administración de servidores Linux 7


💡 Cuando tu uso promedio de cpu sea mayor 3 siempre que la uses y tu maquina, como la mía, tiene 4 nucleos es
buena idea pensar en comprar otro procesador con más nucleos o adquirir otra maquina con más nucleos. Con 64
nucleos bastará 🤯🥵

Memoria
Para revisar el uso de la memoria hacemos uso de el comando free

$ free -h

Este comando nos muestra el tamaño de nuestra memoria, lo usado, lo libre, lo compartido, lo que esta en buffer y lo
disponible.

Disco Duro
Para saber el uso de disco duro de una ruta en especial usamos du y unos modificadores:

$ du -hsc <ruta>

Al ejecutar este comando nos muestra cuanto usa la carpeta del Use sudo porque en mi carpeta existen elementos creado
usuario pablo . por root que no puedo moficar.

Ver procesos
SI quisieramos ver los procesos que gasten más recursos podemos usar lo siguiente:

$ sudo ps aufx | sort -nr -k 3 | head -5

Esto nos mostrara los 5 procesos que consumen mayores recursos de nuestro sistema. No muestro output ya que son
bastantes y no caben en pantalla.

Para revisar que proceso consume mayor ram usamos:

$ sudo ps aufx | sort -nr -k 4 | head -5

Con esto nos mostrara los 5 procesos que más ram consumen en nuestro sistema.
Otro paquete que es bastante util es htop .

HTOP

Como puedes ver la barra de los nucleos del procesador tiene distintos colores.

Administración de servidores Linux 8


Verde: Procesos normales para el usuario. Network Manager, Window Manager, Notifications, etc.
Azul: Procesos de baja prioridad. Reproductor de musica, administrador de descargas
Rojo: Procesos del kernel. Imprescindibles para el uso

La barra de la memoria tambien posee estos colores, pero significan cosas distintas.

Verde: Memoria usada


Azul: Paginas del Buffer.
Rojo: Paginas del Cache.

La primera barra horizontal que encontramos contiene:

PID Número de id del proceso.

USER Dueño del proceso. En este caso pablo , en otros root .

PRI Prioridad del proceso para el kernel. Mientras más bajo el número más importante es para el kernel.

NI Prioridad reseteada por el usuario o el admin root .

VIR Memoria virtual que el proceso consume.

RES Memoria física que el proceso consume.

SHR Memoria compartida que el proceso consume.

S Estado actual del proceso.

CPU% Porcentaje de CPU que el proceso consume.

MEM% Porcentaje de Memoria que el proceso consume.

TIME Tiempo medido en tics de reloj desde que comenzó la ejecución del proceso.

Command: Nombre del comando en ejecucción

Algunos shortcuts utiles al interior de htop .

u Muestra todos los procesos de un usuario en

particular.
Esto tambien puede realizarse desde la terminal.

$ htop -u <user-name>

Con esto nos mostara solo los procesos de ese usuario.

p Ordena los procesos desde mayor a menor uso de CPU.

Orden despues de usar p


Orden antes de usar p

Administración de servidores Linux 9


m Ordena los procesos desde mayor a menor uso de memoria
Lo mismo que lo anterior! Solo que destancando la columan MEM% envez de CPU% . 🤠
t Ordena los procesos según tiempo. Los viejos
primero
Como vez el proceso init , quien lanza todo el sistema
al encender es el más viejo y con eso el primero cuando
usamos t .

space Con la tecla space puedes etiquetar un proceso.

Proceso sin etiqutar Proceso(s) etiquetados

c Etiqueta un proceso y todos sus procesos hijos.

Como vimos las imagenes anteriores el proceso TIDAL


se repite. Para seleccionarlos todos usamos c .
Al usar c se seleccionan los procesos hijos, al yo
seleccionar el primer /usr/bin/NetworkManager se
seleccionan automaticamente los procesos posteriores.

k Matar procesos ya seleccionados!

h For read all into htop !

Instalación y manejo de software en Linux


Análisis de los parámetros de red
En la administración de servidores siempre existen IPs privadas e IPs públicas.

IP Publica
Permite una conexión remota desde cualquier parte, con la cual podemos connectarnos mediante el protocolo SSH al
servidor.

IP Privada

Se utilizan para identificar los dispositivos dentro de una red local.

Para listar nuestra dirección usamos:

$ ifconfig

Este comando nos listara (como dice su nombre if ) las


interfaces.

Y ahí encontraremos nuestra ip privada: 192.168.10.186

La encontramos con la palabra inet

Tambien podemos obtener nuestra ip usando:

Administración de servidores Linux 10


$ ip a

Esto nos mostrara la misma información anterior.

La encontramos con la palabra inet

Para conocer el nombre del equipo usamos:

$ hostname

La salida de esto será como identificaremos este equipo en cada una de las redes.

Si necesitamos ver la puerte de enlace o gateway de este equipo usamos:

$ route -n

Aquí nos mostrara el gateway o dispositivo predeterminado que nos brinda conexión a internet.

Si queremos saber las IPs de dominios especificos usamos:

$ nslookup <dominio>

Con esto estamos obteniendo la IPv4 e IPv6 de google .

Para descargar archivos desde el sistema operativo usamos:

$ curl <ip>

curl hace simulaciones al igual que postman .


Tambien podemos usar:

$ wget <url/dominio>

Con este comando al igual que curl podemos descargar archivos, etc...

Administración de paquetes acorde a la distribución


Ahora vamos a ver como instalar paquetes en cada distribución instalada.

Red Hat / CentOS / Fedora


.rpm Archivos con extensión .rpm son instalables en estas distros de forma manual. readhat-package-manager
Base de datos RPM localizada en /var/lib/rpm .

Para listar todos los paquetes instalados usamos:

Administración de servidores Linux 11


$ rpm -qa

Obtener información acerca de un paquete:

$ rpm -qi <paquete>

Para saber donde se ubican los archivos de un paquete:

$ rpm -qc <paquete>

Para instalar un paquete usamos:

$ rpm -i <paquete.rpm>

Para remover un paquete:

$ rpm -e <paquete.rpm>

Repositorios yum Al igual que pacman en Arch linux puedes acerlo mediande yum en estas distros de forma automatica.

Para instalar un paquete usamos:

$ yum install <paquete>

Para buscar un paquete usamos:

$ yum search <paquete>

Para actualizar la base de datos de paquetes:

$ yum update

Para eliminar un paquete:

rpm -e <paquete>

Debian / Ubuntu
.deb Archivos con extensión .deb son instalables en estas distros y derivadas de forma manual.

dpkg-reconfigure Una forma de instalar los paquetes .deb. debian-package-manager


Base de datos localizada en /var/lib/dpkg .

Listar los paquetes instalados:

$ dpkg -l

Instalar un paquete:

$ dpkg -i <paquete.deb>

Administración de servidores Linux 12


Remover un paquete:

$ dpkg -r <paquete.deb>

Cuando tengamos un paquete ya instalado hacemos uso de dpkg-reconfigure para volver a ejecutar el asistente de
configuración. Un caso seria cuando configuramos la hora de nuestro servidor y este tuvo un desperfecto y debemos
volver a configurarlo.

Repositorios apt Al igual que yum y pacman nos sirve para instalar paquetes en distribuciones que derivan de debian .

Para instalar un paquete usamos:

$ apt install <paquete>

Para buscar un paquete:

$ apt search <paquete>

Para remover un paquete usamos:

$ apt remove <paquete>

Para actualizar nuestra base de datos de apt . Necesario antes de usar upgrade .

$ apt update

Para actualizar (todos) los paquetes del sistema operativo disponibles:

$ apt upgrade

Para actualizar los paquetes del kernel. Luego de realizar esto debemos reiniciar o pedir a canonical el servicio de
live-patch en su web.

$ apt dist-upgrade

💡 Todos es comandos deben ser ejecutados con sudo o por el administrador

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


Desgraciadamente no todo el software que necesitamos se encuentra en repositorios. Algunas veces debemos descargar
software, descomprimirlo y desempaquetarlo para finalmente instalar dicho software.
En esta ocasión instalaremos nagios , un software para monitoreo de base de datos.

Necesitaremos hacer el siguiente procedimiento de instalación:

$ sudo apt install build-essential libgd-dev openssl libssl-dev unzip apache2 php gcc libdbi-perl libdbd-mysql-perl

Ahora necesitaremos descargar nagios con la ayuda de wget .

Administración de servidores Linux 13


$ wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.4.tar.gz -O nagioscore.tar.gz

Esto nos creara el archivo nagioscore.tar.gz en el directorio actual.

Ahora debemos descomprimir el archivo. Ten en cuenta que este es un archivo tar (lista de archivos) comprimido gz .

$ tar xzf nagioscore.tar.gz

Con xzf estamos diciendo: Extraer x lo comprimido z en el archivo f .


Ya en el archivo nagios-4.4.4 debemos configurar y luego instalar:

Configurar:

$ sudo ./configure --with-httpd-conf=/etc/apache2/sites-enabled

Esto es simplemente la configuración para apache .

$ sudo make all

Con esto se verifica y ejecuta todos los archivos de configuración. Esto buscara dependecias faltantes, permisos antes de
poder compilar y instalar nuestro programa.
Instalación:

Para instalar lo recien configurado usamos:

$ sudo make install

Si esto nos muestra un error como este, usamos lo


siguiente:

$ sudo make install-groups-users


$ sudo usermod -aG nagios www-data

Con esto estara solucionado y intentamos volver a instalar


con sudo make install

Al finalizar la instalación nos mostrará lo siguiente.

Debemos ejecutar cada uno de estos comandos, desde make

install-init hasta make install-config .

Aquí puedes ver cada uno de los comandos en ejecucción.

$ sudo make install-init


$ sudo make install-commandmode
$ sudo make install-config

Comandos que nos muestra al finalizar la installación.

Para comprobar la instalación usamos:

$ curl localhost | grep apache

Administración de servidores Linux 14


Esto es para comprobar que apache nos esta respondiendo.

Comandos ya ejecutados!

Al haber realizado este proceso de instalación desde las fuentes poseémos un nuevo servicio.

Para consultar el estado de nuestro servicio nagios usamos:

$ sudo systemctl status nagios

En este momento el servicio esta instalado en el sistema


pero inactivo.

Para activar el servicio solo cambiamos el status del comando anterior por enable .

$ sudo systemctl start nagios.service

Con eso finaliza esta sección

Administración de usuarios
Identificación de usuarios
Para saber los ids de nuestros usuarios usamos:

$ id

Cada usuario tiene un uid o user-id. Cada usuario poseé un gid o group-id.

Y este comando además nos muestra los grupos a los que pertenece este usuario.

En distribuciones basadas en Debian el id de los usuarios comienza en el número 1000 .


En distribuciones basadas en Red Hate el id de los usuarios comienza en 500 .

El id número 0 esta reservado para el usuario root (en todas las distros).

Para saber que usuario es el actual debemos usar:

$ whoami

Pero, ¿Donde ver todos los usuarios del sistema?


Para verlos usamos:

$ cat /etc/passwd

Administración de servidores Linux 15


Esto nos mostrará todos los usuarios del sistema.

Y sí, tu solo creaste uno, los demás son para que el sistema
se ejecute de manera optima y sin problemás.
Podemos revisar que luego de cada usuario hay una x ,
esta es la contraseña, pero claramente cifrada ya que se
ubica en otra ruta del sistema. A la x se el denomina
contraseña sombra.

Como puedes ver en la línea 15 el usuario pablo tiene el


número 1000 y el usuario pedro en la línea 28 tiene el
número 1001 . Esto es el uid .
Luego de el uid nos encontramos con el gid el cual en el
usuario root corresponde a 0 y en el usuario pablo a 1000 .

Luego nos encontramos con el home del usuario, en el caso


de root es bastante intuitivo, se ubica en /root , por otro
lado el de pablo se ubica en /home/pablo , y los que no poseé
una ruta exacta en este apartado es porque son solo los
usuarios para realizar procesos del sistema.

Al final de la línea, en los ultimos : encontramos la consola


que utiliza este usuario para realizar sus tareas. Algunos
usuarios no poseé login para poder usar una consola, dado
a eso poseé una consola con una ruta llamada
/usr/bin/nologin .

Contraseñas
¿Donde se encuentran los passwords?

$ sudo cat /etc/shadow

Obviamente estas contraseñas se encuentran cifradas.

¿Como cambiar contraseñas?

Para cambiar la contraseña de nuestro usuario usamos:

$ passwd

Para cambiar la contraseña de otro usuario debemos usar sudo :

$ sudo passwd <user-name>

Administración de servidores Linux 16


Creando y Manejando Usuarios
Algo a tener en cuenta es que todo lo que tenga que ver con manejo de usuarios depende de una elevación de privilegios,
debido a eso siempre usar sudo .

Agregar Usuarios
Para agregar usuarios tenemos dos métodos:

useradd |
———————————————————————————————————————————————————————————

$ sudo useradd <nombre-del-usuario-nuevo>

Este método crea un usuario de inmediato pero sin


asignarle una contraseña. Con esto estará creado el usuario.

Podemos verificar esto en /etc/shadow . Y tambien podemos comrprobar en /etc/passwd si existe el


usuario.

El usuario pedro poseé una contraseña, pero el usuario Si el usuario poseé un número de usuario o uid significa
miguel poseé un signo de exclamación ya que no poseé una que fue creado exitosamente.
contraseña. Puede variar en las distribuciones si se usa
una x o ! )

Para darle una contraseña a este usuario debemos usar


passwd 😼
💡 Cabe señalar que este comando no crea una carpeta home .

adduser |

———————————————————————————————————————————————————————————

$ sudo adduser <nombre>

Con este comando es más rapido la creación del usuario ya


que es un comando unico que nos muestra una interfaz
que permite definir el nombre, la contraseña y otros
apartados.

Para verificar que haya sido creado de forma exitosa


revisamos /etc/passwd

$ sudo cat /etc/passwd

Con esto estamos viendo el nombre completo que le


asigne, el número de usuario su ruta de home y su consola
por defecto.
Para comprobar si existe su contraseña usamos
/etc/shadow .

Administración de servidores Linux 17


Y si todo finalmente fue exitoso usamos:

$ ls /home/

Con esto estaremos revisando si se creo la carpeta home del usuario.

Eliminar Usuarios
Para eliminar usuarios digitamos:

$ sudo userdel <nombre>

Con esto habremos eliminado el usuario marcos del sistema.


La carpeta home de este usuario sigue exisitiendo! Puede
ser borrada manual pero esto depende de las politicas de la
empresa en la que te desempeñes.

Modificar Usuarios
Para modificar algún elemento de un usuario digitamos:

$ sudo usermod <nombre-de-usuario>

Tricks
Un comando que no está de más usar es history . Con este evitaremos repetir escribir lo mismo.

$ history

Esto nos otorgara un listado largo de comandos ejecutados


en el sistema.
Para, por ejemplo, ejecutar el comando número 252

podemos hacer lo siguiente:

$ !252

Con esto habremos llamado al comando ls /home/ sin tener


que haberlo digitado!

El comando history tambien puede ser usado con grep . Con el cual filtraremos la salida de history .

$ history | grep <palabra/expresion>

Entendiendo la membresía de los grupos


Para comenzar debemos saber como cambiar de usuario:

Administración de servidores Linux 18


$ su - <nombre-de-usuario>

Al usar este comando nos pedira introducir la contraseña


del usuario.

Pero y ¿Si no la sabemos?

Agregar un usuario al grupo de administradores


gpasswd
————————————————————————————————————————————————
Siendo un usuario root puedes hacer todo en el sistema que administres. Si no sabemos la contraseña solo hacemos lo
siguiente.

$ sudo su - nodejs

Para saber quienes somos tambien podemos usar whoami .

Y con esto habremos accedido al usuario sin haber introducido contraseñas.

Para salir de la sesión de un usuario introducimos: $ exit y nos retornara al usuario anterior.

Que sucede si en este usuario intentamos actualizar la


base de datos de apt ( sudo apt update ?

Nos mostrara lo siguiente:

¿Que hacemos cuando un usuario no puede ejecutar comandos sudo ?

Primero debemos estar en el usuario con permisos root , en este caso pablo . O sea, salimos del usuario nodejs .
Para saber a que usuario perteneces nodejs usamos:

$ groups nodejs

El usuario nodejs esta en el grupo nodejs . Esto es porque por defecto


cuando un usuario se crea este se añade al grupo con su nombre.

Para agregar al usuario nodejs al grupo sudo usamos:

$ sudo gpasswd -a <nombre> <grupo>

Con este comando habremos añadido a nodejs al grupo de administradores.


Ahora volvemos a acceder a nodejs y intentamos nuevamente el comando sudo apt update .

$ sudo su - nodejs
$ sudo apt update

Ahora podremos realizar todas las acciones de administrador en este usuario.

Administración de servidores Linux 19


💡 Así de facil se hace a un usuario administrador: sudo gpasswd -a <nombre> <grupo>

Tambien existe otra forma de añadir un usuario a el grupo de administradores:

usermod
————————————————————————————————————————————————
Para agregar un usuario al grupo sudo con usermod usamos:

$ sudo usermod -aG <grupo> <usuario>

Si te fijas aquí la asignación de grupo y usuario es al reves de como se hacio con gpasswd .
Verificamos el grupo del usuario con groups :

$ groups <usuario>

Con este comando habremos añadido al usuario al grupo sudo .

Remover a un usuario del grupo de administradores


Para remover un usuario del grupo de administradores usamos:

$ sudo gpasswd -d nodejs sudo

Para verificar que el usuario ya no pertence al grupo sudo

usamos:

groups <nodejs> Esto nos muestra que nuevamente el usuario pertenece al


mismo grupo con su nombre.

Crear un grupo
Para crear un grupo debemos usar:

$ sudo groupadd <nombre>

Con esto habremos creado un grupo.

Para asegurarnos de que haya sido creado revisamos el


archivo /etc/groups .

Añadir un usuario a un grupo


Esto es lo mismo que añadir el usuario a root .

Administración de servidores Linux 20


Para hacerlo usamos:

$ sudo usermod -a -G <grupo-ya-creado> <usuario-al-que-añadir>

Este comando se compone de -a lo que significa agregar a


Con este comando habremos agregado al usuaria a este usuario sin sobreescribir los grupos O sea, borrar los
determinado grupo. demás). -G hacer referencia a que grupo vamos agregar.
.
😎.
Si no usas -a todos los grupos no primarios serán borrados Lo

grupos primarios son los que llevan el mismo nombre del usuario

Revisar que usuario pertenece a cada grupo


Para tener una visión más general acerca de quien esta en cada grupo usamos:

$ getent group

Esto nos mostrara la larga lista de grupos y los usuarios


pertenecientes a estos.
En la mayoria de los casos no necesitamos revisar todos los
grupos del sistema, para solo mostrar los usuarios del
grupo que queremos usamos:

$ getent group | grep <nombre-del-grupo/nombre-usuario>

Aquí lo estoy usando queriendo buscar a pablo , esto nos


muestra los grupos a los que pertence y sus compañeros
en los demás grupos.

Aquí queremos saber quien este en el grupo sudo , con esto


sabemos que hay 4 usuario en este grupo.

Cambiar al usuario de nombre

$ sudo usermod -l <nuevo-nombre> <nombre-actual>

Si al usar este comando obtenemos que el procesos esta siendo usado, significa que el usuario esta conectado al sistema.

Para desconectarlo usamos:

$ sudo pkill -9 -u <nombre-de-usuario> $ sudo pkill -P <pid>

Habiendo matado este procesos usamos nuevamente el


comando anterior.

Administración de servidores Linux 21


Ahora podremos revisar con /etc/passwd si el cambio fue
exitoso.

Tareas
Tarea 0

Aprender como usar usermod para eliminar usuarios.

Aprender como usar usermod para cambiar nombre de usuarios

Tarea 1

Crear un usuario (con nombre jerry y contraseña spiderman ) que poseá directorio home y que además tenga permisos
de superusuario.

Cambiar el nombre del usuario por piolin y su contraseña por batman .

Verficar que hayan sido creados

Darle a piolin permisos de admin

Tarea 2

Crear otro usuario (de nombre hugo y contraseña bart ) sin directorio home ni permisos.

Crear otro usuario (de nombre fray y contraseña bender ) sin directrio home ni permisos.

Crear un grupo llamado matt-universe .

Hacer a fray admin

Añadir a hugo y fray al grupo matt-universe .

Crear un carpeta de solo lectura para ese grupo que se llame lila .

Usando PAM para el control de acceso de usuarios


PAM es un método para autenticar usuarios en el sistema operativo.

Pam por defecto poseé tres carpetas que debemos verificar.

$ ls /etc/pam.d/

Otra cosa a tener en cuenta es que la carpeta etc es donde se guarda la configuración de todo el software en el sistema.

La segunda carpeta es la que poseé lo accesos de pam para funciones especificas:

$ ls /lib<arquitectura-de-tu-sistema>/security/

Administración de servidores Linux 22


La tercera carpeta es donde editaremos archivos para que pam los tome y realize acciones determinadas.

$ ls /etc/security/

Para saber que tan fuertes son nuestras contraseñas usamos:

$ pwscore
$ <contraseña-a-verificar>

Esta herramienta nos retornara un número entre 0100 dependiendo de lo fuerte o segura que sea nuestra contraseña. En
algunos casos esta herramienta nos respondera que por diccionario se puede obtener la contreseña o que son un
palindromo.

Para instalar pwscore en sistemas basados en Debian debemos instalar libpw-qualitytool . En arch linux se instala mediante
pacman el paquete libpwquality .

Además, siempre al administrar servidores debemos limitar los procesos que ejecuta un usuario.

Para saber los limites del usuario debemos usar ulimit .

$ ulimit -a

Con ulimit estamos listando los permisos del usuario para ejecutar
ciertos comandos o acciones en el sistema operativo.

En este caso nos muestra que el maximo número de procesos de el


usuario actual, el cual es 3871 . 3era línea antes de la ultima max
user processes ). Pero para ejemplo queremos reducir la cantidad

maxima de procesos.

Para reducir el maximo de procesos usamos:

$ ulimit -u <max-numero-procesos>

Este comando no requiere sudo ya que es un comando preconstruido.

Al ejecutar limitamos los procesos del usuario hasta 10 procesos.

Para comprobar que esto haya sido aplicado podemos crear un script en cualquier lenguaje que realize varios procesos.

En mi caso programe dos scripts, uno en python y el otro bash .

Administración de servidores Linux 23


Script en bash

Script en python

Para probar si el limite de 5 procesos habia sido establecido programe en ambos scripts que al ejecutarse este imprimiera
algo en pantalla y llamara nuevamente al script desde dentro del archivo. Recursividad a tope, esto gasta muchos
😎.
Proceso

recursos por eso es necesario limitarlo

En ambios script solo se escribe 3 veces la palabra Proceso , esto es debido a que si limitamos a 5 los procesos de nuestro
usuario eso engloba tambien los procesos globales que el sistema otorga al usuario. Uno de ellos seria en mi caso la
conexión mediante ssh a mi maquina virtual y el otro sería tener al interprete de comando bash corriendo (algo imposible
de no ejecutar).
Ahora te muestro las pruebas directo de la maquina virtual en ambos scripts:

En el eficiente bash .

En el magnifico python .

Al realizar estas pruebas estoy directo a la maquina, dado eso el proceso de conexión vía SSH no esta corriendo y por eso
los resultados son distintos.

En ambos scripts me muestra que se ejecutan 4 procesos, lo cuales se acercan a los 5 que pedi limitar. ¿Que sería el otro
proceso? Es el eficiente bash esperando que termine la ejecución de python y comienze a tomar nuestros comandos.

Otra cosa que podemos hacer es limitar la conexión de usuarios vía ssh a nuestro servidor:

Para hacer esto debemos editar el archivo /etc/security/time.conf . Ahí encontraremos toda la logica de pam .

$ sudo vi /etc/security/time.conf

Algo importante es leer la documentación ubicada en ese archivo ya que no se cubirara por completo en este blog.

Servicios en el sistema operativo


Autenticación de clientes y servidores sobre SSH
SSH es un protocolo que nos ayuda a conectarnos a nuestros servidores desde nuestras máquinas para administrarlos de

forma remota . Existen otros protocolos como telnet pero este ya esta deprecado y su uso es muy inseguro en servidores
productivos.

Ahora procederemos a configurar el servidor openssh . No debemos instalarlo ya que viene preinstalado en nuestro servidor!

Administración de servidores Linux 24


Lo interesante de este protocolo es que no necesitamos contraseñas, solo necesitamos dos llaves. Donde podemos colocar
una contraseña es en el acceso de usuario al sistema.

Configurar servidor openssh

Para comenzar configurando nuestro servidor debemos primeros saber que debemos generar dos claves: una clave publica

y otra privada . Ambas llaves se encontraran y generaran por el cliente.

Siendo la llave o clave publica la que enviare al servidor , ya que como dice su nombre es publica y todos la pueden saber.
En cambio la llave privada no se debe compartir ni enviar a otros.

Para configurar nuestro servidor ssh editamos el archivo /etc/ssh/sshd_config .

$ sudo vi /etc/ssh/sshd_config

Esta configuración nos mostrara un archivo similar a este,


con # para comentar las configuraciones desactivadas.

Ahora volvemos a la máquina del cliente, donde


generaremos la clave privada y pública. En este caso
volvere hacia mi maquina personal que usa Arch Linux .

En caso de usar windows puedes usar Putty , openssh en la


cmd de windows o puedes usar wsl (lo que yo recomiendo).

Generando llaves
Para generar estas llaves usamos el sigiente comando:

$ ssh-keygen

Al usar este comando estamos generando en primera clave


contenida en el archivo id_rsa . Esta será la llave privada.
Luego nos preguntara si queremos algún tipo de
contraseña para esta llave (lo que en ambientes
empresariales es necesario), en mi caso lo deje vacío.

Luego te dira que se creo en el directorio home de tu


usuario en la carpeta oculta .ssh .

Luego generara la llave publica en el mismo directorio que


la privada, solo que con el nombre de id_rsa.pub . El .pub
denota que es la llave privada.
Luego te muestra la huella de la llave y random art de la
llave.

Para listar las llaves y verficar que existan usamos:

$ ls .ssh

Ahí encontremos la llave publica 📢 y privada🔐.

Administración de servidores Linux 25


Luego de hacer esto debemos copiar de alguna forma la llave publica al servidor . En webs como github podemos copiar
directamente la llave publica y pegarla en la web de nuestro proyecto.

Para copiarlo al servidor usamos:

$ ssh-copy-id -i <ruta-de-la-clave-publica> <usuario>@<ip-del-servidor>

Al realizar esto nos pedira la contraseña del usuario pablo para copiarla al servidor. Con esto habremos copiado la llave al
servidor. Al final de esta imagen nos muestra como conectarnos ssh 'pablo@192.168.1.13' .

💡 Algo muy util de esto es que no necesitamos más contraseñas para acceder al sistema como pablo .

Probamos la conexión:

$ ssh pablo@192.168.1.13

Como vez al final de la imagen, no muesta el prompt de el


usuario de inmediato, sin contraseñas.

Para establecer una contraseña tuvimos que haber


rellenada el apartado de passpharse en la creación de las
llaves.
Otro elemento a tener en cuenta es que la dirección ip (de
nuestro servidor local) puede variar.

Para hacer más robusto nuestro sistema podemos solo


dejar que los usuarios con las llaves ya creadas accedan al
sistema.
Para realizar esto editamos el archivo /etc/ssh/sshd_config en
el servidor:

$ sudo vi /etc/ssh/sshd_config

Y editamos la línea que contiene:

Por lo siguiente:

Ahora tocar reiniciar el servicio ssh para que se apliquen


los cambios.

Administración de servidores Linux 26


Cuando intentamos conectarnos desde otro computador
(que no registro las llaves en el servidor) este se vera
rechazado por el servidor:

En este caso lo intente desde mi maquina virtual con centos


y me rechazo la conexión. Esta maquina no poseia llaves)

Solucionar errores
En ocasiones intentamos conectarnos al servidor pero nos surgen ciertos errores. Para saber más en especifico que
sucede cuando intentamos conectarnos usamos el modificador -v :

$ ssh -v <usuario>@<ip-del-servidor>

Este signfica verbose , o sea, que nos diga que esta pasando
con nuestra conexión.

Esto nos muestra las diferentes acciones que realiza ssh para conectarnos. A medida que usamos -v , -vv o -vvv la
información será más detallada.
Reto

No permitir acceso de root mediante ssh


Para realizar esto podemos usar:

PermitRootLogion no

O podemos usar:
DenyUsers root

Permitir solo el acceso de ciertos usuario.


AllowUsers <nombre> <nombre>

Configurando DNS con bind


Para comenzar el proceso de configuración necesitamos instalar bind . Este proceso será realizada en una maquina con
ubuntu .

$ sudo apt install bind9

Para validar la instalación verficamos que el puerto 53 este a la escucha:

Para realizar consultas al DNS podemos usar dig :

Administración de servidores Linux 27


$ dig platzi.com @127.0.0.1

Aquí encontraremos una salida, donde nos interesa la parte


de answer y la de tiempo de ejecución.

Arranque, detención y recarga de servicios


Para saber el estado de un servicio usamos:

$ sudo systemctl status <servicio>

Para activar un servicio usamos:

$ sudo systemctl enable <servicio>

Para desactivar un servicio:

$ sudo systemctl disable <servicio>

Encender un servicio:

$ sudo systemctl start <servicio>

Apagar un servicio:

$ sudo systemctl stop <servicio>

Reiniciar un servicio:

$ sudo systemctl restart <serviciol

Listar los servicio del sistema:

$ sudo systemctl list-units -t service --all

Mostrar el log de un servicio:

Administración de servidores Linux 28


$ sudo journalctl -fu <servicio>

Mostrar el uso de disco de los logs :

$ sudo journalctl --disk-usage

Mostrar booteos de la computadora:

$ sudo journalctl --list-boots

Mostrar los mensajes de determinada categoria de nuestros logs :

$ sudo jounalctl -p critic|notice|info|warning|error:

Mostrar los logs en formato json :

$ sudo journalctl -o json

💡 Algo a tener en cuenta es que al usar enable estas activando el servicio para el proximo reinicio. Si quieres que se
active en esa sesion, usa start luego de enable . Lo mismo ocurre con disable y stop , si quieres desactivar un
proceso ahora mismo usa stop , si lo quieres desactivar para siempre luego de reiniciar usa disable .

Tarea

Aprender a crear un servicio (opt)

Saber el estado de este servico

Desactivarlo si esta activo o activarlo si esta desactivado

Encender el servicio

Ver el log de este servicio.

Exportarlo en json

Creando un servicio
Para crear un servicio debemos crear un archivo en la ruta /etc/systemd/system

El archivo a crear debe terminar en .service

En este ruta creare mi servicio llamado greeting.service

Administración de servidores Linux 29


Este servicio ejecutara el script saludo.py

Luego lo activamos.

La función de este script es mostrarnos frases al lanzar nuestra terminal.


Esto no requiere que sea un servicio. Lo que lo requiere sea un servicio es que al encender el sistema descargue nuevas
frases.
El script saludo.py

#!/bin/python
import requests
import json

r = requests.get("<https://api.quotable.io/random>")
page = json.loads(r.content)
quote = page['content']

with open("greet.txt", "w") as f:


f.write(quote)

Esto descarga cada vez que se active el servicio una frase random.

Además añadí al final de el archivo .zshrc lo siguiente:

Con esto cada vez que abra una terminal me una frase:

Con esto concluye la creación de servicios

Nginx y Apache en Ubuntu Server


Para validar los puertos que tienen proceso activo usaos:

Administración de servidores Linux 30


$ sudo netstat -tulpn

Aquí nos muestra que en el puerto :80 este ejecutandose apache2. Dado a eso debemos cambiar el puerto de apache para que nginx funcione.

Proceso de instalación
Para instalar apache usamos:

$ sudo apt install apache2

Para instalar nginx usamos:

$ sudo apt install nginx nginx-extras

Para verificar si lo servicios estan ejecutandose debemos usar:

$ sudo systemctl status apache2


$ sudo systemctl status nginx

nginx desactivado

apache2 activado

Para configurar nginx debemos debemos cambiar el puerto de apache2 desde el puerto 80 hasta el puerto alterno http 8080 .

Para editar los puertos usamos:

$ sudo vim /etc/apache2/ports.conf

Esto nos mostrara el siguiente archivo. Aquí debemos


modificar la instrucción Listen 80 por Listen 8080 . Como en
la imagen abajo

Luego debemos editar nuestro archivo de configuración de


apache .

Administración de servidores Linux 31


$ sudo vim /etc/apache2/sites-available/000-default.conf

Esto nos mostara un archivo como este:


En el cual debemos editar la primera línea <VirtualHost> :

Ahora debemos reiniciar el proceso apache2 y nginx .

$ sudo systemctl restart apache2


$ sudo systemctl restart nginx

Luego de reiniciar verificamos nuevamente la ejecucción de apache2 y nginx .

Ambos servicios se encuentran en ejecucción. Lo


que quiere decir well done! 🤑

Ahora debemos configurar Nginx editando el archivo /etc/nginx/sites-enabled/default .

$ sudo vim /etc/nginx/sites-enabled/default

Encontraremos lo siguiente, donde editaremos el


server_name y agregaremos una línea llamada proxy_pass .

¿Qué es NGINX Amplify?


NGINX Amplify es una herramienta SaaS que permite realizar el monitoreo de NGINX y NGINX Plus. Los factores que
permite monitorear son el rendimiento, configuraciones con análisis estático. parámetros del sistema operativo, así como
PHPFPM, bases de datos y otros componentes. Nginx Amplify es de fácil configuración y llevar control de nuestros
servidores es agradable por los tableros de administración que posee.

Administración de servidores Linux 32


Con NGINX Amplify podrás recolectar más de 100 métricas de NGINX y el sistema operativo. Amplify analiza los archivos de
configuración propios del servidor, detecta configuraciones incorrectas y da recomendaciones de seguridad, también
permite crear notificaciones que pueden ser enviadas por correo o a un canal de Slack con un simple clic.

Instalación
Para instalar nginx debemos instalar python2.7 con apt .
Luego de realizar esto nos dirigimos a la carpeta de configuración de nginx . La cual es /etc/nginx/ .
En esta carpeta debemos buscar dentro de todos estos directorios cual archivo poseea una configuración .conf

excluyendo a nginx.conf .
Para buscarlo usamos:

$ grep -i include\.*conf nginx.conf

Ahora con el archivo encontrado usamos el siguiente comando:

$ sudo cat > conf.d/stub_status.conf server{


listen 127.0.0.1:80;
server_name 127.0.0.1;
location /nginx_status {
Al ejecutar los comandos enteriores el sistema se quedara stub_status on;
a al espera de una entrada. En esa entrada introducimos lo allow 127.0.0.1;
deny all;
siguiente }
}
Con esto estamos indicandole a nginx que solo permita la
conexión mediante localhost .

Ahora prosigue matar al proceso nginx .

$ sudo kill -HUP `cat /var/run/nginx.pid`

Reinicio y habilitación del proceso nginx .

$ sudo systemctl restart ngingx && sudo systemctl enable ngingx

Ahora debemos logearnos en amplify .


Luego de hacer esto seguimos los pasos para instalar amplify :

Administración de servidores Linux 33


Al finalizar esto en la terminal nos encontraremos con lo siguiente:

Ejecutaremos ese comando con start

Con esto habremos habilitado ya el uso de amplify

Administración de servidores Linux 34


💡 Los ajustes hechos antes de instalar vienen en la web de amplify con una guia antes de iniciar el proceso.

Monitoreo de MySQL con Nagios


Instalar MySQL Server

sudo apt install mysql-server

Obtener el password de MySQL

sudo vim /etc/mysql/debian.cnf

Contraseña: WtcoK7n5Sb5YTVZt
Usuario: debian-sys-main

Iniciar sesión en MySQL

mysql -u debian-sys-maint -p

Asegurar el server de la base de datos

sudo mysql_secure_installation

Verificar que Apache esté funcionando

systemctl status apache2

Activar módulos rewrite y cgi

sudo a2enmod rewrite cgi

Reiniciar Apache

sudo systemctl restart apache2

Crear un usuario para Nagios

sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Entrar a Nagios en nuestro navegador web, escribiendo como dirección:

direccion_ip_del_servidor:8080/nagios

Es muy importante notar que estamos ingresando en el puerto 8080, ya que ahí es donde está funcionando Apache

Instalar las siguientes dependencias:

Administración de servidores Linux 35


sudo apt install -y libmcrypt-dev make libssl-dev bc gawk dc build-essential snmp libnet-snmp-perl gettext

Si no instalaste los plugins en las clases anteriores, debes hacer


lo siguiente: en primer lugar, posicionado en tu home, descargarlos

wget https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz -0 plugins.tar.gz -O plugins.tar.gz

Desempaquetar y descomprimir el archivo de plugins

tar xzvf plugins.tar.gz

Ya en la carpeta de plugins que se creo con el paso anterior, configurar los mismos

sudo ./config

Verificar que no existan errores ni warnings

sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Reiniciar Nagios

sudo systemctl restart nagios

En nuestro home, descargar el plugin de MySQL

wget https://labs.consol.de/assets/downloads/nagios/check_mysql_health-2.2.2.tar.gz -O mysqlplugin.tar.gz

Desempaquetar y descomprimir el archivo del plugin

tar xzvf mysqlplugin.tar.gz

Bash Scripting
¿Que es bash ? Una sheell de UNIX y el interprete de comandos por defecto de la mayoria de distribuciones GNU/LINUX . Cabe
señalar que la extensión de bash es .sh .

Para comenzar debemos saber que para cada archivo debemos definir su interprete (esto al igual que en python ).
Para definir el interprete escribimos en la primera línea del archivo:

#!/bin/bash

Con esto le indicamos al interprete que queremos usar bash .

Los comentarios se crean con un # .


Las variables se inicializan con el nombre=valor .

var1="Esto es una variable"


echo $var1

Administración de servidores Linux 36


Para mostrar por pantalla algun tipo de información usamos echo . Y para hacer referencia a variables ya creadas usamos $ .
Para ejecutar este archivo debemos darle el permiso de ejecución.

Luego ejecutarlo con bash archivo1.sh o ./archivo1.sh :

Otro punto interesante de bash es que podemos ejecutar los mismos comandos que en la terminal.

Variables y entorno de ejecución


Las variables de entorno son un conjunto de variables globales en nuestros sistemas. Estas nos permiten acceder de forma
más facil a una ruta o conjunto de comandos.

Para saber cuales son las variables de entornos usamos env :

Para llamar cualquiera de estas variables de entorno usamos el simbolo $ antes del nombre de la variable:

$ $<variable>

Vemos la ruta el contenido de la variable ZSH . Al ejecutarlo se cambia de directorio.

Administración de servidores Linux 37


💡 Existe una variable importante cuando instalamos programas. Esta es
las rutas de los binarios que podemos ejecutar desde nuestra sesión.
$PATH en esta variable se encuentran todas

Un ejemplo de uso de las variables de entorno sería el siguiente script :

#!/bin/bash
# Verificar la cantidad de espacio en el S.O

CWD=$(pwd) # usando variables de entorno


FECHA=$(date +"%F%T") # Formateo de fecha
echo $FECHA

### Redirigiendo la salida del comando df | grep a el archivo use_dico de fecha actual
df -h | grep /dev > uso_disco_"$FECHA".txt
df -h | grep /dev/sda2 >> uso_disco_"$FECHA".txt # con >> se agrega al final del archivo y no sobreescribe!

echo "Se ha generado un archivo en la ubicación $CWD"

A este script podemos crearle un servicio, con el servicio personalizaremos cada cuanto se vuelva a ejecutar el mismo. Y
los archivos de salida podemos enviarlos por correo al administrador o crear un sistema de alertas a medida que el uso de
disco aumente.

Crontab
¿Que es Cron? Cron es un administrador regular de procesos en segundo plano que comprueba si existen tareas para
ejecutar, teniendo en cuenta la hora del sistema.
¿Que es Crontab? Es el archivo de configuraciones de las tareas a ejecutar. Con el comando crontab -e se edita y con crontab -

l se listan las tareas confuradas.

Para establecer una tarea automatizada con cron se debe


seguir un formato específico:
Con este formato podremos definir la periodicidad de
nuestro cron . Para hacer más facil esto podemos usar
https://crontab.guru . En este sitio podremos definir de forma
grafica como configurar nuestra expresion.
Con esto podriamos manejar la ejecucción de algún script
que analize el sistema en busca de archivos maliciosos o un
script que limpia el sistema cada vez que sean las 20hnan
Existe un software similar a cron que es llamado anacron ,
este realiza las tareas de forma asincrona en un periodo de
tiempo.

Como ejemplo cree este cron en el cual quiero que se


ejecute un script que mutea mi pc a las 18:30 de cada día.

Aseguar servidor
Gestión de vulnerabilidades
Malas prácticas

No desactivar el usuario root

Realizar un login con usuario y password (sin ssh)

Administración de servidores Linux 38


No validar la versión de software usada

Utilizar comandos r* o telnet

No identificar los servicios y puertos abiertos en el S.O

No gestionar correctamente los permisos de los usuarios

Buenas prácticas

Verificar las actualizaciones de seguridad y realizar la instalación de las mismas.

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


Las superficies de ataque son el conjunto de vulnerabilidades o datos conocidos que pueden ser explotados por un
atacante informatica.
No solo es necesario asegurar nuestro servido sino que tambien nuestros procesos.
Lynis es una herramienta que analiza nuestros servidores y para darnos algunas recomendaciones. La estudiaremos más a
fondo en una próxima clase. También existen frameworks o manuales como OWASP que nos explican las características de
aplicaciones web vulnerables y cómo programarlas de forma segura.

Firewall
Los firewalls son herramientas que monitorean el tráfico de nuestras redes para identificar amenazas e impedir que
afecten nuestro sistema.

💡 Recuerda que la seguridad informática es un proceso constante, así que ninguna herramienta (incluyendo el
firewall) puede garantizarnos seguridad absoluta.

En Ubuntu Server podemos usar ufw (Uncomplicated Firewall) para crear algunas reglas, verificar los puertos que tenemos
abiertos y realizar una protección básica de nuestro sistema:

Para verificar el estado de nuestro firewall usamos:

$ sudo ufw status

Aqui nos mostara si esta o no activo el firewall.

Para activar nuestro firewall:

$ sudo ufw enable

Al usar enable nos muestra lo siguiente, dependiendo si


estas o no conectado via ssh . En mi caso estoy conectado
por ssh al servidor así que debo agregar una regla antes de
activar el firewall.

Para agregar reglas usamos:

$ sudo ufw allow <puerto> <comentario(opcional)>

Al hacer esto estamos diciendole al firewall que nos


permita el uso del puerto 22 . El cual es el puerto utilizado
por ssh .

Administración de servidores Linux 39


Además de agregar esta regla se actualizan las reglas ipv4

e ipv6 .
Ahora podemos activar nuestro firewall sin
desconectarnos.
Intentamos activar y nuevamente sale el mensaje de
precaución con la conexión ssh pero no debemos Activando el firewall y mostrando el estado.
preocuparnos ya que creamos la regla de permitir ssh .

Para eleminar una regla especifica:


En este caso queremos borrar la regla de permitir conexión via ssh mediante ipv6 .
Antes de hacer esto debemos saber el número de la regla para así poder quitarla.

$ sudo ufw status numbered

Al usar el modificador numbered nos mostrará el número de


cada regla.

Ahora eliminamos con delete :

$ sudo ufw delete <numero>

Con esto ya no permitiremos conexión vía ssh por ipv6 .

Permitir acceso solo a una(s) ip's predeterminadas:


Al hacer esto restringimos las conexiónes desde maquinas no especificadas.

$ sudo ufw allow from <dirección_ip> proto <protocolo> to any port <puerto> comment <comentaario>

Algo a tener en cuenta es que para conexiones mediante http debemos permitir el uso del puerto 80 y para https el puerto
423 .

Escaneo de puertos con NMAP y NIKTO desde Kali Linux


Para realizar un mapeo de la red y saber su sistema operativo:

$ nmap -sV -sC -O -oA <nombre-archivo-a-guardar-datos> <ip-del-servidor>

Para revisar las vulnerabilidades de nuestro servidor usamos:

$ nikto -h <ip-del-servidor> -o <nombre-archivo>

Lynis: Herramientas de auditoria de seguridad en Linux


Para realizar un escaneo y que nos muestre sugerencias y estados de peligro en nuestro servidor usamos:

Administración de servidores Linux 40


$ sudo lynis audit system

Administración de servidores Linux 41

También podría gustarte