Warum folgt auf den absoluten Symlink auf der SAMBA-Freigabe direkt der CIFS-Mount?


7

Wenn eine SMB-Freigabe einen Symlink mit einem absoluten Pfad /share/latest/dir -> /share/data/201407hat, können Windows-Clients problemlos per Link auf Dateien zugreifen.

dir \\smbserver\share\latest\dir\
Directory: \\smbserver\share\latest\dir\
file a ...

Unix-Clients erhalten jedoch einen Fehler auf dem cifs-Mount derselben Freigabe.

ls /mnt/share/latest/dir/ 
/mnt/share/latest/dir/ : No such file or directory

Warum folgt Samba Mount nicht dem Symlink? Wie kann ich einen CIFS-Mount dazu bringen, symbolischen Links zu folgen?

Antworten:


8

Das Problem ist, dass der SAMBA-Server eine spezielle Unterstützung für Unix-Clients (cifs) eingebaut hat. Wenn Sie mount -t cifs auf Ihrem Linux-Host verwenden, werden alle Symlinks unverändert an Sie (cifs client) übergeben.

ls /mnt/share/latest/dir/ -l 
/mnt/share/latest/dir/ -> /opt/share/data/201407

Sie mögen diese Funktionalität vielleicht nicht, aber dies ist eine Designentscheidung, die ihre Vorteile hat. EA ist kein Fehler, es ist eine Funktion! :) Aber es gibt Lösungen:

1) Ersetzen Sie den absoluten Symlink im freigegebenen Verzeichnis durch einen relativen.

smbserver:~> ln -s ../../data/201407 /opt/share/latest/dir

2) Deaktivieren Sie die spezielle Unterstützung für UNIX-Clients auf dem SAMBA-Server. Wenn der Parameter für Unix-Erweiterungen auf "Nein" gesetzt ist, erhalten sowohl Windows- als auch Linux-Clients dieselben Ergebnisse.

smbserver:~# vi /etc/samba/smb.conf
[global]
unix extensions = No
smbserver:~# restart smbd

3) Deaktivieren Sie die spezielle Unterstützung für UNIX auf Ihrem SAMBA-Client. Verwenden Sie die Nounix- Option, wenn Sie die Freigabe bereitstellen. Die Option nounix deaktiviert CIFS-Unix-Erweiterungen, sodass keine UNIX-ACL, Knoten-IDs und Sperre verwendet werden.

client:~$ sudo mount -t cifs -o nounix //smbserver/share /mnt

0

(Aktualisiert diese, wie ich ausgebügelt einige der Knicke)

Das obige ist verwirrend. Sprechen Sie über eine SMB-Freigabe, die von einem Linux-Server oder einem Windows-Server freigegeben wurde?

Ich habe dies gerade überprüft (ich habe mein 'C'-Laufwerk) auf meinem Linux-Client gemountet.

Natürlich funktionieren unter Windows im Stammverzeichnis alle Symlinks. Allerdings sehe ich auf meinem Linux-Client

    s# ll /athenae
