Wie können Sie den Fehler -43 vermeiden, wenn Sie einen symbolisch verknüpften Ordner im Finder mit einer SAMBA-Freigabe kopieren?

Der Kontext

Von einem Mac mit Mountain Lion wird eine vom QNAP NAS bereitgestellte Freigabe „Multimedia“ über SAMBA im Finder als Root gemountet. Nehmen wir an, ich erstelle einen symbolischen Link eines Verzeichnisses auf dem NAS, wie zum Beispiel:

[/share/Multimedia] # ln -s /share/MD0_DATA/Multimedia/test/ ./folder/symlink     

Es klappt:

[/share/Multimedia] # ls -la folder
lrwxrwxrwx  1 admin  administ  34 Oct 14 19:24 symlink -> /share/MD0_DATA/Multimedia/test//

Ich kann auch mvund cpDateien ohne Probleme hin und her symlinkwenn ich auf dem NAS eingeloggt bin.

Dies ist die Situation auf der Client-Seite, einem Mac mit 10.8.2:

client:~ myself$ id
uid=501(myself) gid=20(staff) groups=20(staff),401(com.apple.access_screensharing),
12(everyone),33(_appstore),61(localaccounts),79(_appserverusr),80(admin),
81(_appserveradm),98(_lpadmin),100(_lpoperator),204(_developer)

symlinkSeltsamerweise erkennt der Client dies nicht ; es ist stattdessen ein normales Verzeichnis (bitte beachten Sie, dass ich gemäß der Ausgabe rwxBerechtigungen habe):

client:folder myself$ ls -la
drwx------  1 myself  staff  16384 18 Okt 23:25 symlink

Das Gleiche passiert im Finder, wo der Ordner symlinknicht als Alias, sondern als normaler Ordner erscheint.

Ich kann cdhinein symlinkund ich kann auch Dateien darin ohne Probleme lesen. Dasselbe im Finder.

Das Problem

Wenn ich versuche, eine Datei auf der Client-Seite zu schreiben ( mvoder ), schlägt dies fehl:cpsymlink

 client:folder myself$ mv test.txt symlink/
 mv: rename test.txt to symlink/test.txt: No such file or directory

Ebenso gibt jeder Versuch, eine Datei per Drag-and-Drop in den Finder zu verschieben oder zu kopieren, symlinkden folgenden Fehler zurück:

Der Vorgang kann nicht abgeschlossen werden, da mindestens ein erforderliches Element nicht gefunden werden kann. (Fehlercode = -43).

(Das Verschieben/Kopieren einer Datei an symlink einen anderen Speicherort auf dem NAS funktioniert einwandfrei.)

Hier ist die Ausgabe eines Schreibvorgangs im Terminal:

 client:symlink myself$ touch text.txt
 touch: text.txt: Permission denied

Interessanterweise kann ich bereits vorhandene Dateien erfolgreich löschen:

 client:symlink myself$ ls -la
 total 64
 drwx------  1 myself  staff  16384 18 Okt 23:51 .
 drwx------  1 myself  staff  16384 18 Okt 23:48 ..
 -rwx------  1 myself  staff      5 18 Okt 23:51 text.txt
 client:symlink myself$ rm text.txt 
 client:symlink myself$ ls -la
 total 64
 drwx------  1 myself  staff  16384 18 Okt 23:56 .
 drwx------  1 myself  staff  16384 18 Okt 23:48 ..

Ich bin wirklich ratlos, wie ich dieses Problem diagnostizieren und lösen kann.

Das entsprechende Apple kb gibt an, dass Error -43 drei Ursachen haben kann:

  • Unzulässige Zeichen ( keine vorhanden )
  • Berechtigungen ( Berechtigungen scheinen in Ordnung zu sein, siehe die ls -la Ausgabe oben. Ich mounte die Freigabe mit dem Administratorkonto des NAS und bin als Administrator auf meinem Mac-Client angemeldet. )
  • Nicht vorhandener Freigabepunkt ( die Freigabe existiert und funktioniert ansonsten gut )

Weitere Informationen

Hier sind weitere Informationen zur Fehlerbehebung:

Die globalen Optionen /etc/smb.confauf dem NAS sind wie folgt eingestellt:

