Seguridad en las Zonas
mar 05 de febrero del 2008

Hace unos días se realizó el primer
viernes técnico en las oficinas de Sun, se trataba
de una presentación general de OpenSolaris y sus tecnologías asociadas. Como es
lógico, se habló brevemente de las zonas. Uno de los aspectos que
despertó más interés fue el modelo de seguridad aplicado para aislar unos procesos
de otros.
Así pues, previendo una lluvia de preguntas al respecto cuando demos la charla
de virtualización, he decidido profundizar un poco en el tema. Como siempre
tomando algunos apuntes.
Como
Álvaro, genialmente, introdujo en la charla, el modelo de seguridad de
OpenSolaris va más allá del tradicional en *nix, root (id =0) todos los
privilegios, los demás usuarios ninguno. En su lugar tenemos un modelo
m´s
granular, donde podemos asignar a los procesos/usuarios un set de privilegios
específicos para realizar las tareas que necesiten.
Por ejemplo, ya no es necesario arrancar un servidor web como root, en su
lugar podemos dar a un usuario privilegios para que sus procesos puedan hacer
un bind al puerto 80. El hecho que cada proceso pueda ejecutarse con los
mínimos privilegios necesarios, en contra del todo o nada tradicional, favorece
enormemente la seguridad global del sistema.
Aquí tenemos los privilegios que tiene el demonio sshd:
7194: /usr/sbin/sshd
flags = <none>
E: basic,contract_event,contract_observer,file_chown,
file_chown_self,fil e_dac_execute,file_dac_read,
file_dac_search,file_dac_write,file_owner,file_setid,
ipc_dac_read,ipc_dac_write,ipc_owner,net_bindmlp,
net_icmpaccess,net_mac_aware,net_privaddr,proc_audit,
proc_chroot,proc_lock_memory,proc_owner,proc_setid,proc_t
askid,sys_acct,sys_admin,sys_audit,sys_mount,sys_nfs,sys_resource
I: basic
P: basic,contract_event,contract_observer,file_chown,
file_chown_self,fil e_dac_execute,file_dac_read,
file_dac_search,file_dac_write,file_owner,file_setid,
ipc_dac_read,ipc_dac_write,ipc_owner,net_bindmlp,
net_icmpaccess,net_mac_aware,net_privaddr,proc_audit,
proc_chroot,proc_lock_memory,proc_owner,proc_setid,proc_t
askid,sys_acct,sys_admin,sys_audit,sys_mount,sys_nfs,sys_resource
L: basic,contract_event,contract_observer,file_chown,
file_chown_self,fil e_dac_execute,file_dac_read,
file_dac_search,file_dac_write,file_owner,file_setid,
ipc_dac_read,ipc_dac_write,ipc_owner,net_bindmlp,
net_icmpaccess,net_mac_aware,net_privaddr,proc_audit,
proc_chroot,proc_lock_memory,proc_owner,proc_setid,proc_t
askid,sys_acct,sys_admin,sys_audit,sys_mount,sys_nfs,sys_resource
Los privilegios que tienen los procesos dentro de una zona no global están prefijados y no
pueden ser alterados por el administrador, este set está diseñado
de manera que evita la interacción de los threads entre zonas
, así como el uso de algún privilegio para conseguir otros
adicionales. Incluso los hilos que se ejecutan con id 0 tienen este set. Estas
restricciones no se aplican en la zona global.
Como consecuencia hay una serie de privilegios no podrán adquirir los
procesos ejecutándose en una zona no global:
Privilege Description
PRIV_NET_RAWACCESS Allows a process to have direct access to the
network layer.
PRIV_PROC_CLOCK_HIGHRES Allows process to create high-resolution timers.
PRIV_PROC_LOCK_MEMORY Allows process to lock pages in physical memory.
PRIV_PROC_PRIOCNTL Allows process to change scheduling priority or
class.
PRIV_PROC_ZONE Allows process to control/signal other processes
in different zones.
[...]
De esta manera los procesos se hallan aislados de forma efectiva de aquellos
que no se están ejecutando en su misma zona.
Obviamente, a parte de la restricción nivel de privilegios, es vital para la
seguridad de las zonas, que los derechos de acceso a los distintos recursos
sean correctos. Es decir, los privilegios nos indican que
"acciones" podemos realizar (p. ej. Un chown), pero donde realizarlas
está controlado a nivel de objetos (p. ej. Usando zonecfg damos acceso a los
filesystem que nos interesa.).
Es la combinación de ambas cosas, privilegios y restricciones de acceso
, lo que finalmente garantiza la seguridad entre zonas.
Espero que esta aburrida entrada ayude un poco a aclarar como funciona la
seguridad en las zonas... :)