Restricción de acceso a unidades de almacenamiento externo.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2014 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.

Introducción.

En los entornos corporativos y algunas empresas que utilizan GNU/Linux como sistema operativo de escritorio, es una práctica común bloquear el acceso a unidades de disco óptico y unidades de almacenamiento USB. Hay varias formas de lograr este objetivo. Pueden usarse individualmente o en combinación, dependiendo de lo que prefiera el administrador del sistema.

Procedimientos.

Bloquear el uso de unidades de disco óptico.

El procedimiento es el mismo para CentOS, Fedora™, openSUSE™, Red Hat™ Enterprise Linux y SUSE™ Linux Enterprise.

Edite el archivo /etc/fstab:

vim /etc/fstab

Añada el siguiente contenido:

/dev/dvd    /media/dvd    auto    noauto,defaults    0 0

Lo anterior hará que la unidad de disco óptico sólo pueda ser utilizada por root.

Lo anterior se complementa estableciendo como valor obligatorio que jamás se monten automáticamente las unidades de almacenamiento externo.

gconftool-2 --direct --config-source \
    xml:readwrite:/etc/gconf/gconf.xml.mandatory \
    /apps/nautilus/preferences/media_automount \
    --type bool false

Sólo para SUSE™ Linux Enterprise 10, la ruta del directorio gconf.xml.mandatory corresponde a /etc/opt/gnome/gconf/gconf.xml.mandatory:

gconftool-2 --direct --config-source \
     xml:readwrite:/etc/opt/gnome/gconf/gconf.xml.mandatory \
    /apps/nautilus/preferences/media_automount \
    --type bool false

Concluido lo anterior, si un usuario regular inserta un CD o DVD en la unidad óptica, la unidad jamás será montada y si el usuario intenta montar manualmente le será denegado el acceso mostrando una ventana de alerta.

Bloquear uso del módulo usb-storage o uas del núcleo de Linux.

Es posible bloquear el acceso al módulo usb-storage o bien el módulo uas, del núcleo de Linux. Éstos son los dos controladores utilizados para acceder a cualquier tipo de unidad de almacenamiento externo por USB.

En CentOS, Fedora™ y Red Hat™ Enterprise Linux.

Utilice cualquier editor de texto para crear el archivo /etc/modprobe.d/usb-storage.conf:

vim /etc/modprobe.d/usb-storage.conf

Añada el siguiente contenido:

install usb-storage /bin/false

Reinicie el sistema para que surtan efecto los cambios o bien desconecte cualquier unidad de almacenamiento USB que esté presente en el sistema y ejecute lo siguiente:

rmmod usb-storage
depmod -a

Inserte cualquier unidad de almacenamiento USB para verificar que es imposible acceder hacia el contenido de ésta.

Si lo prefiere, también es posible permitir cargar el módulo usb-storage, pero emitiendo un mensaje de correo electrónico que informará al administrador del sistema cuando se inserte una unidad de almacenamiento USB.

Utilice cualquier editor de texto para crear o modificar el archivo /etc/modprobe.d/usb-storage.conf:

Elimine la configuración previa y/o añada el siguiente contenido:

install usb-storage /bin/mail \
    -s "Unidad USB insertada en $HOSTANAME" \
    alguien@algo.com

Reinicie el sistema para que surtan efecto los cambios o bien desconecte cualquier unidad de almacenamiento USB que esté presente en el sistema y ejecute lo siguiente:

rmmod usb-storage
depmod -a

Espere unos minutos y verifique el mensaje que ha emitido el sistema en el buzón entrada de la cuenta de correo electrónico definida.

En openSUSE™ 11.

En openSUSE se utiliza de modo predeterminado el módulo uas (USB Attached SCSI), el cual era una alternativa más moderna y que tenía un mejor desempeño y funcionamiento que el módulo usb-storage. En enero de 2013 fue declarado como módulo estropeado en el árbol de desarrollo del núcleo de Linux, por lo cual versiones posteriores de openSUSE™ volvieron a utilizar el módulo usb-storage.

Utilice cualquier editor de texto para crear el archivo /etc/modprobe.d/usb-storage.conf:

vim /etc/modprobe.d/usb-storage.conf

Añada el siguiente contenido:

install uas /bin/false

Reinicie el sistema para que surtan efecto los cambios o bien desconecte cualquier unidad de almacenamiento USB que esté presente en el sistema y ejecute lo siguiente:

rmmod uas
depmod -a

Inserte cualquier unidad de almacenamiento USB para verificar que es imposible acceder hacia el contenido de ésta.

Si lo prefiere, también es posible permitir cargar el módulo uas, pero emitiendo un mensaje de correo electrónico que informará al administrador del sistema cuando se inserte una unidad de almacenamiento USB.

Utilice cualquier editor de texto para crear o modificar el archivo /etc/modprobe.d/uas.conf:

