.. _seg-ssoo: Gestión de la seguridad *********************** La gestión de la seguridad implica principalmente dos aspectos diferenciados: a. El **mecanismo de control de accesos**, que define el modo en que se permite o deniega el acceso a procesos y usuarios a los distintos recursos del sistema. #. El **control de errores** que perjudiquen el funcionamiento del sistema. Mecanismo de control de accesos =============================== .. note:: Al tratar de estos mecanismos, distinguiremos entre :dfn:`sujeto`, que es quien realiza la acción (un usuario, un proceso) y :dfn:`objeto` que es el recurso del sistema sobre el que se realiza la acción. Hay tres filosofías distintas a este respecto: #. Control de accesos discrecional (|DAC|) Es el mecanismo más habitual en que la seguridad se basa en la identidad de los usuarios y en los permisos que se otorgan a éstos sobre los distintos objetos del sistema. En él cada objeto tiene por propietario a un usuario y es éste el que tiene potestad para conceder, a discreción, permisos sobre su propiedad al resto de los usuarios. En consecuencia, el control de la seguridad no está centralizado, sino que cada usuario decide sobre la seguridad de los objetos que le pertenecen. Todo el control de accesos que estudiemos a lo largo del curso se basara en este enfoque, ya que es el que implementan nativamente los principales sistemas operativos: *Windows* y *UNIX* (*Linux*, \*BSD, etc.). #. Control de accesos obligatorio (|MAC|) Este mecanismo se caracteriza porque el control está centralizado. El mecanismo se basa en la definición de etiquetas sobre los objetos que indican su nivel de sensibilidad (p.e. desclasificado, restringido, confidencial, secreto y alto secreto) y la definición de etiquetas sobre los sujetos que indican su nivel de acceso, de manera que el sujeto podrá actuar sobre el objeto sólo si tiene un nivel de acceso superior al de la sensibilidad del objeto. Todas estas políticas de acceso se definen de forma centralizada, sin que ningún usuario de forma discrecional pueda conceder a otros privilegios. En *Linux*, por ejemplo, hay posibilidad de implementar este mecanismo de seguridad a través de `SELinux `_, que usa entre otras RedHat, o `Apparmor `_, que usan SuSE, Ubuntu o Debian. De hecho, es normal que en los linux modernos, este mecanismo esté habilitado por defecto. #. Control de accesos basado en roles (|RBAC|) En este mecanismo se predefinen una serie de roles, a cada uno de los cuales se le asigna una serie de privilegios. Un administrador asignará a cada usuario uno o varios roles, de modo que los privilegios del usuario dependerán de cuál sea el rol o los roles que desempeñe. En cierta medida, es equivalente a un modelo |DAC| con |ACL|\ s en el que sólo se asignan permisos a grupos de usuarios, no a usuarios particulares. .. rubric:: Control de accesos discrecional Para la implementación de este modelo, se requiere: #. La **definición de usuarios**. #. La **autenticación**, mediante la cual el sistema operativo identifica al usuario que accede al sistema. Lo habitual es la autenticación mediante nombre de usuario y contraseña, aunque pueden existir otras: parámetros biométricos, claves asimétricas, etc. #. **Autorización**, que permite la definición y aplicación de reglas que definen los privilegios de cada usuario. Básicamente, lo que se conoce como "dar o quitar permisos". En este modelo, todo debe tener un propietario (un proceso, un fichero, un dispositivo) y, en caso de actuar como sujeto, lo hará con los privilegios del propietario, y en caso de ser un objeto, será el propietario el que podrá redefinir sus permisos de acceso para otros usuarios. Por lo general, existe un administrador con poderes plenipotenciarios lo cual incluye poder saltar el proprio control de accesos. En los sistemas *UNIX* este usuario recibe el nombre de **root**. Por otro lado, hay dos métodos prácticos para implementar este modelo: - El estándar |POSIX|, esto es el tradicional de *UNIX*, llamado también sistema |UGO|, que define para cada objeto un usuario propietario y un grupo propietario; y define para el objeto conjuntos diferentes de permisos: para ese usuario, para los usuarios pertenecientes a ese grupo grupo y para los restantes usuarios. - Las listas de control de accesos (|ACL|) que consisten en poder definir para cada objeto los conjuntos de permisos para cualesquiera usuarios y cualesquiera grupos. Por lo general se define un conjunto de permisos por defecto, que serán los que tengan los usuarios que no aparezcan en la lista o no pertenezcan a alguno de los grupos incluidos en la lista. Este es el método que usa *Windows*, aunque en los sistemas *UNIX* modernos se puede habilitar como complemento del anterior para aquellos objetos en los que no sea suficiente el sistema |UGO|, que es menos granular. Control de errores ================== El control de errores del sistema es un tema amplio que incluye varios aspectos: - La recuperación sin colapso del sistema ante el fallo de un proceso. - La restauración del sistema a un estado anterior: puntos de restauración, copias de seguridad. - La generación de registros que permitan llevar a cabo un análisis forense ante la constación e un error. - La actualización del sistema mediante parches que permitan corregir errores de funcionamiento o de seguridad (vulnerabilidades). .. |DAC| replace:: :abbr:`DAC (Discretionary Access Control)` .. |MAC| replace:: :abbr:`MAC (Mandatory Access Control)` .. |RBAC| replace:: :abbr:`RBAC (Role Based Access Control)` .. |UGO| replace:: :abbr:`UGO (User Group Others)` .. |POSIX| replace:: :abbr:`POSIX (Portable Operating System Interface for uniX)`