SafeChildren Banner

Havoc Oracle Solaris Experts

domingo, 5 de septiembre de 2010

Modelo de Seguridad de Solaris: RBAC, Roles y Privilegios

Introducción
En esta ocasión vamos a hacer un repaso -en varias partes- al modelo de seguridad que nos proporciona Solaris y cómo podemos utilizarlos para hacer más seguro nuestro entorno. Ha pasado mucho tiempo desde que empecé el blog, y ahora sí, ya estamos en disposición de poder hablar de esta característica tan potente.

En UNIX el modelo de seguridad se establece como Lectura(r), Escritura(w) y Ejecución(x) para el Propietario, Grupo y Los demás. Un modelo que en un principio era más que suficiente para llevar a cabo las tareas comunes y tener un sistema de seguridad adecuado a las necesidades de aquel tiempo, sin embargo, a día de hoy las cosas son un poco más complicadas.

El modelo UNIX de seguridad, además define que para poder acceder a un puerto inferior a 1024 es necesario tener privilegios de root. Esta medida -en su momento interesante- hace que a día de hoy -con el avance de los exploits, buffer overflow, etc. - pone en riesgo nuestro sistema, veamos un ejemplo.

Un pequeño ejemplo
Nuestro servidor Apache HTTP necesita levantarse en el puerto 80 -y como hemos comentado es necesario tener permisos de root para ello-, por lo tanto, para evitar que todos nuestros procesos de HTTP corran con los permisos de root, nuestro Apache hace un setuid a un usuario no privilegiado para los nuevos procesos de esta forma,  minimiza el posible problema de permisos.  Por ejemplo, si miramos los procesos de nuestro Apache HTTP
www  4076 13484   0 05:17:43 ?           0:00 /opt/www/apache-1.3.41/bin/httpd
root 13484   774   0   mar 25 ?          11:20 /opt/www/apache-1.3.41/bin/httpd
Sin embargo,  sigue quedando un proceso con todos los permisos y es aquí donde podemos tener problemas.


Super User Model
El modelo SuperUser, hace referencia a contar con un usuario "super priviligiado" <root> que no tiene ningún tipo de limitación y de un conjunto de usuarios no privilegiados. Esto supone que no disponemos de un sistema de ajuste fino de asignación, por ejemplo, si queremos que un usuario pueda reiniciar el servicio Apache HTTP, debemos otorgarle permisos de root -o proporcionale la contraseña-, sin embargo, al hacerlo, también le estamos otorgando todos los permisos.


RBAC y Privilegios
Role Based Acces Control, es una evolución introducida en Solaris 8 -hace ya tiempo- para poder gestionar las acciones mediante privilegios. De esta forma, podemos tener un grupo de privilegios para nuestros operadores nivel 1, para que puedan iniciar/detener/checkear el Sistema de monitorización de Nagios, pero que no puedan hacer un reboot de la máquina. Para solucionar este problema, se introdujeron los privilegios y los roles.
  • Un privilegio es una definición booleana que permite a un usuario no privilegiado ejecutar una acción o no, por ejemplo, uso de puertos privilegiados, cambiar planificador, etc.
  • Un role es una agrupación de privilegios que un usuario puede tomar -si tiene permisos y conoce su contraseña-.
Uso de Roles
La gestión de roles se realiza con los comandos: roleadd, rolemod y roledel. Éstos tienen el mismo formato que la gestión de usuarios (useradd, usermod y userdel) y en el modelo SuperUser, son representados como un usuario, y por lo tanto, podemos utilizar los comandos <passwd> para cambiar la contraseña y <su> para asumir una role.

Una nota importante es que una role siempre tiene como shell a pfsh. Por ejemplo, vamos a ver cómo podemos crear un role de una forma sencilla:

# roleadd -d /export/home/testrole -m testrole
64 bloques
# passwd testrole
Nueva contraseña:
Vuelva a escribir la nueva contraseña:
passwd: la contraseña se ha cambiado para testrole satisfactoriamente
# su - testrole
$ echo $SHELL
/bin/pfsh
Administrar los Privilegios
Para las tareas de administración, disponemos del comando <ppriv> que nos permite ver o modificar los valores de los privilegios o atributos. Por ejemplo, para ver el conjunto de privilegios de nuestro proceso shell haremos lo siguiente:

$ ppriv $$
1046:    -pfsh
flags =
    E: basic
    I: basic
    P: basic
    L: basic,contract_event,contract_observer,file_chown,file_chown_self,file_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,net_rawaccess,proc_audit,proc_chroot,proc_lock_memory,proc_owner,proc_setid,proc_taskid,sys_acct,sys_admin,sys_audit,sys_ip_config,sys_mount,sys_nfs,sys_resource
La salida de este comando nos proporciona los siguientes datos:
  • Heredados (I): Privilegios heredados en exec
  • Permitidos (P): Privilegios máximos del proceso
  • Efectivos (E): Privilegios actualmente activos, es un subconjunto de (P)
  • Limite (L): Privilegios máximos que un proceso y sus hijos pueden llegar a obtener en el siguiente exec



Conclusiones
En esta primera parte, hemos visto la estructura de seguridad de UNIX y cómo han evolucionado hasta llegar a los privilegios y roles en Solaris.

En las siguientes entregas veremos cómo podemos utilizarlos dentro de nuestras instalaciones para garantizar un mayor nivel de seguridad.

No hay comentarios:

Publicar un comentario