total 100663718
drwxr-xr-x 2            0 Sep  9 12:53 $RECYCLE.BIN/
-rwxr-xr-x 1        53342 Dec  4  2011 Cygwin-Terminal.ico*
-rwxr-xr-x 1           51 Dec 10  2009 Cygwin.bat*
-rwxr-xr-x 1       157097 Dec  4  2011 Cygwin.ico*
l--------- 1            0 Jul 16  2013 D -> /??/UNC/Ishtar/Documents
drwxr-xr-x 2            0 Jul 13  2009 Documents and Settings/
drwxr-xr-x 2            0 May  4  2014 Drivers/
drwxr-xr-x 2            0 Jan 16 03:21 Fraps/
l--------- 1            0 Nov 29  2012 Home -> /??/C:/Users/
dr-xr-xr-x 2            0 Aug 28  2013 MSOCache/
drwxr-xr-x 2            0 Sep 18 16:01 PortableApps/
drwxr-xr-x 2            0 Nov  6 19:45 Prog/
drwxr-xr-x 2            0 Jan 17 15:35 Program Files/
drwxr-xr-x 2            0 Jan 17 16:36 Program Files (x86)/
drwxr-xr-x 2            0 Dec 30 14:24 ProgramData/
drwxr-xr-x 2            0 Aug 28  2013 Python27/
drwxr-xr-x 2            0 Aug 28  2013 RAMDISK/
drwxr-xr-x 2            0 Nov  2  2013 Recovery/
drwxr-xr-x 2            0 Oct 11 08:24 Recycled/
l--------- 1            0 Mar 28  2013 Share -> /??/UNC/Bliss/Share
drwxr-xr-x 2            0 Jul  6  2011 Symbols/
drwxr-xr-x 2            0 Jan 20 22:13 System Volume Information/
drwxr-xr-x 2            0 Sep  9 17:44 Users/
drwxr-xr-x 2            0 Jan 12  2014 Win/
drwxr-xr-x 2            0 Jan 17 16:36 Windows/
l--------- 1            0 Mar 21  2014 bin -> /??/C:/windows/system32/cygwin/bin  ## (note, link in W/S32/Cyg/bin points to 64-bit cyg)
-rwxr-xr-x 1           27 Apr 19  2011 boot*
drwxr-xr-x 2            0 Jul  2  2010 boot.d/
-rwxr-xr-x 1           90 Apr 19  2011 boot.ini*
drwxr-xr-x 2            0 Jan 12  2014 cygcommon/
drwxr-xr-x 2            0 Oct  8 17:06 cygwin/
drwxr-xr-x 2            0 Jan  9 20:01 cygwin64/
drwxr-xr-x 2            0 Nov 23 03:34 dev/
drwxr-xr-x 2            0 May 17  2014 devv-/
l--------- 1            0 Apr 11  2014 etc
-rwxr-xr-x 1       208876 Feb 17  2009 grldr*
drwxr-xr-x 2            0 Oct 12 12:58 inetpub/
l--------- 1            0 Jan 13  2014 lib
l--------- 1            0 Dec 16  2009 m -> /??/UNC/Bliss/Music
drwxr-xr-x 2            0 Jun 10  2012 mnt/
drwxr-xr-x 2            0 Jan 12  2014 opt/
l--------- 1            0 Jul 12  2010 p -> /??/UNC/Bliss/Pictures
-rwxr-xr-x 1 103079215104 Jan 10 21:21 pagefile.sys*
drwxr-xr-x 2            0 Jan 23  2014 proc/
l--------- 1            0 Apr 21  2013 prog64 -> Program Files/
-rwxr-xr-x 1         1372 Oct 12 01:37 pulseaudio.exe.stackdump*
l--------- 1            0 Jan 13  2014 sbin
l--------- 1            0 Jan 12  2014 temp -> tmp/
drwxr-xr-x 2            0 Jan 20 23:40 tmp/
l--------- 1            0 Jan 13  2014 usr
l--------- 1            0 Jan 13  2014 var
drwxr-xr-x 2            0 Aug 28  2013 windowsearch/

Alle Links werden sowohl unter Windows (7) als auch unter Linux aufgelöst. Früher hatte ich einige in Rot, was darauf hinweist, dass der Symlink nicht aufgelöst werden konnte, aber zusätzlich dazu, dass die Pfade sowohl unter Windows als auch unter Linux funktionieren, ist dies eine Selbstverständlichkeit (einige hatte ich mit relativen Links versucht, die ich durcheinander gebracht habe) Hauptproblem waren diejenigen, die angaben, dass "JUNCTION" und nicht "SYMLINKD" fehlerhaft waren (wie in "cmd.exe" angegeben und ein "dir" an der Wurzel dieser Freigabe ausgeführt).

