SafeChildren Banner

Havoc Oracle Solaris Experts

miércoles, 8 de septiembre de 2010

Modelo de Seguridad de Solaris: RBAC, Roles y Privilegios - Parte 2

Introducción
En la Primera Parte de RBAC, Roles y Privilegios de Solaris hicimos un pequeño acercamiento a la tecnología. La idea es ir descubriendo estas funciones, pero utilizando pequeños ejemplos para poder mostrar su aplicación en un entorno real y hacerlo más ameno.

Dentro de las opciones disponibles, en este primeros pasos vamos a centrarnos en privilegios, los definiremos y, veremos cómo podemos utilizarlos.

Privilegios en Solaris
Todos los procesos tienen asociados unos privilegios -como vimos en la primera parte- Efectivos (E) que el kernel evaluará antes de ejecutarlo.

Solaris incorpora alrededor de 70 privilegios definidos en varios grupos,  identificados como grupo_nombre_privilegio, por ejemplo:
  • FILE: Privilegios de gestión de archivos en sistemas de archivos.
  • IPC: Privilegios de gestión y acceso a objetos IPC
  • NET: Privilegios de gestión y acceso a funcionalidades de red
  • PROC: Privilegios de gestión y acceso a las propiedades restrigidas de los procesos
  • SYS: Privilegios de acceso sin restricciones a varias propiedades de sistema
Gestión Básica de Privilegios
Como ya comentamos en la primera parte, para ver los privilegios de un proceso debemos utilizar el comando <ppriv _pid_>, sin embargo, en esta ocasión vamos a utilizar la opción <-l> que nos mostrará los todos los permisos actuales, por ejemplo:
$ ppriv -l|wc -l
      68
$ ppriv -l|head -4
contract_event
contract_observer
cpc_cpu
dtrace_kernel
Roles y Usuarios
El uso de privilegios está indicado principalmente a ser asignados a roles, donde definiremos conjuntos de acciones que puede definir un grupo. Esta definición la llamaremos role, así mismo, un role puede ser adquirido por diferentes usuarios.

Entraremos en más detalle del uso de roles en las siguientes entregas, no te preocupes que poco a poco iremos montando el rompecabezas ...

Añadir Privilegios a un usuarios
Podemos añadir privilegios a un usuario en concreto, es decir, sin tener que utilizar roles. Esto se utiliza principalmente para demonios y/o situaciones muy concretas, para el resto es mejor -y más fácil- utilizar roles.

Para añadir un privilegio a un usuario, utilizaremos el comando <usermod> con la opción <-K> donde asignaremos los privilegios separados por coma, el formato es el siguiente:
# usermod -K defaultpriv=privilege_1,privilege_2,privilege_n username
Por ejemplo, para asignarle privilegios al usuario test con la finalidad de que sea capáz de sincronizar el reloj utilizando el comando <ntpdate> vamos a asignar los privilegios: sys_time (para la hora) y net_privaddr (para poder hacer bind en un puerto inferior a 1024).

Primero comprobaremos los permisos del usuario, posteriormente asignaremos los privilegios y volveremos a probar, vemos el ejemplo:
$ ppriv $$
14617:  -bash
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,
proc_audit,proc_chroot,proc_lock_memory,proc_owner,proc_priocntl,proc_setid,
proc_taskid,sys_acct,sys_admin,sys_audit,sys_mount,sys_nfs,sys_resource,sys_time
$ /usr/sbin/ntpdate hora.rediris.es
 7 Sep 23:52:27 ntpdate[14631]: bind() fails: Permission denied
$ exit
logout
# usermod -K defaultpriv=basic,sys_time,net_privaddr test
UX: usermod: test is currently logged in, some changes may not take effect until next login.
# su - test
Sun Microsystems Inc.   SunOS 5.10      Generic January 2005
$ /usr/sbin/ntpdate hora.rediris.es
 7 Sep 23:52:42 ntpdate[14647]: adjust time server 130.206.3.166 offset -0.002587 sec
$ ppriv $$
14643:  -bash
flags =
        E: basic,net_privaddr,sys_time
        I: basic,net_privaddr,sys_time
        P: basic,net_privaddr,sys_time
        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,
proc_audit,proc_chroot,proc_lock_memory,proc_owner,proc_priocntl,proc_setid,
proc_taskid,sys_acct,sys_admin,sys_audit,sys_mount,sys_nfs,sys_resource,sys_time



Conclusión
En esta ocasión hemos entrado un poco más en el detalle del uso de los privilegios, y aunque con un ejemplo un poco extremo, hemos otorgado privilegios a un usuario normal la posibilidad de modificar la hora del sistema utilizando el comando <ntpdate>. De esta forma, ya no será necesario que tengamos que proporcionarle la password de root.


Referencias

No hay comentarios:

Publicar un comentario