Pasar nombre de usuario y contraseña UNC dentro de una ruta UNC

23

¿Es posible pasar el nombre de usuario y la contraseña UNC dentro de una ruta UNC?

Similar a cómo FTP y SMB admiten esto:

smb://user:[email protected]/share
ftp://user:[email protected]/share

Estoy tratando de obtener un acceso de servicio (no PC de dominio) a una ruta DFS.

¿Conoces alguna otra manera de resolver esto? Podría vincular la PC al dominio y ejecutar el servicio como usuario de dominio, pero ¿y si estuviera usando Linux?

Kvad
fuente

Respuestas:

20

En Windows, no puede poner credenciales en las rutas UNC. Debe proporcionar usando net use, runas /netonlyo cuando se le preguntó por Windows. (Si tiene algunas habilidades de programación, puede almacenar la contraseña de SMB como una "credencial de dominio" usando CredWrite(), lo que equivale a marcar la casilla "Recordar contraseña" en Windows).

En Linux, depende del programa.

  • Gvfs de GNOME acepta la user@hostsintaxis, pero parece ignorar por completo la contraseña. (Sin embargo, puede almacenarlo en GNOME Keyring de antemano).

  • smbclientusa la misma sintaxis UNC que Windows; sin embargo, tiene una --authentication-fileopción desde la cual se pueden leer las credenciales.

  • Ambos programas anteriores están usando libsmbclient y pueden usar la autenticación Kerberos en lugar de las contraseñas: ejecutar kinit [email protected]y usar smbclient -k //host/share. Esto es más seguro que la autenticación de contraseña.

Tenga en cuenta que poner las contraseñas en los URI está en desuso, y no debe confiar en que sea compatible en ningún lado .

Gravedad
fuente
¿Tiene una referencia con respecto a "poner las contraseñas en URI está en desuso"?
Alexis Wilke
2
@AlexisWilke RFC 1738 § 3.3 comenzó por no permitirlos en HTTP, RFC 2396 § 3.2.2 tenía un "no recomendado" más general, y RFC 3986 § 3.2.1 dice "Uso del formato" usuario: contraseña "en la información de usuario el campo está en desuso ".
Grawity
14

Puede asignar una "unidad" a la ruta UNC mediante net use. Los accesos futuros deben compartir la conexión existente

Net Use \\yourUNC\path /user:uname password

Nota: no necesita especificar una letra de unidad

uSlackr
fuente
1

Creo que el nombre de usuario y la contraseña deben pasarse al servidor para la autenticación antes de que se pueda acceder a los archivos, por lo que el código que maneja la conexión SMB debe poder analizar y extraer el nombre de usuario y la contraseña de la URL. Tendrá que verificar si ese código es compatible con este formato o no.

Si no es así, puede montar ese recurso compartido SMB a través de SAMBA y dirigir su programa para que use esa ruta "local". Puede colocar el montaje fstaby utilizar un archivo de contraseña SAMBA para proporcionar las credenciales de usuario. Recuerde establecer los permisos correctos para el archivo de contraseña para que los usuarios normales no puedan leerlo.

Tenga en cuenta que es una mala práctica almacenar las contraseñas en texto claro en los archivos de configuración, por lo que incluso si su programa puede manejar la contraseña en la URL, debe considerar el método de compartir montado.

billc.cn
fuente
¿ fstabNo es un "archivo de configuración de texto claro"?
Grawity
1
Sí, pero en fstab se refiere al archivo de contraseña en lugar de incluir la contraseña directamente. Luego puede asegurar el archivo de contraseña cambiando el propietario a root y el modo a 400.
billc.cn
Eso sigue siendo un archivo de configuración de texto sin formato. Cualquier persona que tenga acceso físico a la máquina puede tener permisos de root mediante reinicio. Los entornos de escritorio como XFCE, KDE y Gnome pueden almacenar credenciales en una bóveda de contraseñas, que probablemente sea la mejor opción.
bobpaul
0

Puede agregar las credenciales en el Panel de control / Usuarios / Administrador de credenciales de Windows para que las credenciales se almacenen en caché. Debería agregar el nombre del dispositivo (server.domain.local) con el nombre de usuario / contraseña del dominio, luego debería poder acceder al recurso compartido sin proporcionar las credenciales nuevamente.

Mate
fuente
0

Una PC que no sea de dominio no debería preocuparse realmente por el DFS al que no se suscribe ni participa directamente. Solo necesita ver una ruta compartida (es decir, servidor / nombre compartido). Los nombres compartidos eliminan todas las consideraciones de ruta del servidor de archivos host.

Honestamente, hay formas más seguras de iniciar sesión en recursos compartidos que UNC URI. UNC y URI son en sí mismos un protocolo de comunicación de texto claro.
Si esa es una seguridad aceptable ... ¿por qué no simplemente tener un recurso compartido abierto sin ningún usuario o contraseña?

