Please enable JavaScript.
Coggle requires JavaScript to display documents.
Administracion de Servidores - Coggle Diagram
Administracion de Servidores
Bases del sistema Operativo
Instalacion de Ubuntu Server
Instalacion de CentOS
Gestion de Arbol de Directorios
Crear archivos, Directorios, Cambiar nombre, navegar por los directorios
Diferencias entre LESS, CAT, HEAD y TAIL para lectura de archivos
CAT muestra un achivo sin paginar
LESS :Muestra un archivo paginado. Pulsando “/” y escribiendo una palabra, puedo buscar las coincidencias de la misma en el archivo. Con la tecla “n” me muevo entre coincidencias hacia adelante, y con shift + “n” me muevo entre coincidencias hacia atras. Con espacio cambio de página. Salgo con "q"
TAIL: Muestra las últimas 10 líneas de un archivo específico. Con la opción “-n” puedo modificar la cantidad de líneas que veo. Con la opción -f puedo poner los cambios en escucha
HEAD: head: Muestra las primeras 10 lineas de un archivo específico. Con la opción “-n” puedo modificar la cantidad de líneas que veo.
MAN : muestra ayuda en comandos
MORE: Sirve para leer archivos como LESSS observando que porcentaje del mismo ya se ha mostrado. Para avanzar en la lectura se utliza la tecla enter
INTERACCION CON ARCHIVOS Y PERMISOS
Permisos estan compuestos por 10 caracteres
rw- rw- r--
1er caracter corresponde al tipo de archivo
'-' = archivo
'd' = directorio
'l' = enlace simbólico
Asignación de permisos en grupos de 3
'u' = usuarios (corresponde caracter del 2al4)
'g' = grupos (corresponde caracter del 5al7)
'o' = otros (corresponde caracter del 8al10)
'a' = todos
Tipo de permisos
'r' = lectura
'w' = escritura
'x' = ejecución
'-' = sin permiso
'+'añade permisos
'-'quita permisos
Formato octal
'0' = (0+0+0) = Sin permisos = ---
'1' = (0+0+1) = Ejecución = --X
'2' = (0+2+0) = Escritura = -w-
'4' = (4+0+0) = Lectura = r--
'7' = (4+2+1= = Eje, Esc, Lec = rwx
chmod | cambiar permisos (chmod u-r archivo.txt), forma rapida asignar permisos a todos 'chmod +x'
chown | (Change Owner), cambia la propiedad d
Conociendo las terminales en linux
chvt: Cambia de terminal
tty: Muestra la terminal actual
who: Muestra los usuarios conectados a nuestro sistema
w: Hace lo mismo que el comando who pero muestra más información
ps: Muestra los procesos corriendo. Con los modificadores -ft y tty podemos filtrar para ver las conexiones de los usuarios
kill: Mata un proceso. Con el modificador -9 fuerzo el cierre del mismo
Manejo y monitoreo de procesos y recursos del sistema
ps: Muestra los procesos corriendo. Modificadores:
aux: Muestra todos los procesos
jobs: Al igual que el comando anterior, muestra los procesos. A diferencia de ps, es un comando interno de la terminal
fg: Abre un proceso que estaba pausado
nohup: Genera un archivo llamado “nohup.out” que muestra toda la información que produjo un proceso
grep: Nos ayuda a filtrar el resultado de un comando o el contenido de un archivo dependiendo de las palabras (o incluso expresión regular) que le indiquemos
Monitoreo De Recursos del sistema
top: Muestra la siguiente información del sistema:
load average (carga promedio): Provee una representación en números del 1 al número de procesadores que tenga nuestro servidor del uso de los mismos.
Uso de la memoria
Cantidad de usuarios
Uso del CPU
Procesos
Etc
free: Me muestra información sobre la memoria de mi sistema. Con el modificador -h la información es más legible para un humano
du: Muestra información sobre el disco duro. Con el modificador -hsc y un directorio especificado muestra el tamaño de ese directorio
htop: Funciona como top pero funciona de forma más intuitiva
cat /proc/cpuinfo | grep "processor": Muestra información sobre el CPU
sudo ps auxf | sort -nr -k 3 | head -5: Muestra los 5 procesos que más uso hacen del CPU
sudo ps auxf | sort -nr -k 4 | head -5: Muestra los 5 procesos que más uso hacen de la memoria RAM
Instalación y manejo de software en Linux
Analisis de los Parametros de Red
Una ip es un identificador unico para los equipos que estan conectados a una red
Las IPs Privadas se utilizan para identificar los dispositivos dentro de una red local. Por ejemplo: los dispositivos conectados en tu casa u oficina
Las IPs Públicas son la que se asignan a cualquier dispositivo conectado a Internet. Por ejemplo: los servidores que alojan tus sitios web, el router que te da acceso a internet, entre otros.
Para ver el nombre/identificador de nuestro equipo en todas las redes podemos usar el comando hostname. También podemos ver qué dispositivo nos permite acceso a Internet con el comando route -n.
Para identificar las IPs de diferentes dominios podemos usar el comando nslookup nombredominio.ext. También podemos usar el comando curl para realizar consultas a algún servidor.
Administración de paquetes acorde a la distribución
Red Hat / CentOS / Fedora
Su gestor de paquetes es .rpm (Red hat Package Manager). La base de datos de este gestor está localizada en /var/lib/rpm.
El comando rpm -qa nos permite listar todos los rpms instalados en la máquina. Con rpm -i nombre-del-paquete.rpm instalamos los paquetes y con rpm -e nombre-del-paquete.rpm los removemos el sistema.
Los paquetes se pueden instalar desde un repositorio sin tener que conocer la ruta del archivo o las dependencias con el comando yum install nombre-del-paquete.
También podemos buscar paquetes más específicos con el comando yum search posible-nombre-del-paquete .
Debian / Ubuntu
Su administración de paquetes es .deb. Podemos realizar las instalaciones con dpkg -i nombre-del-paquete.deb o repositorios apt.
Su base de datos está localizada en /var/lib/dpkg. Con el comando dpkg -l listamos todos los debs instalados en la máquina. Instalamos los paquetes con dpkg -i nombre-del-paquete y los removemos del sistema con dpkg -r nombre-del-paquete.
Si ya tenemos software configurado podemos usar el comando dpkg-reconfigure nombre-paquete para volver a ejecutar el asistente de configuración (si está disponible).
También podemos realizar las instalaciones con el comando apt install nombre-paquete y búsquedas de paquetes con apt search posible-nombre-paquete.
Manejo de Paquetes en sistemas basados en Debian
sudo apt update: Actualiza la información local sobre los repositorios de Ubuntu
sudo apt upgrade: Actualiza todos los programas que tenemos instalados en la máquina
sudo snap install paquete: Instala un paquete con el nuevo gestor de paquetes de Canonical, snap
date: Imprime la fecha actual
Administración de software con YUM y RPM para CentOS
rpm -qi paquete: Muestra la información de un paquete
rpm -qc paquete: Muestra los archivos asociados a un paquete
Nagios: Desempaquetado, descompresión, compilación e instalación de paquetes
Instalación de algunas herramientas para manejar una base de datos MySQL
sudo apt install build-essential libgd-dev openssl libssl-dev unzip apache2 php gcc libdbi-perl libdbd-mysql-perl
Instalación de Nagios:
wget
https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.4.tar.gz
-O nagioscore.tar.gz
Descomprimir y desempaquetar archivos con tar:
tar xvzf nagioscore.tar.gz
1:
sudo ./configure --with-https-conf=/etc/apache2/sites-enabled
2:
sudo make all
3:
sudo make install
4:
sudo make install-init
5:
sudo make install-commandmode
6:
sudo make install-config
7:
sudo make install-webconf
Por último, para administrar el servicio de nagios podemos usar el comando sudo systemctl (status, start, restart, reload, stop, enable, disable, list-dependencies) nagios.
Administración de usuarios
Los usuarios, una tarea vital en el proceso de administración del sistema operativo
Comandos
|
id: Muestra el identificador único de mi usuario, del grupo al que pertenezco y los grupos de los cuales formo parte
whoami: Muestra que usuario soy
passwd: Cambia la contraseña del usuario actual
|
|
Comandos útiles
|
cat /etc/passwd: Muestra todos los usuarios del sistema operativo
cat /etc/shadow: Muestra las contraseñas del sistema operativo
Creando y manejando cuentas de usuario en el sistema operativo
sudo useradd nombre-usuario: crea un usuario sin asignarle inmediatamente alguna contraseña ni consultar más información. Debemos terminar de configurar esta cuenta a mano posteriormente.
sudo adduser nombre-usuario: crea un nuevo usuario con contraseña y algo más de información. También creará una nueva carpeta en la carpeta /home/.
userdel nombre-usuario: eliminar cuentas de usuarios.
usermod: modificar la información de alguna cuenta.
Entendiendo la Membresia de los Grupos
su - usuario: Switch User, cambia de usuario
groups usuario: Muestra a que grupos pertenece cierto usuario
sudo gpasswd -a usuario grupo: Agrega un usuario a un grupo
sudo gpasswd -d usuario grupo: Quita a un usuario de un grupo
usermod -aG grupo usuario: Agrega un usuario a un grupo
sudo -l: Muestra que permisos tiene el usuario actual
Entendiendo la Membresia de los grupos
su - usuario: Switch User, cambia de usuario
groups usuario: Muestra a que grupos pertenece cierto usuario
sudo gpasswd -a usuario grupo: Agrega un usuario a un grupo
sudo gpasswd -d usuario grupo: Quita a un usuario de un grupo
usermod -aG grupo usuario: Agrega un usuario a un grupo
sudo -l: Muestra que permisos tiene el usuario actual
Usando PAM para el control de acceso de usuarios
pwscore: Evalúa si una contraseña es buena o mala del 0 al 100
ulimit: Muestra los permisos que tiene el usuario actual. Modificadores:
-u numero: Cambia la cantidad de procesos que mi usuario puede ejecutar
|
|
Comandos útiles
|
sudo vi /etc/security/time.conf: Modifica el archivo que indica en que horarios pueden conectarse ciertos usuarios
Servicios en el sistema operativo
SSH: Secure Shell, es un protocolo que permite conectar dos computadoras de forma remota sin necesidad de un password, únicamente con la interacción de una llave pública y una llave privada (aunque podemos colocar una contraseña sobre las llaves)
Configuración
|
En el servidor, abrir el archivo /etc/ssh/sshd_config con algún editor. Leer el archivo y configurar a gusto.
En la consola de la máquina cliente abrir ssh-keygen para generar las llaves
Elegir ubicación para guardar la llave privada
Ejecutar ssh-copy-id -i directorio_de_llave/id_rsa.pub
nombre_usuario@direccion
_ip_del_servidor para copiar la llave pública al servidor
Ejecutar ssh
nombre_usuario@direccion
_ip_del_servidor en la máquina cliente para conectarnos exitosamente de forma remota
tip
En lugar de descargar Putty en Windows podemos utilizar el emulador de consola Unix llamado Cmder para ejecutar los comandos vistos en clase. Incluso si esto falla, lo que personalmente recomiendo es instalar un subsistema de linux si tenemos Windows 10. Platzi tiene incluso un artículo sobre como hacer eso:
https://platzi.com/clases/1378-python-practico/19200-importante-instalando-ubuntu-bash-en-windows-para-/
Si la conexión falla, podemos usar el modificador -v (verbose) en el comando ssh para poder ver la información que envían las máquinas que intentan conectarse. La “v” puede repetirse hasta cuatro veces, quedando el comando, por ejemplo, como: ssh -vvvv
nombre_usuario@direccion
_ip_del_servidor. A mas “v” pongamos, más información se mostrará
Reto: Restringir el acceso al usuario root por ssh, y permitir solo un usuario determinado conectado
|
Solución:
|
Colocar en el archivo /etc/ssh/sshd_config del servidor las siguientes líneas:
PermitRootLoginno
AllowUsers nombre_usuario
Ejecutar el siguiente comando para reiniciar el servicio de ssh:
sudo service sshd restart
Configurando DNS con bin
https://platzi.com/clases/1667-linux/22841-configurando-dns-con-bind/
Arranque, detencion y recarga de servicios
Comandos
|
sudo systemctl status servicio: Estado de un servicio
sudo systemctl enable servicio: Habilita un servicio
sudo systemctl disable servicio: Deshabilita un servicio
sudo systemctl start servicio: Enciende un servicio
sudo systemctl stop servicio: Apaga un servicio
sudo systemctl restart servicio: Reinicia un servicio
sudo systemctl list-units -t service --all: Lista los servicios del sistema
sudo journalctl -fu servicio: Muestra el log de un servicio
sudo journalctl --disk-usage: Muestra cuanto pesan los logs en el sistema operativo
sudo journalctl --list-boots: Muestra los booteos de la computadora
sudo journalctl -p critic|notice|info|warning|error: Muestra mensajes de determinada categoría de nuestros logs
sudo journalctl -o json: Muestra los logs en formato json
NGINX y Apache en Ubuntu server
https://platzi.com/clases/1667-linux/23437-nginx-y-apache-en-ubuntu-server/
NGINX y Apache son softwares para montar servidores web, puedes realizar la instalación de ambos en el sistema operativo, teniendo como base que pueden estar corriendo al mismo tiempo, siempre y cuando no estén a la espera de conexiones por el mismo puerto.
Antes de realizar la elección de uno de los dos, deberías mirar el tipo de proyecto en el que estás trabajando y que se acople mejor a tus necesidades, es un proceso de evaluación y prueba en cada uno de los aspectos que esperamos como administradores de sistemas.
Existen múltiples diferencias entre ambos proyectos, que tienen impacto real en el rendimiento y tiempo de configuración para lograr que el servicio quede funcionando perfectamente. Algunos prefieren NGINX por la sintaxis de configuración, otros eligen basado en las estadísticas presentadas y otros por simple experiencia con trabajos anteriores. Yo te recomiendo probar ambos y elegir según el proyecto, o quizás puedes usarlos ambos y sacar lo mejor de cada uno.
Instalacion y configuracion de NGINX
Proceso
|
Instalar Nginx
sudo apt install nginx nginx-extras
|
|
Tips
Podemos ver el historial de comandos con history, y ejecutar uno determinado con !numero_de_comando
¿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.
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.
Los tableros de mando de Amplify sirven para verificar la disponibilidad del sitio e identificar situaciones anómalas en diferentes periodos de tiempo. Otra característica a destacar es que NGINX Amplify te permite administrar varios sitios, direcciones IP y un nombre para identificarlo.
NGINX Amplify: Instalación y configuración de un servidor para producción
Proceso de instalación
|
Instalar Python 2.7
sudo apt install python2.7
Movernos a la carpeta de Nginx
cd /etc/nginx
Modificar el archivo conf.d de la siguiente manera
sudo cat > conf.d/stub_status.conf
server{
listen127.0.0.1:80;
server_name127.0.0.1;
location /nginx_status {
stub_statuson;
allow127.0.0.1;
deny all;
}
}
Matar el proceso de Nginx
sudo kill -HUP
cat /var/run/nginx.pid
Reiniciar y habilitar Nginx
sudo systemctl restart nginx && systemctl enable nginx
Logearnos en el sitio web de Nginx Amplify y seguir las instrucciones de instalación:
https://amplify.nginx.com
Iniciar el servicio de Nginx Amplify
service amplify-agent start
Reiniciar Nginx
sudo systemctl restart nginx
Monitoreo de MySQL con Nagios
Instrucciones
|
Instalar MySQL Server
sudo apt install mysql-server
Obtener el password de MySQL
sudo vim /etc/mysql/debian.cnf
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:
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
Configuracion de Nagios
https://platzi.com/comentario/753660/
Ya en la consola de MySQL, crear un usuario
Configurar Nagios
Crear comandos para hacer uso de Nagios
Crear el archivo que nombrarmos en la configuración en el archivo nagios.cfg
Los Log, nuestros mejores amigos
Comandos
|
find [ruta]: Buscar algo en el sistema operativo.
Modificadores:
-type: Indica que tipo estamos buscando; archivos, directorios y enlaces
-name: Indica el nombre de lo que estamos buscando
-iname: Indica el nombre de lo que estamos buscando, pero sin tener en cuenta mayúsculas y minúsculas
!: Niega la expresión que buscamos (es decir, busca lo contrario)
-mtime: Muestra archivos con cambios en los últimos n minutos
grep [string] [archivo]: Busca una cadena de caracteres o expresión regular en un archivo determinado. Si ejecutamos por ejemplo algo como comando | grep [string] vamos a filtrar el resultado de un comando por la cadena o regex que especifiquemos
awk: Es un lenguaje que nos ayuda a filtrar patrones en un archivo, organizarlos y darles formato
Comandos útiles
|
find /var/log/ -iname "*.log" -type f: Muestra los archivos de log que tenemos en el sistema
sudo find /etc/ -mtime 10 2: Muestra los archivos de configuración que tuvieron salidas de error en los últimos diez minutos
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr: Muestra las IP’s que se conectaron con nuestro servidor nginx
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr: Muestra los errores que surgieron en nuestro servidor nginx
Bash Script
¿Qué es Bash? Es una shell de UNIX y el intérprete de comandos por defecto en la mayoría de distribuciónes GNU/Linux. Se pueden crear scripts, los cuales por convención terminan con la extensión .sh
Definición de un intérprete para que lo que sigue se ejecute con Bash
!/bin/bash
Definición de una variable
VARIABLE = "Hola mundo"
Impresión en pantalla
echo$VARIABLE
Creación de un comentario
Comentario cualquiera
Las variables y su entorno de ejecución
Comandos
|
env: Muestra las variables del sistema operativo
|
|
Variables de entorno
|
$PATH: Guarda las rutas donde se ubican los archivos binarios que pueden ejecutarse directamente en la consola
Automatizando Tareas desde la terminal
Automatizando la copia de seguridad
Generar backup de base de datos MySQL
Crontab
Para ejecutar nuestra tarea de copia de seguridad debemos hacer uso de cron, el cual es un administrador regular de procesos en segundo plano que comprueba si existen tareas para ejecutar, teniendo en cuenta la hora del sistema
Protocolo de seguridad para que se ejecute un backup
https://platzi.com/clases/1667-linux/22987-crontab/
Asegurando tu servidor
+Entendiendo la gestión de vulnerabilidades++
|
|
Malas prácticas
No desactivar el usuario root
Realizar un login con usuario y password (sin ssh)
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.
En CentOS:
yum check-update --security
yum update security
En Ubuntu:
apt update
apt upgrade
Que es una superficie de ataque
Una superficie de ataque es el conjunto de datos conocidos o vulnerabilidades que pueden ser explotados por un atacante informático.
|
|
Software útil para la gestión de vulnerabilidades
|
Lynis: Analiza nuestro servidor y nos da recomendaciones
|
|
Manuales y frameworks útiles para la seguridad de nuestro servidor
|
SCAP: El Security Content Automation Protocol es un conjunto de reglas sobre la expresión y manipulación de información relacionada con configuraciones y fallos.
OWASP: El Open Web Application Security Project es un proyecto de código abierto destinado a pelear contra la inseguridad informática
El firewall y sus reglas
Comandos
|
sudo ufw status: Muestra el estado (activo/inactivo) y las reglas del firewall. Con el modificador numbered me muestra las reglas numeradas
sudo ufw allow puerto: Habilita un puerto
sudo ufw enable: Enciende el firewall
sudo ufw delete numero_de_regla: Borra una regla
sudo ufw allow from direccion_ip proto protocolo to any port puerto: Restringe las direcciones ip que pueden conectarse a cierto puerto. Recordar que SSH trabaja con el protocolo TCP
sudo ufw reset: Elimina todas las reglas
|
|
Recomendación
|
Abrir al público únicamente el puerto 80 (http), 443 (https). Para un conjunto de IP’s específicas, habilitar el puerto 22 (ssh)