Wie kann man Samba dazu bringen, Symlink außerhalb des gemeinsamen Pfades zu folgen?

61

Dies ist Ubuntu Server 10.04 64 und Samba 3.4.7.

Ich habe ein freigegebenes Verzeichnis /home/mit/shareund ein anderes /home/temp, das ich mit dem freigegebenen verknüpfe:

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

Aber unter Windows kann ich nach der Verwendung des Internets nicht öffnen S:/temp, aber unter Linux ist es möglich, /home/mit/share/tempwie erwartet darauf zuzugreifen .

Dies funktioniert, wenn ich Verzeichnisse innerhalb verknüpfe. /home/mit/share/tempIch vermute, Samba beschränkt sich darauf, mit einem Link außerhalb / oberhalb des freigegebenen Verzeichnisses zu springen.

BEARBEITEN:

Siehe auch diese Frage mit dem Titel Ubuntu + neueste Samba-Version. Symlinks funktionieren nicht mehr auf Freigaben, die in Windows gemountet sind .

Es scheint am besten setzen unix extensions = noin den globalen Abschnitt und follow symlinks = yesund wide links = yesnur in die Aktien, wo es wirklich brauchen.

Die unix extensionFlagge muss im globalen Bereich und nicht in den einzelnen Aktienbereichen stehen. Aus Sicherheitsgründen ist es jedoch besser, die anderen Optionen nur dort zu verwenden, wo Sie sie benötigen, und nicht global.

mit
quelle
Können Sie einen Hardlink anstelle eines Symlinks ausprobieren?
Falmarri

Antworten:

92

Bearbeite die smb.conf

[global]
unix extensions = no

[share]
follow symlinks = yes
wide links = yes

Hinweis: Wenn Sie eine neuere Version von Samba verwenden, funktioniert möglicherweise Folgendes für Sie:

[global]
allow insecure wide links = yes

[share]
follow symlinks = yes
wide links = yes

Dokumentation zu follow symlinksund wide linksFlags: https://www.samba.org/samba/docs/using_samba/ch08.html#samba2-CHP-8-TABLE-1

Mahesh
quelle
Siehe auch die Erklärung am Ende der obigen Frage, warum dies eine gute Lösung ist.
Mit
Für den Fall, dass jemand anderes mit all den Kommentaren zu kämpfen hat, die diese ziemlich kurze Datei verschleiern: In eine Sicherungskopie kopieren und gefiltert neu erstellen: 1: cp /etc/samba/smb.conf /etc/samba/smb.conf.bak2:grep -o '^[^#;]*' smb.conf.bak >smb.conf
Frank Nocke
nicht [share]bedeuten [<share_name>]?
Necktwi
@neckTwi - Das habe ich angenommen und es hat bei mir funktioniert.
Geoff
@Geoff Das hat bei mir nicht funktioniert! geschaltet aufsshfs
Necktwi
11

Grüße, ich habe versucht, dies in die Konfiguration zu übernehmen, um Symlinks für Windows für mein Setup zu korrigieren. Ich bin mir jedoch nicht sicher, ob dies Auswirkungen auf den Windows-Client hat. Andernfalls folgt es Symlinks, wenn ich eine Verbindung zu dieser Box herstelle.

[global]                                                                        
unix extensions = no
Qiqi
quelle
Qiqis Antwort stimmt mit dieser überein: superuser.com/questions/128716/…
Janus
Ja, dies behebt definitiv das Problem in meiner Umgebung.
TML
10

Alternativ zu den anderen Antworten können Sie auch Folgendes verwenden, um die Unix-Erweiterungen zu aktivieren:

[global]
allow insecure wide links = yes

[share]
follow symlinks = yes
wide links = yes
user1182474
quelle
nicht [share]bedeuten [<share_name>]?
Necktwi
Ja, es kann sich um einen beliebigen Abschnitt in der Datei smb.conf handeln, der eine gemeinsam genutzte Ressource (als "Freigabe" bezeichnet) beschreibt (siehe Dokumentation). Es kann auch in einem speziellen Bereich sein [homes], in dem ich es benutze. Einzelheiten finden Sie in der Dokumentation .
user1182474
4

Damit Samba-Clients Symlinks außerhalb des freigegebenen Pfads folgen können, müssen Sie in der Samba-Konfiguration lediglich Folgendes ausführen:

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

[myShare]
wide links = yes

(Zusätzlich zu den Samba-Freigaben-Definitionen selbst natürlich). Dies ist theoretisch für * nix-Clients ausreichend.

Hinweis: Die Direktive "follow symlinks" ist nicht erforderlich, da sie standardmäßig "yes" ist.

Bei Windows-Clients fehlt immer noch eine Einstellung, damit sie solchen Links folgen können. Um dies zu tun:

  1. Öffnen Sie eine Windows-Shell mit Administratorrechten
  2. Lauf :

    fsutil behavior set SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1
    
  3. Starten Sie neu, um die Einstellungen neu zu laden

Hinweis: Das gleiche Ergebnis kann durch Bearbeiten der Windows-Registrierung erzielt werden. Siehe unten stehende Links

Quellen:

Httqm
quelle
0

Sie müssen möglicherweise mehr als nur die Samba-Konfigurationsdatei adressieren, wenn Sie AppArmor ausführen.

Sie benötigen die folgenden Richtlinien in Ihrem smb.conf:

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

AppArmor blockiert jedoch den Zugriff auf Teile des Dateisystems gemäß seiner eigenen Regelsatzsemantik. Wenn Ihr Symlink in Samba auf einen Speicherort verweist, den AppArmor blockieren würde, würde Samba den Zugriff verweigern.

Auf meinem System aktualisiert Samba AppArmor-Profile beim Starten / Beenden des Dienstes, sodass ich ein AppArmor-Profil ändern kann, aber riskiere, dass Samba oder ein anderes Programm es überschreibt. Stattdessen habe ich beschlossen, in Samba eine unzugängliche Freigabe zu erstellen, die auf den Speicherort verweist, der das Symlink-Ziel enthält, auf das ich zugreifen möchte (noch in 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
Kumpelschwimmen
quelle