[global]
passdb backend = smbpasswd
workgroup = WORKGROUP
security = USER
server string =
encrypt passwords = Yes
username level = 0
map to guest = Bad User
null passwords = yes
max log size = 10
socket options = TCP_NODELAY SO_KEEPALIVE SO_SNDBUF=65536 SO_RCVBUF=65536
os level = 20
preferred master = no
dns proxy = No
smb passwd file=/etc/config/smbpasswd   
username map = /etc/config/smbusers
guest account = guest
directory mask = 0777
create mask = 0777
oplocks = yes
locking = yes
disable spoolss = yes
load printers = no
force directory security mode = 0000
veto files = /.AppleDB/.AppleDouble/.AppleDesktop/:2eDS_Store/Network Trash Folder/Temporary Items/TheVolumeSettingsFolder/.@__thumb/.@__desc/:2e*/
delete veto files = yes
map archive = no
map system = no
map hidden = no
map read only = no
deadtime = 10
use sendfile = yes
display charset = UTF8
unix extensions = no
store dos attributes = yes
client ntlmv2 auth = yes
dos filetime resolution = no
min receivefile size = 4096
case sensitive = auto
domain master = auto
local master = yes
inherit acls = yes
wide links = yes
follow symlinks = yes
wins support = no
force unknown acl user = yes
template homedir = /share/homes/DOMAIN=%D/%U
domain logons = no

Die konkreten Optionen:

[Multimedia]
comment = System default share
path = /share/MD0_DATA/Multimedia
browsable = yes
oplocks = no
ftp write only = no
public = yes
invalid users =
read list = @"everyone","gast"
write list = "admin","guest"
valid users = "root",@"everyone","admin","guest","gast"
inherit permissions = yes

Die Logs auf der Clientseite sagen nicht viel aus:

/private/var/log/system.log(das seit 10.8 Kernel.log enthält) zeigt gelegentlich Einträge wie:

 Oct 18 22:13:43 client kernel[0]: smb_iod_reconnect: Reconnected share MULTIMEDIA with server qnap-SAMBA._smb._tcp.local

Und /private/var/log/samba/existiert nicht auf meinem System.

Jede Hilfe wird sehr geschätzt.

sich über das ls -ld /share/MD0_DATA/Multimedia/test/Befehlsergebnis wundern. Also, was ist die Berechtigung des Verzeichnisses, auf das der Symlink zeigt.
@ jm666 drwxrwxrwx 2 admin administ 4096 Oct 19 21:12 test/.
@ jm666: Scheint tatsächlich ln -s /share/MD0_DATA/Multimedia/test/ etc.die falsche Syntax zu sein (beachten Sie den abschließenden Schrägstrich am Ende). Ändert jedoch ln -s /share/MD0_DATA/Multimedia/test etc.nichts an der Situation.
Das Letzte, was mir in den Sinn kommt - versuchen Sie den relativen Symlink-Pfad. Also, cd /share/MD0_DATA/Multimedia/folder; ln -s ../test ./symlink. Hilft wahrscheinlich nicht, aber ich habe keine andere Idee und vielleicht ein Export, der die absoluten Pfade durch die Client-Ansicht etwas durcheinander bringt ...
Nun, jetzt haben Sie sowohl gesagt "Ich kann auch mvund cpDateien ohne Probleme hin und her symlink" als auch "Wenn ich versuche, eine Datei in zu schreiben ( mvoder ) , schlägt dies fehl", also bin ich verwirrt. cpsymlink
@OldPro: Der erste bezieht sich auf Operationen, die auf dem NAS ausgeführt werden; die zweite für Operationen, die in der Client-Umgebung ausgeführt werden.
@ jm666: Relative Symlinks haben auch nicht funktioniert. Ich habe einfach aufgegeben und die Symlinks vom Client auf der gemounteten Freigabe eingerichtet. Sie funktionieren, wenn die Freigabe gemountet ist, obwohl die Symlinks in der NAS-Umgebung nicht erkannt werden. Beschissener Workaround…
Ist es aus der Windows-Perspektive ein symbolischer Link … oder eine andere Art von Verknüpfung? In Super User: Welche verschiedenen Arten von Verknüpfungen gibt es?
Kommentar unter apple.stackexchange.com/a/41511/8546 kann nützlich sein.

Antworten (1)

In Ihrer Konfiguration haben Sie unix extensions = nodas in Ordnung, aber deshalb werden symbolische Links auf dem Server als Ordner und nicht als Aliase angezeigt. In diesem Modus löst der Server die symbolischen Links auf und der Client sieht sie nie. Wenn der Client versucht, einen symbolischen Link zu erstellen, generiert der Server tatsächlich eine Aliasdatei, keinen symbolischen Link zum Host-Betriebssystem. Gründe dafür sind Sicherheit (Verhindern, dass jemand Zugriff auf /etc/passwdden Server erhält, indem ein symbolischer Link darauf erstellt wird) und Client-Kompatibilität, da OS X und Windows und Unix etwas unterschiedliche Vorstellungen davon haben, was einen symbolischen Link ausmacht, aber sie sind sich ziemlich einig was ist ein verzeichnis oder eine datei.