Elimine la configuración previa y/o añada el siguiente contenido:

install uas /usr/bin/mail \
    -s "Unidad USB insertada en $HOSTANAME" \
    alguien@algo.tld

Reinicie el sistema para que surtan efecto los cambios o bien desconecte cualquier unidad de almacenamiento USB que esté presente en el sistema y ejecute lo siguiente:

rmmod uas
depmod -a

Espere unos minutos y verifique el mensaje que ha emitido el sistema en el buzón entrada de la cuenta de correo electrónico definida.

En SUSE™ Linux Enterprise y openSUSE™ 12 y 13.

Utilice cualquier editor de texto para modificar el archivo /etc/modprobe.conf.local:

vim /etc/modprobe.conf.local

Añada el siguiente contenido:

install usb-storage /bin/false

Reinicie el sistema para que surtan efecto los cambios o bien desconecte cualquier unidad de almacenamiento USB que esté presente en el sistema y ejecute lo siguiente:

rmmod usb-storage
depmod -a

Inserte cualquier unidad de almacenamiento USB para verificar que es imposible acceder hacia el contenido de ésta.

Si lo prefiere, también es posible permitir cargar el módulo usb-storage, pero emitiendo un mensaje de correo electrónico que informará al administrador del sistema cuando se inserte una unidad de almacenamiento USB.

Utilice cualquier editor de texto para modificar el archivo /etc/modprobe.conf.local:

vim /etc/modprobe.conf.local

Elimine la configuración previa y/o añada el siguiente contenido:

install usb-storage /usr/bin/mail \
    -s "Unidad USB insertada en $HOSTANAME" \
    alguien@algo.com

Reinicie el sistema para que surtan efecto los cambios o bien desconecte cualquier unidad de almacenamiento USB que esté presente en el sistema y ejecute lo siguiente:

rmmod usb-storage
depmod -a

Espere unos minutos y verifique el mensaje que ha emitido el sistema en el buzón entrada de la cuenta de correo electrónico definida.

Reglas de UDEV para impedir el acceso a unidades de almacenamiento USB.

UDEV es una colección de herramientas y un servicio que se encarga de gestionar los eventos recibidos desde el núcleo del sistema, encargándose de éstos en el espacio de usuario. Se encarga de gestionar los permisos correspondientes, crear y eliminar enlaces simbólicos importantes hacia los nodos de los dispositivos que están dentro del directorio /dev, cuando los componentes de hardware son descubiertos o removidos del sistema.

En CentOS, Fedora™, SUSE™ Linux Enterprise y Red Hat™ Enterprise Linux.

Para restringir el acceso a las unidades de almacenamiento USB, se debe crear un archivo denominado /etc/udev/rules.d/10-usb-storage.rules:

vim /etc/udev/rules.d/10-usb-storage.rules

Añada el siguiente contenido:

DRIVER=="usb-storage", OPTIONS+="ignore_device last_rule"

Lo anterior establece que al utilizar el módulo usb-storage, se ignoren los dispositivos a los que corresponda y que se impida añadir nuevas reglas que pudieran cambiar esta política.

Para que apliquen los cambios, es necesario reiniciar el sistema.

reboot

Inserte cualquier unidad de almacenamiento USB para verificar que es imposible acceder hacia el contenido de ésta.

En openSUSE™.

Para restringir el acceso a las unidades de almacenamiento USB, se debe crear un archivo denominado /etc/udev/rules.d/10-uas.rules:

vim /etc/udev/rules.d/10-uas.rules

Añada el siguiente contenido:

DRIVER=="uas", OPTIONS+="ignore_device last_rule"

Lo anterior establece que al utilizar el módulo uas, se ignoren los dispositivos a los que corresponda y que se impida añadir nuevas reglas que pudieran cambiar esta política.

Para que apliquen los cambios, es necesario reiniciar el sistema.

reboot

Inserte cualquier unidad de almacenamiento USB para verificar que es imposible acceder hacia el contenido de ésta.

PolicyKit para restringir el acceso a unidades de almacenamiento externo en general.

PolicyKit es un conjunto de herramientas para definir y gestionar la autorización hacia diversas operaciones en el sistema.

En CentOS, Fedora™, openSUSE™ y Red Hat™ Enterprise Linux.

Estos sistemas operativos utilizan PolicyKit 0.94 o versiones más recientes. La configuración varía respecto de las de versiones anteriores.

Lo primero es determinar el estado de la política org.freedesktop.udisks.filesystem-mount-system-internal, ejecutando lo siguiente:

pkaction --action-id \
    org.freedesktop.udisks.filesystem-mount-system-internal \
    --verbose

Para definir la política que sólo permitirá montar unidades de almacenamiento externo (USB, CDROM y DVDROM) al usuario root, se crear el archivo /var/lib/polkit-1/localauthority/50-local.d/udisks.pkla:

