Guía del administrador de TI (MDM)

Implementación mediante MDM

Network Share Mounter puede configurarse completamente a través de un perfil de configuración estándar de macOS. Todos los ajustes se leen desde el dominio de preferencias de.fau.rrze.NetworkShareMounter.

Para simplificar la creación de perfiles, proporcionamos un esquema de manifiesto JSON para Jamf Pro y un manifiesto para el iMazing Profile Editor.

Para la distribución mediante AutoPKG, hay recetas disponibles en de.fau.rrze.pkg.networkShareMounter.


1. Recursos compartidos gestionados (managedNetworkShares)

El array managedNetworkShares define qué recursos compartidos de red se despliegan centralmente para los usuarios. Cada entrada es un diccionario con las siguientes claves:

ClaveTipoRequeridoDescripción
networkShareStringLa URL del recurso compartido, p. ej. smb://fileserver.example.com/share. El marcador de posición %USERNAME% se reemplaza en tiempo de ejecución por el nombre de inicio de sesión de macOS del usuario.
authTypeStringMétodo de autenticación: krb (Kerberos/SSO), pwd (nombre de usuario + contraseña) o guest. Por defecto: krb.
mountPointStringReemplaza el nombre del directorio local utilizado como punto de montaje. Solo es relevante cuando la ubicación de montaje no es /Volumes. Dejar vacío para usar el nombre del recurso compartido.
displayNameStringNombre para mostrar del recurso compartido dentro de la app. Si no se establece, se usa el nombre del recurso compartido.
usernameStringDefine previamente un nombre de usuario para recursos del tipo pwd. Si se omite, se le solicitará al usuario.
externalKerberosManagementStringEstablecer en "true" si los tickets Kerberos para este recurso son gestionados externamente (vinculación AD, Jamf Connect, Apple SSO Extension). NSM montará el recurso sin interferir en la gestión de tickets y no mostrará el aviso «perfil requerido». Solo relevante para authType: krb.
kerberosRealmStringReemplazo del realm Kerberos por recurso compartido. Se usa junto con externalKerberosManagement para identificar qué perfil externo asignar. Por defecto usa la configuración global kerberosRealm.
autoMountString"true" (por defecto): el recurso se monta automáticamente al iniciar y cuando cambia la red. "false": el recurso aparece en el menú pero nunca se monta automáticamente — el usuario puede montarlo a demanda.

Ejemplo de payload:

<key>managedNetworkShares</key>
<array>
    <!-- Recurso Kerberos, montado automáticamente, gestión externa de tickets -->
    <dict>
        <key>networkShare</key>
        <string>smb://fileserver.example.com/global</string>
        <key>authType</key>
        <string>krb</string>
        <key>externalKerberosManagement</key>
        <string>true</string>
        <key>displayName</key>
        <string>Global Data</string>
    </dict>
    <!-- Recurso con contraseña, directorio personal por usuario, solo montaje manual -->
    <dict>
        <key>networkShare</key>
        <string>smb://home.example.com/%USERNAME%</string>
        <key>authType</key>
        <string>pwd</string>
        <key>mountPoint</key>
        <string>My Home Drive</string>
        <key>autoMount</key>
        <string>false</string>
    </dict>
</array>

Nota: El array heredado networkShares de la versión 2 todavía se acepta por compatibilidad, pero no debe usarse en perfiles nuevos.


2. Autenticación y Kerberos

Estas claves configuran cómo NSM gestiona los tickets Kerberos y la identidad del usuario.

ClaveTipoPor defectoDescripción
kerberosRealmStringDominio Kerberos/AD para la autenticación de usuarios (p. ej. EXAMPLE.COM). Cuando está configurado, NSM gestiona automáticamente la obtención y renovación de tickets Kerberos. Necesario para el SSO Kerberos gestionado por la app.
kerberosProfileDisplayNameStringNombre descriptivo para el perfil de autenticación Kerberos que se muestra en los ajustes de la app. Si no se establece, se usa directamente el nombre del realm (p. ej. EXAMPLE.COM). Útil cuando se prefiere un nombre legible como "Red Corporativa" frente a la cadena técnica del realm.
usernameOverrideStringReemplaza la variable %USERNAME% utilizada en las rutas de recursos compartidos. Usar cuando el nombre de inicio de sesión local de macOS difiere del nombre de usuario de AD o de red.

Gestión de la expiración de contraseñas

Cuando kerberosRealm está configurado, NSM puede avisar a los usuarios antes de que expire su contraseña de AD. Dos umbrales independientes controlan el comportamiento de los avisos:

