Unidad 5-SO
Unidad 5-SO
Aspectos básicos
Monitorización sobre GNU/Linux
Optimización del sistema
Optimizaciones de carácter general
Configuraciones complementarias
Aspectos Básicos
Introducción
Un aspecto fundamental, una vez que el sistema está instalado, es la
configuración y adaptación del sistema a las necesidades del usuario y que las
prestaciones del sistema sean lo más adecuadas posible a las necesidades que
de él se demandan. GNU/Linux es un sistema operativo-eficiente que permite un
grado de configuración excelente y una optimización muy delicada de acuerdo a
las necesidades del usuario.
Es por ello por lo que, una vez realizada una instalación (o en algunos casos una
actualización), deben hacerse determinadas configuraciones vitales en el sistema.
Si bien el sistema “funciona”, es necesario efectuar algunos (adaptación al entorno
o sintonización) para permitir que estén cubiertas todas las necesidades del
usuario/servicios que presta la máquina.
Esta sintonización dependerá de dónde se encuentre funcionando la máquina y se
llevará a cabo, en algunos casos para mejorar el rendimiento del sistema, y en
otros (además) por cuestiones seguridad.
Cuando está en funcionamiento, es necesario monitorizar el sistema para ver su
comportamiento y actuar en consecuencia. Si bien es un aspecto fundamental, la
sintonización de un operativo muchas veces se relega a la opinión de expertos o
gurús de la informática; pero conociendo los parámetros que afectan al
rendimiento, es posible llegar a buenas soluciones haciendo un proceso cíclico de
análisis, cambio de configuración, monitorización y ajustes.
Antes de conocer cuáles son las técnicas de optimización, es necesario enumerar
las causas que pueden afectar a las prestaciones de un sistema operativo. Entre
éstas, se pueden mencionar:
a) Cuellos de botella en los recursos: la consecuencia es que todo el sistema irá
más lento porque existen recursos que no pueden satisfacer la demanda a la que
se les somete. El primer paso para optimizar el sistema es encontrar estos cuellos
de botella y por qué ocurren, conociendo sus limitaciones teóricas y prácticas.
b) Ley de Amdahl: según esta ley, “hay un límite de cuánto puede uno mejorar en
velocidad una cosa si sólo se optimiza una parte de ella”; es decir, si se tiene un
programa que utiliza el 10% de CPU y se optimiza reduciendo la utilización en un
factor de 2, el programa mejorará sus prestaciones (speedup) en un 5%, lo cual
puede significar un tremendo esfuerzo no compensado con los resultados.
c) Estimación del speedup: es necesario estimar cuánto mejorará para evitar
esfuerzos y costes innecesarios. Se puede utilizar la ley anterior para valorar si es
necesaria una inversión en tiempo o económica en el sistema.
d) Efecto burbuja: siempre se tiene la sensación de que cuando se encuentra la
solución a un problema, surge otro. Una manifestación de este problema es que el
sistema se mueve constantemente entre poblemas de CPU y problemas de
entrada/salida, y viceversa.
e) Tiempo de repuesta frente a cantidad de trabajo: si se cuenta con veinte
usuarios, mejorar en la productividad significará que todos tendrán más trabajo
hecho al mismo tiempo, pero no mejores respuestas individualmente; podría ser
que el tiempo de respuesta para algunos fuera mejor que para otros. Mejorar el
tiempo de respuesta significa optimizar el sistema para que las tareas individuales
tarden lo menos posible.
f) Psicología del usuario: dos parámetros son fundamentales: 1) el usuario estará
insatisfecho generalmente cuando se produzcan variaciones en el tiempo de
respuesta; y 2) el usuario no detectará mejoras en el tiempo de ejecución menores
del 20%.
g) Efecto prueba: las medidas de monitorización afectan a las propias medidas.
Se debe ir con cuidado cuando se realizan las pruebas por los efectos colaterales
de los propios programas de medida.
h) Importancia de la media y la variación: se deben tener en cuenta los resultados,
ya que si se obtiene una media de utilización de CPU del 50% cuando ha sido
utilizada 100, 0, 0, 100, se podría llegar a conclusiones erróneas. Es importante
ver la variación sobre la media.
i) Conocimientos básicos sobre el hardware del sistema por optimizar: para
mejorar una cosa es necesario “conocer” si es susceptible de mejora. El
encargado de la optimización deberá conocer básicamente el hardware
subyacente (CPU, memorias, buses, cachés, entrada/salida, discos, vídeo) y su
interconexión para poder determinar dónde están los problemas.
j) Conocimientos básicos sobre el sistema operativo por optimizar: del mismo
modo que en el punto anterior, el usuario deberá conocer aspectos mínimos sobre
el sistema operativo que pretende optimizar, entre los cuales se incluyen
conceptos como procesos y threads (creación, ejecución, estados, prioridades,
terminación), llamadas al sistema, buffers de caché, sistema de archivos,
administración de memoria y memoria virtual (paginación, swap) y tablas del
kernel.
El comando atsar
Los sistemas compatibles UNIX SV utilizan los comandos sar y sadc para obtener
estadísticas del sistema. Su equivalente en GNU/Linux (incluido en Debian) es
atsar (y atsadc), que es totalmente equivalente a los que hemos mencionado. El
comando atsar lee contadores y estadísticas del fichero /proc y las muestra por la
salida estándar. La primera forma de llamar al comando es:
atsar opciones t [n]
donde muestra la actividad en n veces cada t segundos con una cabecera
mostrando los contadores de actividad (el valor por defecto de n es 1).
La segunda forma de llamarlo es:
atsar -opciones -s time -e time -i sec -f file -n day#
Nota: Para optimizar hay que tener en cuenta la saturación de los recursos. Ley
de Amdahl: relaciona los conocimientos de software y hardware disponible, el
tiempo de respuesta y el número de trabajos.
El comando extrae datos del archivo especificado por -f (por defecto
/var/log/atsar/atsarxx, con xx el día del mes) y que fueron previamente guardados
por atsadc (se utiliza para recoger los datos, salvarlos y procesarlos y en Debian
está en /usr/lib/atsar). El parámetro -n puede ser utilizado para indicar el día del
mes y -s, -e la hora de inicio-final, respectivamente.
Opción Descripción
u Utilización CPU
d Actividad de disco
i Número de interrupciones/s
l Estadísticas de red
w Estadísticas de conexiones IP
t Estadísticas de TCP
U Estadísticas de UDP
m Estadísticas de icmp
N Estadísticas de NFS
Existen una serie de optimizaciones de índole general que pueden mejorar las
prestaciones del sistema:
Bibliotecas estáticas o dinámicas
Cuando se compila un programa, se puede hacer con una biblioteca estática
(libr.a), cuyo código de función se incluye en el ejecutable o con una dinámica
(libr.so.xx.x), donde se carga la biblioteca en el momento de la ejecución. Si bien
las primeras garantizan código portable y seguro, consumen más memoria. El
programador deberá decidir cuál es la adecuada para su programa incluyendo –
static en la opciones del compilador (no ponerlo significa dinámicas) o --disable-
shared, cuando se utiliza el comando configure. Es recomendable utilizar (casi
todas las distribuciones nuevas lo hacen) la biblioteca estándar libc.a y libc.so de
versiones 2.2.x o superiores (conocida como Libc6) que reemplaza a las
anteriores.
Optimización del disco
En la actualidad, la mayoría de PC´s incluye disco UltraDMA (100) por defecto; sin
embargo, en una gran cantidad de casos no están optimizados para extraer las
mejores prestaciones. Existe una herramienta (hdparm) que permite sintonizar el
kernel a los parámetros del disco tipo IDE. Se debe tener cuidado con esta
utilidad, sobre todo en discos UltraDMA (verificar en el BIOS que los parámetros
para soporte por DMA están habilitados), ya que pueden inutilizar el disco.
Consultar la documentación man hdparm) sobre cuáles son (y el riesgo que
comporta) las optimizaciones más importantes, por ejemplo: -c3, -d1, -X34, -X66,
-X12, -X68, -mXX, -a16, -u1, -W1, -k1, -K1. Cada opción significa una optimización
y algunas son de altísimo riesgo, por lo que habrá que conocer muy bien el disco.
Para consultar los parámetros optimizados, se podría utilizar hdparm -vtT
/dev/hdX (donde X es el disco optimizado) y la llamada a hdparm con todos los
parámetros se puede poner en /etc/init.d para cargarla en el boot.
Otros optimizadores
Existen algunas optimizaciones sugeridas:
a) Editar: /usr/src/kernel-source-2.4.18/include/linux/sem.h y cambiar el número de
semáforos disponibles. Donde dice #define SEMMNI 128, cambiarlo por #define
SEMMNI 512.
b) Cambiar la longitud del buffer del syslog en: /usr/src/kernel-source-
2.4.18/kernel/printk.c Donde dice #define LOG_BUF_LEN (16384) (esta variable
aparecerá cuatro veces para diferentes procesadores con diferentes valores),
cambiarla por #define LOG_BUF_LEN (65536).
c) Editar (línea 20):
vi +20 /usr/src/kernel-source-2.4.18/Makefile
y agregar a la variable HOSTCFLAGS (línea 20) y a la variable CFLAGS (línea 91)
-O3 -funroll-loops en lugar de -O2. Estos cambios (agresivos) pueden no funcionar
con todos los kernels. No intente forzar su funcionamiento, ya que podría quedar
el kernel inestable (similar a otros sistemas operativos muy comunes).
Configuraciones Complementarias
Monitorización
En este apartado veremos algunas de las herramientas más interesantes (por
orden alfabético) que incorpora GNU/Linux (Debian) para la monitorización de
sistema. No es una lista exhaustiva, sino una selección de las más utilizadas (se
recomienda ver el man herramienta para mayor información):
• atsar , ac, sac, sysstat, isag: herramientas de auditoría tales como ac, last,
accton, sa, atsar o isag (Interactive System Activity Grapher) para la auditoría de
recursos hw y sw.
• aris: monitor de logs del sistema para detectar incidentes de seguridad.
• arpwatch; mon: monitor de actividad ethernet/FDDI que indica si hay cambios
en tablas MACIP; monitor de servicios de red.
• diffmon, fcheck: generación de informes sobre cambios en la configuración del
sistema y monitorización del sistemas de ficheros para detectar intrusiones.
• genpower: monitor para gestionar los fallos de alimentación.
• gkrellm: monitorización gráfica de CPU, procesos (memoria), sistemas de
ficheros y usuarios, disco, red, Internet, swap, etc.
• lcap, systune: retira capacidades asignadas al kernel en el fichero
/proc/sys/kernel y adapta según las necesidades con systune.
Archivos sospechosos
Buscar periódicamente archivos con nombres no usuales, ocultos o sin un uid/gid
válido, como ‘...’ (tres puntos), ‘.. ‘ (punto punto espacio), ‘..^G’, para ello, habrá
que utilizar:
find / -name “.*” -print | cat –v o find / name “..” -print
Para buscar uid/gid no válidos, utilizar: find / -nouser o –nogroup (cuidado, porque
algunas instalaciones se hacen con un usuario que luego no está definido y que el
administrador debe cambiar).
Conexión sin password
No permitir el archivo .rhosts en ningún usuario a no ser que sea estrictamente
necesario (se recomienda utilizar ssh con clave pública en lugar de métodos
basados en .rhosts).
X Display manager
Modificar el archivo /etc/X11/xdm/Xaccess para indicar los hosts que se podrán
conectar a través de XDM y evitar que cualquier host pueda tener una pantalla de
login.
Control de la combinación Ctrl-Alt-Delete
Para evitar que se pueda apagar la máquina desde el teclado, insertar un
comentario (#) en la primera columna de la línea siguiente:
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
del archivo /etc/inittab. Activar los cambios con telinit q.
Evitar servicios no ofrecidos
Bloquear el archivo /etc/services para no admitir servicios no contemplados
bloqueando el archivo con chattr +i /etc/services.
Conexión del root
Modificar el archivo /etc/securetty que contiene las TTY y VC (virtual console) en
que se puede conectar el root dejando sólo una de cada, por ejemplo, tty1 y vc/1,
y si es necesario conectarse como sysadm y hacer un su.
Eliminar usuarios no utilizados
Borrar los usuarios/grupos que no sean necesarios, incluidos los que vienen por
defecto (por ejemplo, operator, shutdown, ftp, uucp, games, ...), y dejar sólo los
necesarios (root, bin, daemon, sync, nobody, sysadm) y los que se hayan creado
con la instalación de paquetes o por comandos (lo mismo con /etc/group). Si el
sistema es crítico, podría considerarse bloquear (chattr +i file) los archivos
/etc/passwd, /etc/shadow, /etc/group, /etc/gsahdow para evitar su modificación
(cuidado con esta acción, porque no permitirá cambiar posteriormente los
passwd).
Modificar los archivos de /etc/security
De acuerdo a las necesidades de utilización y seguridad del sistema. Por ejemplo:
‘access.conf’ Quién puede hacer un login al sistema.
Formato:
permisssion : users : origins
+ o - : usuarios : desde donde
-:ALL EXCEPT root:tty1
Impide el acceso a todos no-root sobre tty1.
-:ALL EXCEPT user1 user2 user3:console
Impide el acceso excepto user1,2,3 pero el último sólo desde consola.
-:user1:ALL EXCEPT LOCAL .uoc.edu
‘group.conf’: Acceso a servicios restringidos.
Formato:
services;ttys;users;times;groups
xsh;tty*&!ttyp*;user1;Al00002400;floppy
Ejemplo de cómo, ejecutando xsh en tty* (cualquier ttyXXX), el usuario user1 tiene
acceso al floppy a través del grupo floppy todos los días (Al = all days) a todas
horas (0000-2400). Ver sintaxis en: /etc/security/time.conf.
xsh; tty* ;user2;!Wk0900-1800;games, sound
Otro ejemplo de cómo user2 tiene acceso a los juegos a través de xsh sobre tty*
fuera de horas de trabajo (Wk = working days).
‘limits.conf’: Limita los recursos a los usuarios y evita ataques por DoS.
Formato:
domain type item value
domain: usuario, grupo o *
type: soft y hard
item: core (max tamaño del core), data (max tamaño del data), fsize (max tamaño
archivo), memlock (max memoria bloqueada), nofile (max file open), rss (max
conjunto residente), stack (max stack), cpu (max tiempo CPU minutos), nproc
(max N.º procesos), as ( max addressspace),maxlogins (max logings), priority
(max prioridad)
* soft core 0
* hard rss 10000
@grupo1 hard nproc 20
@grupo2 soft nproc 30
@grupo2 hard nproc 50
ftp hard nproc 0
@gru - maxlogins 4
SUID y SGID
Un usuario podrá ejecutar como propietario un comando si tiene el bit SUID o
SGID activado, lo cual se refleja como una ‘s’ SUID (-rwsr-xr-x) y SGID (-r-xr-sr-x).
Por lo tanto, es necesario quitar el bit (chmod a-s file) a los comandos que no lo
necesitan. Estos archivos pueden ser buscados con:
find / -type f -perm -4000 o -perm -2000 –print
Se debe proceder con cuidado respecto a los archivos que quita el SUIDGUID
porque el comando podría quedar inútil.