Permitir que cualquier persona monte cualquier sistema de archivos en cualquier ubicación abriría una serie de agujeros de seguridad.
- Una obvia es que el controlador del sistema de archivos obtiene acceso al dispositivo subyacente. Este puede ser un hardware que el administrador del sistema no desea exponer a los usuarios.
- Otra obvia es que puede haber archivos que permitan a los usuarios obtener privilegios. Un shell root de setuid, por ejemplo. O un nodo de dispositivo que permite el acceso sin formato a la memoria o disco u otro recurso de hardware. Permitir que un usuario monte un sistema de archivos arbitrario le permite crear programas setuid / setgid arbitrarios y nodos de dispositivo .
- Un problema más sutil es que el montaje de un sistema de archivos puede crear archivos en una ubicación inesperada. Algunas aplicaciones leen archivos en ubicaciones fijas o confían en archivos donde la cadena de directorios desde la raíz hasta el archivo es propiedad exclusiva de un usuario. Montar un sistema de archivos diferente a lo largo de la ruta podría permitir al montador reemplazar archivos legítimos por contenido arbitrario. Por ejemplo, podría montar una copia de
/etc
con un archivo diferente passwd
con una contraseña de root establecida por usted. O puede montar un directorio diferente en la parte superior del directorio principal de un usuario y proporcionar su propio .ssh/authorized_keys
.
- Otra preocupación es que los controladores del sistema de archivos a menudo se escriben para el rendimiento y la confiabilidad con sistemas de archivos bien formados. Si un sistema de archivos tiene un formato incorrecto, puede desencadenar un error en el controlador que permite a quien controle el dispositivo subyacente ejecutar código en el contexto del controlador del sistema de archivos, que tradicionalmente se ejecuta en el kernel.
Puede declarar un dispositivo, punto de montaje y opciones de montaje en /etc/fstab
para montar un sistema de archivos automáticamente en tiempo de arranque. Depende del administrador del sistema no poner nada "peligroso" allí, por ejemplo, no montar sistemas de archivos desconocidos en las ubicaciones del sistema, deshabilitar setuid excepto en el sistema de archivos raíz, etc.
La forma anticuada de permitir que los usuarios ordinarios monten sistemas de archivos transitorios es poner la opción de montaje user
en un fstab, típicamente combinado con noauto
. user
implica automáticamente otras tres opciones: nosuid
, nodev
y noexec
. Estas opciones deshabilitan los archivos setuid / setgid (esos bits no tienen efecto), los archivos del dispositivo (los nodos del dispositivo no tienen efecto) y los archivos ejecutables (el bit ejecutable se ignora, excepto en los directorios), respectivamente. Las opciones nosuid
y nodev
son críticas; noexec
se puede deshabilitar (al agregar exec
después de user
) en casi todas las situaciones. Aquí hay una línea de fstab típica para un dispositivo extraíble:
/dev/cdrom /media/cdrom iso9660 noauto,user,exec
Un método más moderno para permitir a los usuarios montar dispositivos extraíbles es instalar el programa pmount
. Este programa tiene políticas más flexibles que fstab, que solo permite una lista predefinida. Pmount impone varias restricciones, incluido el requisito de que el dispositivo se declare como extraíble y el punto de montaje sea un directorio vacío debajo de /media
.
Para los recursos de red, el enfoque tradicional para ir más allá de una lista predefinida es un automounter . El montador automático normalmente se configura para permitir a los usuarios montar solo sistemas de archivos de red (NFS, Samba), solo desde hosts seleccionados (o al menos solo dentro de un dominio), con opciones predefinidas que incluyen nodev
y nosuid
.
Un enfoque más moderno para permitir a los usuarios montar sistemas de archivos es mover el controlador del sistema de archivos fuera del kernel. FUSE es el estándar de facto aquí (en Solaris, Linux, * BSD, OSX). El usuario debe tener acceso al dispositivo subyacente (si corresponde), ya que todos los accesos a dispositivos se realizan mediante un proceso sin privilegios. Por el mismo motivo, un error en el controlador del sistema de archivos no comprometerá la seguridad del sistema operativo. El usuario debe poseer el punto de montaje, por lo que no podrá hacer que aparezcan los archivos donde, de lo contrario, no podrá hacer que aparezcan los archivos. Los bits setuid y setgid se ignoran. Sin embargo, es posible hacer que los archivos sean propiedad de cualquier usuario, no solo el usuario que realiza el montaje.