vim /var/lib/polkit-1/localauthority/50-local.d/udisks.pkla

Y se añade el siguiente contenido:

[Unidades de almacenamiento]
Identity=unix-user:*
Action=org.freedesktop.udisks.filesystem-mount-system-internal
ResultAny=auth_admin
ResultInactive=auth_admin
ResultActive=auth_admin

Para permitir sólo a un usuario en particular, se cambia unix-user:* (define a cualquier usuario del sistema) por unix-user:usuario. En el siguiente ejemplo se permite el uso solo al usuario fulano:

[Unidades de almacenamiento]
Identity=unix-user:fulano
Action=org.freedesktop.udisks.filesystem-mount-system-internal
ResultAny=auth_admin
ResultInactive=auth_admin
ResultActive=auth_admin

Para verificar lo anterior, se puede ejecutar como root lo siguiente, donde 1586 corresponde al número de identidad de proceso de gnome-session y fulano corresponde al nombre del usuario activo del escritorio:

pkcheck --action-id \
    org.freedesktop.udisks.filesystem-mount-system-internal \
    --process 1586 -u fulano

Lo anterior debe devolver una ventana de autenticación similar a la siguiente.

Ventana de autenticación para administradores.
Ventana de autenticación para administradores.

Si se quiere que en el caso anterior se use la contraseña del mismo usuario, para evitar proporcionar la contraseña de root, cambie auth_admin por auth_self:

[Unidades de almacenamiento]
Identity=unix-user:fulano
Action=org.freedesktop.udisks.filesystem-mount-system-internal
ResultAny=auth_self
ResultInactive=auth_self
ResultActive=auth_self

Para verificar lo anterior, se puede ejecutar como root lo siguiente, donde 1586 corresponde al número de identidad de proceso de gnome-session y fulano corresponde al nombre del usuario activo del escritorio:

pkcheck --action-id \
    org.freedesktop.udisks.filesystem-mount-system-internal \
    --process 1586 -u fulano

Lo anterior debe devolver una ventana de autenticación similar a la siguiente.

Ventana de autenticación para usuario.
Ventana de autenticación para usuario.

Inserte una unidad de almacenamiento USB o disco CD o DVD y verifique que aparece una ventana de autenticación, similar a cualquiera de las de arriba.

Si sólo se desea prohibir el acceso a las unidades de almacenamiento externo a un solo usuario, se cambia auth_self por no:

[Unidades de almacenamiento]
Identity=unix-user:fulano
Action=org.freedesktop.udisks.filesystem-mount-system-internal
ResultAny=no
ResultInactive=no
ResultActive=no

Lo anterior impedirá que el usuario fulano pueda hacer uso de unidades de almacenamiento externo por completo, sin mostrar siquiera la ventana de autenticación.

Para eliminar la política, simplemente se elimina el archivo udisks.pkla.

rm -f /var/lib/polkit-1/localauthority/50-local.d/udisks.pkla

En SUSE™ Linux Enterprise 11.

Este sistemas operativo utiliza PolicyKit 0.90. La configuración varía respecto de las de versiones posteriores. Cabe señalar que SUSE™ Linux Enterprise 10 carece de soporte para PolicyKit, por lo cual el procedimiento sólo aplica para la versión 11 y posteriores.

Lo primero es determinar el estado de la política org.freedesktop.hal.storage.mount-removable, ejecutando lo siguiente:

polkit-action --action \
    org.freedesktop.hal.storage.mount-removable

Para definir la política que sólo permitirá montar unidades de almacenamiento externo (USB, CDROM y DVDROM) al usuario root, se edita el archivo /etc/polkit-default-privs.local:

vim /etc/polkit-default-privs.local

Y se añade el siguiente contenido:

org.freedesktop.hal.storage.mount-removable    auth_admin_keep_always

Al terminar, ejecute set_polkit_default_privs para que se active la política.

set_polkit_default_privs

Ejecute polkit-auth del siguiente modo para permitir que sólo un usuario regular en particular pueda hacer uso de las unidades de almacenamiento externo:

polkit-auth --user fulano --grant \
    org.freedesktop.hal.storage.mount-removable

Para deshacer el cambio, se ejecuta lo siguiente:

polkit-auth --user fulano --revoke \
    org.freedesktop.hal.storage.mount-removable

Para impedir que un solo usuario sea quien tenga prohibido hacer uso de las unidades de almacenamiento externo, se omiten todos los procedimientos anteriores y se ejecuta:

polkit-auth --user fulano --block \
    org.freedesktop.hal.storage.mount-removable

Para determinar los permisos de acceso de un usuario en particular para org.freedesktop.hal.storage.mount-removable, se ejecuta:

polkit-auth --user fulano --explicit \
    org.freedesktop.hal.storage.mount-removable

Inserte una unidad de almacenamiento USB o disco CD o DVD y verifique que aparece una ventana de autenticación, similar a las de arriba.