01- SEGURIDAD EN LINUX
Introducción a la seguridad en sistemas Linux
CONCEPTOS BASICOS DE SEGURIDAD
Hay dos tipos de seguridad a la hora de montar un servidor:
Seguridad Fisica: Todos los medios que impiden el acceso fisico al servidor.
Seguridad Lógica: Todas las herramientas que permiten proteger la informacion del servidor.
SEGURIDAD FÍSICA
En ésta página no se van a tratar los aspectos de la seguridad física por encontrarse fuera del alcance de los temas a tratar. Sin embargo estas medidas de seguridad van desde racks cerrados con llave para los servidores hasta la implementación de videovigilancia, controles biométricos, personal de seguridad privada, etcétera.
SEGURIDAD LÓGICA
Hay muchos métodos fundamentales para asegurar nuestra información. Antes de entrar en procedimientos más concretos, vamos a ver los métodos básicos muy por encima:
Control de Permisos
Control de Sudoers
Monitorizacion de puertos (netstat)
Monitorizacion de procesos (lsof y fuser)
Monitorizacion de usuarios (who / w / last)
Superservidores (inetd esta obsoleto / xinetd esta algo mas actualizado)
Gestion de contraseñas
Desactivacion del acceso root (/etc/securetty)
Anti Rootkit (chkrootkit / rkhunter)
Control de cambios (tripwire)
Copias de seguridad
1- CONTROL DE PERMISOS
Es importante ser restrictivo a la hora de dar los permisos a los ficheros del sistema.
P.E: no es seguro que cualquier usuario tenga acceso de lectura a /etc/passwd
ya que en ese
archivo se almacenan todos los usuarios de la red.
La seguridad recomendada para ficheros clave es:
Propietario y Grupo --> root
/etc/passwd
--> 644/etc/shadow
--> 000 (hay hashes de contraseñas)/media
--> 700 (es donde se montan las memorias extraibles USB)/run/media
--> 700 (es donde se montan las memorias extraibles USB en distribuciones SYSTEMD)El resto de archivos deben tener 640 y los directorios 750
2- CONTROL DE SUDOERS
BISUDO --> Con este comando (o accediendo a /etc/sudoers
) se puede gestionar quien tiene permisos
SUDO. La estructura del fichero /etc/sudoers
es la siguiente:
Definicion de Alias
Representa a un usuario, comando o equipo y engloba bajo un mismo nombre a una serie de elementos para utilizarlos en la definición de reglas. Los Alias pueden ser:
Cmnd_Alias --> Define alias de comandos.
User_Alias --> Define alias de usuarios normales.
Runas_Alias --> Define alias de usuarios administradores.
Host_Alias --> Define alias de equipos.
La estructura para crear un alias es:
tipo_alias NOMBRE_DEL_ALIAS = elemento1, elemento2, elemento3, ... elementoN
tipo_alias --> los hemos visto arriba (la primera en mayuscula)
NOMBRE_DEL_ALIAS --> identificador del alias (la primera en mayuscula y se acostumbra a ponerlo todo)
elemento1 --> Los elementos dependen del tipo de alias, vamos a ver ejemplos:
Cmnd_Alias WEB = /usr/sbin/apachectl, /usr/sbin/httpd, sudoedit /etc/httpd/ #solo esos comandos
Cmnd_Alias APAGAR = /usr/bin/shutdown -h 23\:00 #solo shutdown con esos parametros
Cmnd_Alias NET_ADMIN = /sbin/ifconfig, /sbin/iptables, WEB #incluye el alias WEB anterior
Cmnd_Alias TODO_BIN = /usr/bin/, !/usr/bin/rpm #todo menos rpm (es un programa inseguro)
User_Alias MYSQL_USERS = andy, marce, juan, %mysql #esos usuarios y el grupo mysql
User_Alias TODOS = ALL, !samuel, !david (todos los usuarios menos samuel y david)
User_Alias OPERADORES = MYSQL_USERS, alejandra #añade el alias + alejandra
Runas_Alias OPERADORES = #501, fabian #funciona igual pero se puede utilizar el UID con "#"
Host_Alias LANS = 192.168.0.0/24, 192.168.0.1/255.255.255.0 #define esos dos equipos como LANS
Definicion de Opciones (Defaults)
Permiten definir ciertas características de comportamiento para los alias previamente creados, para usuarios, usuarios privilegiados, para equipos o de manera global para todos. Hay 4 niveles:
Global --> Defaults opcion1, opcion2 ...
Usuario --> Defaults:usuario opcion1, opcion2 ...
Usuario Privilegiado --> Defaults>usuario opcion1, opcion2 ...
Equipo --> Defaults@equipo opcion1, opcion2 ...
Hay una lista muy extensa de defaults en man sudoers
. Pero se pueden dividir en 4 tipos:
flags o booleanos --> Se indica la opcion y se activa () o desactiva (!)
Defaults !authenticate, log_host
Enteros --> Manejan valores de números enteros en sus opciones
Defaults:fernanda, regina passwd_tries = 1, passwd_timeout = 1
Cadenas --> Manejan valores con mensajes, rutas de archivos... Defaults badpass_message = "Intenta de nuevo: "
Listas --> Permite establecer/eliminar variables de entorno. Solo hay tres y son muy confusas
Defaults env_delete -= HOSTNAME #Elimina la variable HOSTNAME pero no el resto
Defaults env_reset
Defaults env_check += DISPLAY, PS1
Definicion de Reglas
Las reglas de acceso definen que usuarios ejecutan que comandos bajo que usuario y en que equipos. La estructura es:
usuario1 maquinas=(usuarios) comandos
Ejemplos
**daniela ALL = /sbin/iptables #daniela en cualquier host o equipo puede utiliar iptables
ADMIN ALL = ALL #Los usuarios definifos en el alias 'ADMIN' desde cualquier host pueden ejecutar cualquier comando
WEB LANS = (OPERADORES) TODO_BIN #para esto sirven los alias
TAGS (etiquetas de comandos)
Cuando se definen reglas, en la lista de comandos, estos pueden tener cero (como en los ejemplos anteriores) o más tags. Existen 6 de estas etiquetas o tags:
NOPASSWD Y PASSWD --> indica en la definicion de reglas si es necesaria o no la autenticacion
NOEXEC Y EXEC --> Evita que los programas con escape a shell puedan ejecutar comandos.
SETENV Y NOSETENV --> permitirá al usuario indicado cambiar el entorno de variables del usuario
3- MONITORIZACION DE PUERTOS
NETSTAT --> Network Statistics. Lista las conexiones activas tanto entrantes como salientes
-r
--> nos permite ver las rutas de los equipos
-s
--> muestra las estadísticas de los protocolos
-i
--> muestra la transmisión por interfaces de red
-a
--> muestra todo
-panut
--> muestra la informacion mas relevante de la red en el siguiente formato:
Protocolo / Trafico / IP + puerto (privada) / IP + puerto (publico) / Estado / PID + Servicio
4- MONITORIZACION DE PROCESOS
LSOF --> muestra los ficheros y librerias que se utilizan en los procesos activos.
Si no se utiliza ningún argumento, muestra los ficheros y librerias en uso por todos los procesos de sistema en ese instante.
Si solo quiero uno, tengo que poner como argumento el proceso concreto.
-i
--> muestra los puertos que nos muestran al exterior.
-p
--> muestra todos los procesos relacionados con un PID.
-p
`pidof [proceso]` --> lo mismo pero sin poner PID.
FUSER --> muestra todos los procesos que utilizan socket en un directorio dado.
-v
--> verbose
-k
--> mata el proceso
-i
--> modo interactivo (permite interactuar con la salida de fuser)
5- MONITORIZACION DE USUARIOS
WHO --> Muestra por pantalla usuarios logueados y desde cuando.
W --> Muestra por pantalla usuarios logueados con informacion sobre que hacen
USER --> que usuario es.
TTY --> es la estacion
FROM -->
LOGIN --> a que hora se ha logueado.
IDLE --> tiempo que lleva disponible.
JCPU --> Tiempo de uso de CPU.
PCPU --> Tiempo de proceso actual.
WHAT --> que esta haciendo (coincide con los procesos activos).
-s
--> muestra solo USER TTY FROM WHAT-i
--> muestra la direccion IP en vez de FROM-v
--> muestra la informacion de la versionuser
--> muestra informacion sobre un usuario concreto
LAST --> Muestra un listado de los usuarios que se han logueado ultimamente
6- GESTION DE CONTRASEÑAS
Todos recomiendan al menos 8 caracteres incluyendo minusculas, mayusculas, numeros y simbolos. Es recomendable que tengan 14 caracteres por que el hash que genera se multiplica por dos. Siempre que deje es preferible poner espacios en la contraseña, ya que los diccionarios no lo incluyen.
Es importante que cada usuario fisico tenga su propio usuario en el sistema para evitar problemas legales al compartir usuarios y no saber quien ha cometido un delito desde ese usuario. (teoria no repudio)
Se recomienda cambiar la contraseña minimo cada 3 meses. Si no se manejan datos sensibles, puede llegar al año pero no es lo recomendado
CHAGE --> permite cambiar las politicas de los usuarios (la info del /etc/passwd) -d --> Establece el dia del ultimo dia que se cambio la contraseña desde 1ENE1970 -E --> Establece la fecha de caducidad del usuario con la misma premisa que -d -I --> Establece los dias que debe estar una cuenta inactiva para que se deshabilite -l --> Muestra la informacion de la edad de la cuenta -m --> Establece el numero minimo de dias antes de volver a cambiar la contraseña. -M --> Establece el numero maximo de dias -W --> Establece los dias que el sistema avisara al usuario antes de la expiracion de contraseña.
PWGEN --> genera contraseñas aleatorias 14 --> numero de caracteres de la contraseña.
7- DESACTIVACION DEL ACCESO ROOT
Existen varias formas para asegurar que el acceso como root esta limitado. Las mas conocidas son:
/etc/securetty --> En este archivo se puede decidir que dispositivos conectados a la computadora tiene acceso root a la consola.
/etc/passwd --> Modificar la shell de root de /bin/bash a /bin/nologin. Impide el acceso a root desde shell
/etc/ssh/sshd_config --> PermitRootLogin = no Previene el acceso a root desde OpenSSH.
/etc/pam.d/ --> Hay que asegurarse de que se requiera pam_listfile.so para la autenticacion. Asi se limita el acceso a root a todos los servicios de red PAM (cliente FTP, cliente correo...)
8- ANTI-ROOTKIT
Un rootkit es un conjunto de software malintencionado que busca dar acceso root a un hacker y esta diseñado para permanecer oculto en el sistema.
CHKROOTKIT --> analiza el sistema en busca de rootkit.
RKHUNTER --> es mas nuevo y potente que el anterior y ademas incluye firmas de linux.
CLAMAV --> antivirus gratuito realizado por la comunidad linux. No es de calidad, pero es gratis y sirve para ver las firmas del malware y entender el funcionamiento de un AV. freshclam --> actualiza la base de datos. checkclam --> realiza un analisis del equipo.
9- CONTROL DE CAMBIOS
TRIPWIRE --> herramienta que controla los cambios realizados en el sistema. Muy bueno para securizar un servidor.
/etc/tripwire/twpol.txt --> archivo de configuracion comentar la linea /etc/rc.boot (ya no existe ese directorio) todas las /root/.loquesea se comentan para no dar error comentar /proc tambien.
despues ejecutar sudo twadmin -m P /etc/tripwire/twpol.txt para inicializar las politicas
--init --> inicializa la base de datos.
Por ultimo, para generar un informe tenemos dos opciones: 1. tripwire --check > ~/Escritorio/report.txt (así evitas tener que descifrar el resultado)
tripwire --check --> guarda un reporte en /var/lib/tripwire/report/
twprint -m r --twrfile [ruta del reporte] --> permite ver el reporte descifrado
VER MAN POR QUE TIENE MUCHAS OPCIONES
10- COPIAS DE SEGURIDAD
TAR --> Permite trabajar con archivos comprimidos .tar
-c --> crear un fichero -f --> especificar la ruta -v --> modo verbose -x --> extraer fichero -z --> comprime o descomprime en gzip (.gz) -j --> comprime o descomprime en bzip2 (.bz2) -J --> comprime o descomprime en xz (.xz) -t --> lista los archivos que se encuentran dentro del comprimido. P.E: tar -cvf [ruta del contenedor creado] [ruta de archivos que van dentro del contenedor] crea un contenedor .tar con los archivos de la ruta seleccionada tar -zcvf [ruta del contenedor creado] [ruta de archivos que van dentro del contenedor] crea in contenedor .tar.gz comprimido con los archivos seleccionados.
REFERENCIAS
https://www.solvetic.com/tutoriales/article/1458-entender-los-permisos-linux-chmod/ https://ayuda.svigo.es/index.php/servidores/119-gestion-de-permisos-en-servidores-linux https://www.thegeekdiary.com/understanding-etc-security-limits-conf-file-to-set-ulimit/ https://www.ochobitshacenunbyte.com/2017/01/18/servicios-de-internet-en-linux-con-xinetd/
Última actualización