ClaveTipoPor defectoDescripción
ExpirationCountdownStartDayInteger14Aviso pasivo. Días antes de la expiración de la contraseña en que aparece silenciosamente un contador en la barra de menús. El usuario solo lo ve al abrir el menú — sin interrupciones. Establecer en 0 para desactivar completamente todas las funciones de expiración. Equivale a la clave homónima de Apple Kerberos SSO Extension.
ExpirationNotificationStartDayInteger14Aviso activo. Días antes de la expiración en que se muestra automáticamente un cuadro de diálogo de advertencia una vez al día. Debe establecerse por debajo de ExpirationCountdownStartDay para que el diálogo solo interrumpa cuando la expiración sea realmente inminente. Equivale a la clave homónima de Jamf Connect / Apple Kerberos SSO Extension.
passwordChangeURLStringURL de un portal web de autoservicio de contraseñas (SSPR). Si se establece, aparece un botón Cambiar contraseña en el diálogo de expiración que abre esta URL en el navegador predeterminado. Si no se establece, el usuario puede cambiar la contraseña directamente en la app (requiere kerberosRealm).
allowPasswordChangeBooleanfalseCuando es true, se muestra permanentemente un elemento Cambiar contraseña… en la barra de menús, incluso antes de alcanzar el umbral de expiración. Se transforma automáticamente en el contador de expiración cuando se alcanza el umbral. Si también se establece passwordChangeURL, al hacer clic se abre esa URL en lugar del diálogo integrado. Equivale a la clave homónima de Apple Kerberos SSO Extension.

Consejo — estrategia de expiración en dos niveles: Establezca ExpirationCountdownStartDay más alto que ExpirationNotificationStartDay. Ejemplo: el contador aparece a los 14 días (pasivo, visible solo en el menú), el diálogo a los 7 días (activo, una vez al día). Establecer ExpirationCountdownStartDay en 0 desactiva ambos avisos por completo.


3. Inicio automático y ciclo de vida de la app

Estas claves controlan si la app se inicia automáticamente al iniciar sesión y cómo se comporta cuando el usuario la cierra.

ClaveTipoPor defectoDescripción
autostartBooleanfalseCuando se despliega como clave MDM bloqueada, el valor se aplica en cada inicio de la app. Cuando se despliega como valor predeterminado no bloqueado, solo se aplica en el primer inicio — después el usuario conserva el control.
canChangeAutostartBooleantrueControla únicamente la visibilidad del interruptor de inicio automático en los ajustes de la app. Establecer en false para desactivarlo visualmente. No afecta a la aplicación MDM. Para forzar el estado del inicio automático en cada inicio, desplegar autostart como clave bloqueada.
canQuitBooleantrueCuando es true, el usuario puede cerrar la app desde la barra de menús. Establecer en false para eliminar completamente el elemento Salir.
unmountOnExitBooleantrueCuando es true, todos los recursos compartidos gestionados se desmontan automáticamente al cerrar la app.

Cómo funciona la aplicación del inicio automático (macOS 13+)

NSM utiliza la API SMAppService de Apple para registrarse como elemento de inicio de sesión. macOS gestiona esto como un LaunchAgent en /Library/LaunchAgents/de.fau.rrze.NetworkShareMounter.plist (propiedad de root). Este es el comportamiento estándar de macOS, con las siguientes implicaciones para los administradores MDM:

  • El comando osascript tell application "System Events" to delete login item "…" no funciona para los elementos registrados con SMAppService. System Events solo gestiona los elementos de inicio de sesión de usuario del estilo antiguo.
  • Cuando se aplica autostart = false mediante una clave MDM bloqueada, NSM llama a SMAppService.unregister() en cada inicio y macOS elimina el archivo LaunchAgent automáticamente.
  • Si gestiona el inicio automático mediante su propio LaunchAgent o payload de elementos de inicio de sesión, establezca autostart = false como clave bloqueada para evitar que NSM registre un elemento en conflicto.

Impedir que los usuarios desactiven el inicio automático

macOS 13 (Ventura) y versiones posteriores permiten a los usuarios desactivar libremente las apps en segundo plano desde Preferencias del Sistema. Para forzar el inicio automático e impedir que los usuarios desactiven NSM, despliegue un payload de Managed Login Items junto con su perfil de configuración:

  • Rule Type: Bundle Identifier
  • Rule Value: de.fau.rrze.NetworkShareMounter

Activar el inicio automático inicial

Debido al diseño de seguridad de macOS, una app debe abrirse al menos una vez antes de que surta efecto el registro del elemento de inicio de sesión. Para un despliegue silencioso sin interacción del usuario, configure su MDM para iniciar NSM una vez inmediatamente después de la instalación o en el primer inicio de sesión.

Ejemplo de política Jamf:

  • Trigger: Login
  • Frequency: Once per user per computer
  • Command: sudo -u $(stat -f%Su /dev/console) open -a "/Applications/Network Share Mounter.app"

4. Interfaz de usuario

Estas claves controlan la ubicación de montaje, la apariencia de la barra de menús y qué elementos del menú son accesibles para los usuarios.