Jetzt weiß ich, dass es im Allgemeinen Unterschiede in der Implementierung gibt, ABER die Symlink [d] -Implementierungen sind kompatibel (vorausgesetzt, die Pfade sind korrekt. Unter Windows zeigt "cmd, dir":

11/29/2012  07:14 PM    <SYMLINKD>     Home [C:\Users]

Unter Windows in Cygwin wird Folgendes angezeigt:

lrwxrwxrwx   1            6 Nov 29  2012 Home -> /Users/

und unter Linux mit dem CIFS-Client wird Folgendes angezeigt:

l--------- 1            0 Nov 29  2012 Home -> /??/C:/Users/

Windows speichert seine Symlinks (erstellt mit mklink oder mklink / d für Verzeichnisse) im selben Format mit einem Windows-Pfad.

Linux ist viel vielseitiger in dem, was es erlaubt, und Sie können ein Verzeichnis namens "/ ??" erstellen. in "/" brauchte ich darunter 2 Einträge:

lrwxrwxrwx 1 10 Feb 28 15:43 C: -> ../Athenae/
drwxrwx---+ 3 44 Feb 28 16:13 UNC/

Der erste ist ein regulärer Linux-Symlink, der zweite ist ein Verzeichnis.

Athenae ist die Windows-Maschine, die das Laufwerk 'root (C :)' auf den Linux-Client exportiert. auf dem Linux-Client, der bei / Athenae gemountet ist. Jeder Verweis auf C: aus dem Windows-Symlink verweist also auf das Stammverzeichnis der gemounteten Freigabe unter Linux.

Unter UNC habe ich die Hostnamen angegeben, die ich zum Laufen bringen wollte (alle denselben Namen für den 1-Linux-Server, aber an verschiedenen Stellen wird unterschiedlich darauf verwiesen, da es sich auch um einen Domänencontroller handelt):

lrwxrwxrwx  1  6 Feb 28 16:12 Bliss -> Ishtar/
drwxrwx---+ 2 61 Feb 28 16:18 Ishtar/
lrwxrwxrwx  1  6 Feb 28 16:13 ishtar -> Ishtar/

(Während der Fall unter Windows keine Rolle spielt, spielt er unter Linux eine alternative Groß- und Kleinschreibung des Hostnamens und des Domänennamens. Beide zeigen auf ein echtes Verzeichnis, in das ich die zu lösenden Symlinks eingefügt habe.) Wobei ich HINWEIS: Einige dieser Freigaben sind "USER" -spezifisch. Da Sie (noch ...?) keinen "Variablennamen" in einen Symlink einfügen können ln -s '$HOME/Documents' Documents, musste ich den Dokument-Symlink auf einen festen Speicherort verweisen. - In meinem Fall kein Problem, da ich der einzige bin, der versucht, die Symlinks dieser gemounteten Windows-Freigabe mit dem Linux-CIFS-Client aufzulösen.

(Viele alte Gespräche über die Verbindungsprobleme, die ich zuvor hatte, wurden beseitigt).

Wenn Sie von einem Linux-basierten Server mit Samba mounten, gelten andere Regeln. Samba kann jedoch Linux-Symlinks folgen, wenn es mit Linux-Erweiterungen, Widelinks und dem Parametersatz "Client Managed Wide Links = Ja" konfiguriert ist Der spätere Parameter wurde " falsch " umbenannt in:

allow insecure wide links = yes

Da die meisten Windows-Administratoren es Benutzern nicht erlauben, sich bei ihrem Server anzumelden, wurde dies als Fehler in ihrer Sicherheitsrichtlinie angesehen. Für Windows-Administratoren, die Berechtigungen und ACLs verwenden, um den Zugriff zu steuern, und "vertrauenswürdige Benutzer" haben (ich und Mitbewohner im Grunde), war dies kein Fehler, sondern ein Segen.

Alles hängt von Ihrer 'Sicherheitsrichtlinie' ab ... ;-)

Hoffe, dies schafft Klarheit für die Freigaben, die von Windows aus freigegeben werden und auf die über Linux (oder Windows) zugegriffen wird ...

ps keine Angriffe gemeint oder impliziert! ;-);

---- Die neuesten cifs-utils scheinen alle unter Windows funktionierenden Symlinks sowie alle Linux-Symlinks anzuzeigen (dh wenn das Ziel vorhanden ist, funktionieren sie):

