Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Date
Notes
Status Finished
$ sha256sum Downloads/ubuntu-18.04.5-live-server-amd64.iso
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”
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.
r Lectura
w Escritura
a Para todos
Usuario actual
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
Otros
Creo que la idea se entiende con los ejemplos superiores, en este solo debes reemplazar, sea g o u por o .
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.
Estamos dando todos los permisos a todos los usuarios! Mala practica.
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 .
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:
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 .
💡 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
$ sudo chvt 5
$ tty
$ who
$ ps $ ps -ft tty1
$ kill -9 PID
$ ps -ft tty6
$ ps aux
$ touch test.txt
$ nvim test.txt
### Se ejecuta en nvim ####
$ fg
$ jobs
$ fg %1 $ fg %2
💡 Con esto estamos evitando ejecutar x cantidad de consolas por cada tarea.
$ ./programa-ejecutable &
$ chomod +x programa.py
Al ejecutarlo normalmente
$ ./programa.py
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.
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.
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.
$ top
load average .
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 .
minutos.
El tercer número 2.24 indica el promedio de uso dentro de hace 15
minutos.
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.
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:
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:
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.
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.
La barra de la memoria tambien posee estos colores, pero significan cosas distintas.
PRI Prioridad del proceso para el kernel. Mientras más bajo el número más importante es para el kernel.
TIME Tiempo medido en tics de reloj desde que comenzó la ejecución del proceso.
particular.
Esto tambien puede realizarse desde la terminal.
$ htop -u <user-name>
IP Publica
Permite una conexión remota desde cualquier parte, con la cual podemos connectarnos mediante el protocolo SSH al
servidor.
IP Privada
$ ifconfig
$ hostname
La salida de esto será como identificaremos este equipo en cada una de las redes.
$ route -n
Aquí nos mostrara el gateway o dispositivo predeterminado que nos brinda conexión a internet.
$ nslookup <dominio>
$ curl <ip>
$ wget <url/dominio>
Con este comando al igual que curl podemos descargar archivos, etc...
$ rpm -i <paquete.rpm>
$ rpm -e <paquete.rpm>
Repositorios yum Al igual que pacman en Arch linux puedes acerlo mediande yum en estas distros de forma automatica.
$ yum update
rpm -e <paquete>
Debian / Ubuntu
.deb Archivos con extensión .deb son instalables en estas distros y derivadas de forma manual.
$ dpkg -l
Instalar un paquete:
$ dpkg -i <paquete.deb>
$ 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 actualizar nuestra base de datos de apt . Necesario antes de usar upgrade .
$ apt update
$ 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
$ sudo apt install build-essential libgd-dev openssl libssl-dev unzip apache2 php gcc libdbi-perl libdbd-mysql-perl
Ahora debemos descomprimir el archivo. Ten en cuenta que este es un archivo tar (lista de archivos) comprimido gz .
Configurar:
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:
Comandos ya ejecutados!
Al haber realizado este proceso de instalación desde las fuentes poseémos un nuevo servicio.
Para activar el servicio solo cambiamos el status del comando anterior por enable .
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.
El id número 0 esta reservado para el usuario root (en todas las distros).
$ whoami
$ cat /etc/passwd
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.
Contraseñas
¿Donde se encuentran los passwords?
$ passwd
Agregar Usuarios
Para agregar usuarios tenemos dos métodos:
useradd |
———————————————————————————————————————————————————————————
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 ! )
adduser |
———————————————————————————————————————————————————————————
$ ls /home/
Eliminar Usuarios
Para eliminar usuarios digitamos:
Modificar Usuarios
Para modificar algún elemento de un usuario digitamos:
Tricks
Un comando que no está de más usar es history . Con este evitaremos repetir escribir lo mismo.
$ history
$ !252
El comando history tambien puede ser usado con grep . Con el cual filtraremos la salida de history .
$ sudo su - nodejs
Para salir de la sesión de un usuario introducimos: $ exit y nos retornara al usuario anterior.
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
$ sudo su - nodejs
$ sudo apt update
usermod
————————————————————————————————————————————————
Para agregar un usuario al grupo sudo con usermod usamos:
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>
usamos:
Crear un grupo
Para crear un grupo debemos usar:
grupos primarios son los que llevan el mismo nombre del usuario
$ getent group
Si al usar este comando obtenemos que el procesos esta siendo usado, significa que el usuario esta conectado al sistema.
Tareas
Tarea 0
Tarea 1
Crear un usuario (con nombre jerry y contraseña spiderman ) que poseá directorio home y que además tenga permisos
de superusuario.
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 carpeta de solo lectura para ese grupo que se llame lila .
$ 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.
$ ls /lib<arquitectura-de-tu-sistema>/security/
$ ls /etc/security/
$ pwscore
$ <contraseña-a-verificar>
Esta herramienta nos retornara un número entre 0100 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.
$ ulimit -a
Con ulimit estamos listando los permisos del usuario para ejecutar
ciertos comandos o acciones en el sistema operativo.
maxima de procesos.
$ ulimit -u <max-numero-procesos>
Para comprobar que esto haya sido aplicado podemos crear un script en cualquier lenguaje que realize varios procesos.
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
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.
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!
Para comenzar configurando nuestro servidor debemos primeros saber que debemos generar dos claves: una clave publica
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.
$ sudo vi /etc/ssh/sshd_config
Generando llaves
Para generar estas llaves usamos el sigiente comando:
$ ssh-keygen
$ ls .ssh
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
$ sudo vi /etc/ssh/sshd_config
Por lo siguiente:
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
PermitRootLogion no
O podemos usar:
DenyUsers root
Encender un servicio:
Apagar un servicio:
Reiniciar un servicio:
💡 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
Encender el servicio
Exportarlo en json
Creando un servicio
Para crear un servicio debemos crear un archivo en la ruta /etc/systemd/system
Luego lo activamos.
#!/bin/python
import requests
import json
r = requests.get("<https://api.quotable.io/random>")
page = json.loads(r.content)
quote = page['content']
Esto descarga cada vez que se active el servicio una frase random.
Con esto cada vez que abra una terminal me una frase:
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:
nginx desactivado
apache2 activado
Para configurar nginx debemos debemos cambiar el puerto de apache2 desde el puerto 80 hasta el puerto alterno http 8080 .
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:
Contraseña: WtcoK7n5Sb5YTVZt
Usuario: debian-sys-main
mysql -u debian-sys-maint -p
sudo mysql_secure_installation
Reiniciar Apache
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
Ya en la carpeta de plugins que se creo con el paso anterior, configurar los mismos
sudo ./config
Reiniciar Nagios
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
Otro punto interesante de bash es que podemos ejecutar los mismos comandos que en la terminal.
Para llamar cualquiera de estas variables de entorno usamos el simbolo $ antes del nombre de la variable:
$ $<variable>
#!/bin/bash
# Verificar la cantidad de espacio en el S.O
### 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!
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 -
Aseguar servidor
Gestión de vulnerabilidades
Malas prácticas
Buenas prácticas
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:
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 .
$ 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 .