¿Cómo haces que samba siga el enlace simbólico fuera de la ruta compartida?

61

Este es el servidor Ubuntu 10.04 64 y samba 3.4.7.

Tengo un directorio compartido /home/mit/sharey otro /home/tempque enlace en el compartido:

ln -s /home/temp /home/mit/share/temp

Pero en Windows, después de usar Internet, no puedo abrir S:/temp, pero en Linux es posible acceder /home/mit/share/tempcomo se esperaba.

Esto funciona si enlazo directorios dentro /home/mit/share/temp, así que supongo que samba está restringiendo saltar con un enlace fuera / arriba del directorio compartido.

EDITAR:

Consulte también esta pregunta titulada Ubuntu + última versión de samba, los enlaces simbólicos ya no funcionan en el recurso compartido montado en Windows .

Parece mejor ponerlo unix extensions = noen la sección global follow symlinks = yesy wide links = yessolo en la sección de recursos compartidos, donde realmente lo necesita.

La unix extensionbandera tiene que vivir en la sección global y no en las secciones de acciones individuales. Pero por razones de seguridad, es mejor usar las otras opciones solo donde lo necesite, y no globalmente.

mit
fuente
¿Puedes probar un enlace duro en lugar de un enlace simbólico?
Falmarri

Respuestas:

92

Editar smb.conf

[global]
unix extensions = no

[share]
follow symlinks = yes
wide links = yes

Nota: Si está utilizando una versión más nueva de samba, lo siguiente puede funcionar para usted:

[global]
allow insecure wide links = yes

[share]
follow symlinks = yes
wide links = yes

documentación follow symlinksy wide linksbanderas: https://www.samba.org/samba/docs/using_samba/ch08.html#samba2-CHP-8-TABLE-1

Mahesh
fuente
Vea también la explicación al final de la pregunta anterior por qué esta es una buena solución.
mit
En caso de que alguien más tenga problemas con todos esos comentarios que ofuscan este archivo bastante corto: copie en una copia de seguridad y vuelva a crear filtrado: 1: cp /etc/samba/smb.conf /etc/samba/smb.conf.bak2:grep -o '^[^#;]*' smb.conf.bak >smb.conf
Frank Nocke
no [share]quiere decir [<share_name>]?
Necktwi
@neckTwi - Eso es lo que asumí, y funcionó para mí.
Geoff
@ Geoff ¡Eso no funcionó para mí! cambiado asshfs
Necktwi
11

Saludos, he intentado poner esto en la configuración para corregir los enlaces simbólicos de Windows para mi configuración, pero no estoy seguro de si afectará al cliente de Windows, de lo contrario, seguirá los enlaces simbólicos cuando me conecte a este cuadro.

[global]                                                                        
unix extensions = no
Qiqi
fuente
La respuesta de Qiqi está de acuerdo con esta: superuser.com/questions/128716/…
Janus
Sí, esto definitivamente soluciona el problema en mi entorno.
TML
10

Alternativamente a las otras respuestas, para mantener las extensiones de Unix habilitadas, es posible usar:

[global]
allow insecure wide links = yes

[share]
follow symlinks = yes
wide links = yes
usuario1182474
fuente
no [share]quiere decir [<share_name>]?
Necktwi
Sí, puede ser cualquier sección smb.conf que "describa un recurso compartido (conocido como" recurso compartido ")" (citado de la documentación). También puede estar en una sección especial [homes], donde lo uso. Consulte la documentación para más detalles.
user1182474
4

Para permitir que los clientes de Samba sigan enlaces simbólicos fuera de la ruta compartida, todo lo que necesita en la configuración de Samba es:

[global]
allow insecure wide links = yes
unix extensions = no

[myShare]
wide links = yes

(Además de las definiciones de Samba comparte, por supuesto). Esto es, teóricamente, suficiente para clientes * nix.

NB: la directiva "seguir enlaces simbólicos" no es necesaria ya que por defecto es "sí"

En cuanto a los clientes de Windows, todavía falta 1 configuración para permitirles seguir dichos enlaces. Para hacerlo:

  1. abrir un shell de Windows con privilegios de administrador
  2. correr :

    fsutil behavior set SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1
    
  3. reiniciar para recargar la configuración

NB: se puede obtener el mismo resultado editando el registro de Windows. Ver enlaces a continuación

fuentes:

Httqm
fuente
0

Es posible que deba abordar más que solo el archivo de configuración de Samba si está ejecutando AppArmor.

Necesita las siguientes directivas en su smb.conf:

follow symlinks = yes
wide links = yes
unix extensions = no
# No need for "allow insecure wide links" unless you want "unix extensions = yes"

Pero, AppArmor bloquea el acceso a partes del sistema de archivos de acuerdo con su propia semántica de conjunto de reglas. Entonces, si su enlace simbólico dentro de Samba apuntó a una ubicación que AppArmor bloquearía, Samba negaría el acceso.

En mi sistema, Samba actualiza los perfiles de AppArmor en el inicio / detención del servicio, por lo que podría cambiar un perfil de AppArmor, pero me arriesgo a que Samba u otro programa lo sobrescriba. En cambio, decidí crear un recurso compartido inaccesible en Samba haciendo referencia a la ubicación que contenía el objetivo de enlace simbólico al que quería acceder (todavía en smb.conf):

# The following is a hack for AppArmor to allow the path
[share1 for AppArmor] # Or whichever name you choose
    browseable = no
    path = /home # Point to directory or parent directory of the location to access
    read only = yes
    guest ok = no
    valid users = none
palswim
fuente