Ishtar:/athenae> uname -a
Linux Ishtar 3.19.3-Isht-Van #1 SMP PREEMPT Tue Apr 7 21:40:02 PDT 2015 x86_64 x86_64 x86_64 GNU/Linux 
 Ishtar:/athenae>  ll |grep -- '->'|sed 's/^/    /'
 l--------- 1            0 Jul 16  2013 D -> /??/UNC/Ishtar/Documents/
 l--------- 1            0 Feb 28 16:38 M -> /??/UNC/Bliss/Music/
 l--------- 1            0 Feb 28 16:10 P -> /??/UNC/Bliss/Pictures/
 l--------- 1            0 Mar 28  2013 Share -> /??/UNC/Bliss/Share/
 l--------- 1            0 Mar 21  2014 bin -> /??/C:/windows/system32/cygwin/bin/
 l--------- 1            0 Feb 28 15:34 etc -> /??/C:/Windows/System32/cygwin/etc/
 l--------- 1            0 Mar  5 14:32 lib -> /??/C:/Windows/System32/cygwin/lib/
 l--------- 1            0 May 14 07:15 opt -> /??/C:/Windows/System32/cygwin/opt/
 l--------- 1            0 Apr 21  2013 prog64 -> Program Files/
 l--------- 1            0 Mar  5 14:33 sbin -> /??/C:/Windows/System32/cygwin/sbin/
 l--------- 1            0 Jan 12  2014 temp -> tmp/
 l--------- 1            0 Mar  5 14:35 usr -> /??/C:/Windows/System32/cygwin/usr/
 l--------- 1            0 Mar  5 14:35 var -> /??/C:/Windows/System32/cygwin/var/

Alle diese Links "lösen" sich auf und zeigen auf das, was sie sollen ... Auf der Linux-Box.

Umgekehrt - Linux-Symlinks - werden sie auf einem Windows-Client nicht als "Symlinks" angesehen, aber ein Linux-Client kann Windows-Symlinks als solche anzeigen und sie kopieren oder ihnen folgen. Dies verwendet cifs-utils-6.4-3.2.2.x86_64.

Ich finde das erstaunlich ... Ich sollte in der Lage sein, eine vollständige 'tar'-Sicherung unter Linux durchzuführen (wenn die SID-> UID-Zuordnung funktioniert, sollte sie sogar den richtigen Besitz und die richtigen ACLs haben) ....


Beantwortung Ihrer ersten Frage. Ich hatte ein Problem, als eine Freigabe auf einer Linux-Box vom SAMBA-Server bereitgestellt wurde und die Clients sowohl Samba Client Linux als auch Windows PC waren.
Lächeln am

Ihre Frage ist anders. Sie hosten eine Freigabe unter Windows und verwenden den Samba-Client, um unter Linux darauf zuzugreifen. Ich habe keine Erfahrung mit solchen Übungen. Beachten Sie, dass "Dateilink" unter Linux und Windows unter demselben Namen völlig unterschiedliche Dinge sind. Verwechsle sie nicht. Die Einstellungen in meinem Beitrag beziehen sich auf Linux-Links und ich bezweifle, dass der Samba-Client Windows-Links unterstützt. Weitere Informationen finden Sie unter Erweiterte Festplattenfreigaben .
Lächeln am

Ein Dateilink unter Linux und Windows ist sehr ähnlich. Ich bin mir nicht sicher, wer Ihnen gesagt hat, dass sie unterschiedlich sind, aber Windows verfügt über Hardlinks, deren Funktion nahezu identisch mit denen von Linux ist. Die Symlinks (mklink unter Windows, ln -s unter Linux) haben ebenfalls eine ähnliche Funktionalität.
Astara

Als Antwort auf Ihren ersten Kommentar: Wenn Sie sich auf einem Client befinden, der CIFS (Modern SMB) unterstützt, und auf eine Remote-Freigabe zugreifen, wie würden Sie sicher sein, wenn diese unter Linux oder Windows ausgeführt wird? Sie lassen es so klingen, als wären sie sehr unterschiedlich, aber das Samba-Team hat sich bemüht, so nahe wie möglich an der doppelten Funktionalität zu sein. Sie können sich unterschiedlich identifizieren, aber Samba kann sich auch als Windows-Server identifizieren, auf dem ein NTFS-Dateisystem ausgeführt wird. Daher sehen sie möglicherweise sehr ähnlich aus.
Astara

Astra, ich verstehe, dass aus Ihrer Sicht als Endbenutzer ein Begriff des Links sowohl unter Liniux als auch unter Windows ähnlich aussieht. Es sind CIFS-Server- und Client-Implementierungen, die den Unterschied erkennen. Anstatt mich anzugreifen, lesen Sie bitte das Dokument zu CIFS UNIX-Erweiterungen, um zu beweisen, dass die Implementierung anders ist. Auch hier verwende ich Windows nicht als CIFS-Server und kann Ihnen in dieser Hinsicht nicht helfen.
Lächeln am
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.