ClaveTipoPor defectoDescripción
locationStringRuta donde se montan los recursos compartidos de red. El valor predeterminado es una carpeta localizada en el directorio personal del usuario (p. ej. ~/Network Shares). ⚠️ Se recomienda encarecidamente dejar este campo vacío y usar el valor predeterminado. Cambiarlo puede romper la integración con Finder.
cleanupLocationDirectoryBooleanfalseCuando es true, NSM elimina archivos y directorios vacíos en la ubicación de montaje que impedirían montar un recurso compartido. Leer la documentación detenidamente antes de activarlo — esta opción modifica el sistema de archivos del usuario.
showMountsInMenuBooleantrueCuando es true, los recursos compartidos montados y desmontados se listan individualmente en la barra de menús para un acceso rápido con un solo clic.
helpURLStringURL al servicio de asistencia interno o a la documentación de TI de su organización. Cuando está establecida, aparece en la barra de menús el elemento Acerca de Network Share Mounter que abre esta URL en el navegador predeterminado.

Personalización de los elementos del menú

Puede mostrar, ocultar o deshabilitar elementos individuales de la barra de menús con las siguientes claves. Establezca el valor en hidden para eliminar el elemento completamente, o en disabled para desactivarlo sin eliminarlo. Si una clave no está definida, el elemento se muestra normalmente.

ClaveControla
menuConnectSharesAcción Montar recursos compartidos
menuDisconnectSharesAcción Desmontar recursos compartidos
menuShowSharesMountDirMostrar recursos montados (abre la carpeta de montaje en Finder)
menuShowSharesElementos individuales de recursos compartidos en la lista
menuSettingsElemento Preferencias…
menuCheckUpdatesElemento Buscar actualizaciones…
menuAboutElemento Acerca de Network Share Mounter (solo visible si helpURL está establecida)
menuQuitElemento Salir de Network Share Mounter

Ejemplo — ocultar Ajustes y Actualizaciones a los usuarios:

<key>menuSettings</key>
<string>hidden</string>
<key>menuCheckUpdates</key>
<string>hidden</string>

5. Gestión de actualizaciones de software

NSM utiliza el framework Sparkle para las actualizaciones automáticas. En entornos gestionados, generalmente se recomienda desactivarlo y gestionar las actualizaciones a través del MDM.

ClaveTipoPor defectoDescripción
disableAutoUpdateFrameworkBooleanfalseInterruptor principal. Establecer en true para desactivar completamente el framework de actualización Sparkle. Cuando está desactivado, no se realizan comprobaciones de actualizaciones y se elimina el elemento Buscar actualizaciones.
SUEnableAutomaticChecksBooleantrueCuando el framework está activado, controla si NSM busca activamente nuevas versiones en segundo plano. Establecer en false para suprimir las comprobaciones manteniendo el framework cargado.
SUAutomaticallyUpdateBooleantrueCuando es true, las actualizaciones se descargan e instalan automáticamente sin pedir confirmación al usuario. Solo tiene efecto cuando SUEnableAutomaticChecks también es true.

Nota: La clave heredada enableAutoUpdater (lógica invertida) todavía se acepta y se migra automáticamente en el primer inicio. Usar disableAutoUpdateFramework en todos los perfiles nuevos.


6. Scripting y automatización

NSM responde a señales UNIX, lo que permite que scripts externos activen operaciones de montaje y desmontaje sin usar la interfaz de la app. Esto es útil para flujos de trabajo de portales de autoservicio que permiten a los usuarios «reparar» unidades de red.

SeñalAcción
SIGUSR1Desmontar todos los recursos compartidos
SIGUSR2Montar todos los recursos compartidos

Ejemplo:

# Obtener el PID
NSM_PID=$(pgrep -x "Network Share Mounter")

# Desmontar todos los recursos compartidos
kill -SIGUSR1 "$NSM_PID"

# Montar todos los recursos compartidos
kill -SIGUSR2 "$NSM_PID"

7. Problemas conocidos y compatibilidad

Jamf Pro: la recopilación de inventario (recon) se bloquea

Cuando los recursos compartidos se montan dentro del directorio personal del usuario (comportamiento predeterminado), el proceso de inventario de Jamf Pro (recon) puede bloquearse indefinidamente. Esto ocurre porque Jamf intenta calcular el tamaño total del directorio personal, lo que provoca que recorra todos los recursos compartidos de red montados.

Solución: En Jamf Pro, vaya a Settings > Computer Management - Management Framework > Inventory Collection y desactive Include home directory sizes. Como alternativa, establezca la clave location en una ruta fuera del directorio personal, como /Volumes.


Network Share Mounter v3

Si todavía depende del Network Share Mounter heredado (v3/v2), la documentación está disponible en nuestro repositorio.