Comment faites-vous que Samba suive un lien symbolique en dehors du chemin partagé?


61

C'est le serveur Ubuntu 10.04 64 et samba 3.4.7.

J'ai un répertoire partagé /home/mit/shareet un autre /home/tempque je relie au répertoire partagé:

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

Mais sous Windows, après avoir utilisé Internet, je ne peux pas ouvrir S:/temp, mais sous Linux, il est possible d’accéder /home/mit/share/tempcomme prévu.

Cela fonctionne si je lie des répertoires à l'intérieur /home/mit/share/temp, donc je suppose que samba est restreint pour sauter avec un lien en dehors / au dessus du répertoire partagé.

MODIFIER:

Voir également cette question intitulée Ubuntu + dernière version de samba, les liens symboliques ne fonctionnent plus sur les partages montés dans Windows .

Il semble préférable de mettre unix extensions = nodans la section globale follow symlinks = yeset wide links = yesuniquement dans la section actions, là où vous en avez vraiment besoin.

Le unix extensiondrapeau doit vivre dans la section globale et non dans les sections de partages individuels. Mais pour des raisons de sécurité, il est préférable d’utiliser les autres options uniquement là où vous en avez besoin, et non globalement.


Pouvez-vous essayer un lien dur au lieu d'un lien symbolique?
Falmarri

Réponses:


92

Editer smb.conf

[global]
unix extensions = no

[share]
follow symlinks = yes
wide links = yes

Remarque: si vous utilisez une version plus récente de samba, les éléments suivants peuvent fonctionner à votre place:

[global]
allow insecure wide links = yes

[share]
follow symlinks = yes
wide links = yes

documentation sur follow symlinkset wide linksdrapeaux: https://www.samba.org/samba/docs/using_samba/ch08.html#samba2-CHP-8-TABLE-1


Voir également l'explication à la fin de la question ci-dessus pour expliquer pourquoi c'est une bonne solution.
Mardi le

Au cas où quelqu'un d'autre aurait du mal à masquer tous ces commentaires obscurcissant ce fichier plutôt court: copier vers une sauvegarde, et recréer filtrée - 1: cp /etc/samba/smb.conf /etc/samba/smb.conf.bak2:grep -o '^[^#;]*' smb.conf.bak >smb.conf
Frank Nocke

veut [share]dire [<share_name>]?
Necktwi

@neckTwi - C'est ce que j'ai supposé, et cela a fonctionné pour moi.
Geoff

@ Geoff Cela n'a pas fonctionné pour moi! changé poursshfs
Necktwi

11

Bonjour, j'ai essayé de mettre cela dans la configuration pour corriger les liens symboliques pour Windows pour ma configuration, mais je ne suis pas sûr que cela affectera le client Windows, sinon il suit les liens symboliques lorsque je me connecte à cette boîte.

[global]                                                                        
unix extensions = no

La réponse de Qiqi est en accord avec celle-ci: superuser.com/questions/128716/…
Janus

Oui, cela résout définitivement le problème dans mon environnement.
TML

10

Alternativement aux autres réponses, pour garder les extensions unix activées, il est possible d’utiliser:

[global]
allow insecure wide links = yes

[share]
follow symlinks = yes
wide links = yes

veut [share]dire [<share_name>]?
Necktwi

Oui, il peut s'agir d'une section de smb.conf qui "décrit une ressource partagée (appelée" partage ")" (citée dans la documentation). Ce peut être aussi dans une section spéciale [homes], où je l'utilise. Voir la documentation pour plus de détails.
user1182474

4

Pour permettre aux clients Samba de suivre les liens symboliques en dehors du chemin partagé, tout ce dont vous avez besoin dans la configuration de Samba est:

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

[myShare]
wide links = yes

(en plus des définitions de partage de samba elles-mêmes, bien sûr). C'est théoriquement suffisant pour les clients * nix.

NB: La directive "suivre les liens symboliques" n'est pas nécessaire car elle prend par défaut "oui".

En ce qui concerne les clients Windows, il manque 1 paramètre pour leur permettre de suivre ces liens. Faire cela :

  1. ouvrir un shell Windows ayant des privilèges d'administrateur
  2. courir :

    fsutil behavior set SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1
    
  3. redémarrer pour recharger les paramètres

NB: le même résultat peut être obtenu en modifiant le registre Windows. Voir les liens ci-dessous

sources :


0

Si vous exécutez AppArmor, vous devrez peut-être traiter davantage que le fichier de configuration Samba.

Vous avez besoin des directives suivantes dans votre smb.conf:

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

Cependant, AppArmor bloque l’accès à certaines parties du système de fichiers en fonction de sa propre sémantique de jeu de règles. Ainsi, si votre lien symbolique dans Samba indiquait un emplacement qu'AppArmor bloquerait, Samba refuserait l'accès.

Sur mon système, Samba met à jour les profils AppArmor au démarrage / à l'arrêt du service afin que je puisse modifier un profil AppArmor, mais que Samba ou un autre programme risque de l'écraser. Au lieu de cela, j'ai décidé de créer un partage inaccessible dans Samba, référençant l'emplacement contenant le lien symbolique auquel je voulais accéder (toujours 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.