Berechtigungsprobleme mit SAMBA sind komplex, daher ist nicht klar, dass Sie kein Berechtigungsproblem haben. Ebenso symbolisch wie das Auflösen ist komplex, daher ist nicht klar, dass das, was Sie tun, theoretisch funktionieren sollte, und es besteht immer die Möglichkeit eines Fehlers (höchstwahrscheinlich im SAMBA-Server).

Beim Zugriff auf einen SAMBA-Server von einem Mac sind diese Identitäten und Berechtigungen beteiligt:

  • Der Mac-Benutzer, als der Sie beim Mac angemeldet sind
  • Der SAMBA-Benutzer, als der Sie beim SAMBA-Server angemeldet sind
  • Der SMABA-Serverhost-Betriebssystembenutzer, zu dem Sie konvertiert werden
  • Dateiberechtigungen im Unix-Stil
  • Für NTFS und HFS+ zugehörige Dateisystem-ACLs

Obwohl Sie also viele Informationen bereitgestellt haben, ist immer noch nicht klar, dass Sie keine Berechtigungsprobleme haben. Die Tatsache, dass Sie mvdies cpauf dem Server tun können (mit welchem ​​​​Konto?), bedeutet nicht, dass Sie kein Berechtigungsproblem haben, das Sie daran hindert, dies auf dem Client zu tun (mit welchen Konten und mit welchem ​​effektiven Konto auf dem Server?).

Wenn der Server ACLs unterstützt und Sie Optionen wie inherit permissions = yesund inherit acls = yesset haben, könnte es eine Art ACL-Problem geben, das nur Lesezugriff auf Verzeichnisse zulässt, auf die über symbolische Links zugegriffen wird. Basierend auf der Serverkonfiguration gibt es mehrere andere Untersuchungsmöglichkeiten.

Ich würde wirklich erwarten, dass Sie mehr Informationen in den SAMBA-Serverprotokollen finden können, als Sie mitgeteilt haben. Sie sollten Ihnen ein viel besseres Gefühl dafür geben, was genau verweigert wird.

Für das, was es wert ist, habe ich versucht, Ihr Setup mit einem Ubuntu 12.04-Host als SAMBA-Server zu duplizieren, und konnte Ihr Problem nicht reproduzieren. Symbolische Links haben bei mir wie erwartet funktioniert.

Danke für Ihre Erklärung! Die Berechtigungsstufen sind komplizierter als ich dachte. Ich verstehe jetzt, warum Berechtigungen ein Problem sein könnten - habe überhaupt nicht an ACLs gedacht. Während ich mein Problem mit einem Workaround (Erstellen der Symlinks auf der Client-Seite) "gelöst" habe, werde ich den Weg des Versuchs und Irrtums gehen und die Einstellungen ändern sowie die verschiedenen Berechtigungsstufen überprüfen, um ein besseres Verständnis zu bekommen die ganze Architektur. Hier sind deine +50 :)
Übrigens, ich habe mir das SAMBA-Serverprotokoll angesehen, während ich den Fehler neu erstellte, aber es wird nichts protokolliert (das könnte mit einer Ausführlichkeitseinstellung zu tun haben?) ...
[~] # tail -f /var/log/log.smbd [2012/10/24 00:00:06, 0] smbd/server.c:1329(main) smbd version 3.5.2 started. Copyright Andrew Tridgell and the Samba Team 1992-2010 [2012/10/24 00:00:09.447243, 1] smbd/service.c:1073(make_connection_snum) client (***.***.***.***) connect to service Multimedia initially as user admin (uid=0, gid=0) (pid 28255) [2012/10/24 00:00:17.518605, 1] smbd/service.c:1073(make_connection_snum) [2012/10/24 00:03:06.528095, 0] smbd/server.c:313(remove_child_pid) Could not find child 28314 -- ignoring
@DBK Ich würde ACLs deaktivieren, es sei denn, Sie brauchen sie wirklich. Unter Ubuntu gab es separate SAMBA-Protokolle für jeden Client auf dem Server, also suchen Sie danach. Erhöhen Sie möglicherweise die Debugging-Protokollebene Ihres Servers, wenn nicht mehr Informationen als das, was Sie gepostet haben, vorhanden sind. Was ist das Betriebssystem Ihres Servers? Welches Dateisystem verwendet der Server?
Interessant, danke. "unix extensions = no" in [Global] hat den Trick unter einer Antwort auf eine Frage in Ask Ubuntu, Permissions issue with symlinks over samba gemacht .