La solución inmediata más simple sería dar a las credenciales del servicio acceso directo para iniciar sesión en el recurso compartido (por ejemplo, usuario / contraseña coincidentes). A largo plazo, esa coincidencia no tan obvia podría hacer que recordar actualizar los permisos siempre que las cosas cambien sea difícil. Y también es un área donde MS podría cambiar la forma en que la seguridad pasa las credenciales una vez más y rompe las cosas.

A largo plazo, lo mejor es probablemente asignar permanentemente una letra de unidad local al recurso compartido de red. Proteja la unidad asignada con permisos solo para el servicio (y los administradores apropiados, etc.) y el nombre compartido podría estar oculto con & &.

Pero DFS da una pista a una solución más elegante. Linux requiere que los recursos compartidos de red se monten primero ... generalmente como un directorio en el sistema de archivos raíz de manera muy similar a DFS. El comando de montaje de Linux permite especificar un archivo de credenciales para nombre de usuario y contraseña, lo que los hace más fáciles de actualizar y más seguros que el script de línea de comandos o fstab (es decir, la tabla del sistema de archivos). Estoy bastante seguro de que los shells de comandos de Windows y DFS pueden hacer lo mismo (hace un tiempo). Simplemente sería un sistema DFS diferente privado para la PC de destino para incorporar recursos compartidos de red montados utilizando credenciales almacenadas pasadas por SMB y servicios de inicio de sesión en lugar de codificados en el script y enviados como texto claro UNC.

También considere si esa PC sin dominio seguirá siendo una PC sin dominio a largo plazo. Los servidores de inicio de sesión de Kerberos en * NIX Realms pueden vincularse a dominios de Windows AD. Probablemente lo que desea hacer para cualquier proyecto serio a largo plazo que involucre a más de unas pocas personas. Por otro lado, probablemente sea excesivo para la mayoría de las situaciones de la red doméstica. Sin embargo, si está utilizando DFS por alguna buena razón que no sea el auto desafío de aficionados, probablemente sea el mejor.

Curioso
fuente
0

La respuesta de almacenamiento de credenciales de Matt es la más elegante para una PC moderna con Windows. Aunque no se indica, el almacenamiento de credenciales utilizado debe ser para la cuenta de servicio. Esto es para garantizar la disponibilidad del servicio y para que cualquier otro usuario al que no desee acceder a ese recurso compartido no pueda (por ejemplo, recuerde limpiar las credenciales erróneamente agregadas en una cuenta incorrecta).

Pero si es Windows o Linux heredado, es posible que deba ampliarlo un poco.

Una PC que no sea de dominio no debería preocuparse realmente por el DFS al que no se suscribe ni participa directamente. Solo necesita ver una ruta compartida (es decir, servidor / nombre compartido). Los nombres compartidos eliminan todas las consideraciones de ruta del servidor de archivos host.

Honestamente, hay formas más seguras de iniciar sesión en recursos compartidos que UNC URI. UNC y URI son en sí mismos un protocolo de comunicación de texto claro.
Si esa es una seguridad aceptable ... ¿por qué no simplemente tener un recurso compartido abierto sin ningún usuario o contraseña?

La solución inmediata más simple sería dar a las credenciales del servicio acceso directo para iniciar sesión en el recurso compartido (por ejemplo, usuario / contraseña coincidentes). A largo plazo, esa coincidencia no tan obvia podría hacer que recordar actualizar los permisos siempre que las cosas cambien sea difícil. Y también es un área donde MS podría cambiar la forma en que la seguridad pasa las credenciales una vez más y rompe las cosas.

A largo plazo, lo mejor es probablemente asignar permanentemente una letra de unidad local al recurso compartido de red. Proteja la unidad asignada con permisos solo para el servicio (y los administradores apropiados, etc.) y el nombre compartido podría estar oculto con & &.

Pero DFS da una pista a una solución más elegante. Linux requiere que los recursos compartidos de red se monten primero ... generalmente como un directorio en el sistema de archivos raíz de manera muy similar a DFS. El comando de montaje de Linux permite especificar un archivo de credenciales para nombre de usuario y contraseña, lo que los hace más fáciles de actualizar y más seguros que el script de línea de comandos o fstab (es decir, la tabla del sistema de archivos). Estoy bastante seguro de que los shells de comandos de Windows y DFS pueden hacer lo mismo (hace un tiempo). Simplemente sería un sistema DFS diferente privado para la PC de destino para incorporar recursos compartidos de red montados utilizando credenciales almacenadas pasadas por SMB y servicios de inicio de sesión en lugar de codificados en el script y enviados como texto claro UNC.

También considere si esa PC sin dominio seguirá siendo una PC sin dominio a largo plazo. Los servidores de inicio de sesión de Kerberos en * NIX Realms pueden vincularse a dominios de Windows AD. Probablemente lo que desea hacer para cualquier proyecto serio a largo plazo que involucre a más de unas pocas personas. Por otro lado, probablemente sea excesivo para la mayoría de las situaciones de la red doméstica. Sin embargo, si está utilizando DFS por alguna buena razón que no sea el auto desafío de aficionados, probablemente sea el mejor.

Curioso
fuente