Как избежать ошибки -43 при копировании папки с символической ссылкой в ​​Finder с общим ресурсом SAMBA?

Контекст

На Mac с запущенным Mountain Lion общий ресурс «Мультимедиа», обслуживаемый QNAP NAS, монтируется как корень через SAMBA в Finder. Допустим, я создаю символическую ссылку каталога на NAS, например:

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

Оно работает:

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

Я также могу mvи cpфайлы без проблем туда и обратно symlinkпри входе в систему NAS.

Это ситуация на стороне клиента, Mac под управлением 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)

Как ни странно, клиент symlinkэтого не признает; вместо этого это обычный каталог (обратите внимание, что в соответствии с выводом у меня есть rwxразрешения):

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

То же самое происходит в Finder, где папка symlinkотображается не как псевдоним, а как обычная папка.

Я могу cdв symlinkи я также могу читать файлы в нем без проблем. То же самое в Искателе.

Проблема

Если я попытаюсь записать ( mvили cp) файл symlinkна стороне клиента, произойдет сбой:

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

Аналогично, любая попытка переместить или скопировать файл symlinkс помощью перетаскивания в Finder возвращает следующую ошибку:

Операция не может быть завершена, так как не удается найти один или несколько требуемых элементов. (Код ошибки = -43).

(Перемещение/копирование файла из symlink другого места на NAS работает нормально.)

Вот результат операции записи в Терминале:

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

Интересно, что я могу успешно удалить уже существующие файлы:

 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 ..

Я действительно в недоумении о том, как диагностировать и решить эту проблему.

В соответствующем КБ Apple говорится, что ошибка -43 может иметь три причины:

  • Недопустимые символы ( нет там )
  • Разрешения ( разрешения выглядят нормально, см. ls -la вывод выше. Я монтирую общий ресурс с учетной записью администратора NAS и вхожу в систему как администратор на своем клиенте Mac. )
  • Несуществующая точка обмена ( общий ресурс существует и хорошо работает в остальном )

Дополнительная информация

Вот еще информация по устранению неполадок:

Глобальные параметры в /etc/smb.confNAS установлены следующим образом:

[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

Конкретные варианты:

[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

Журналы на стороне клиента мало что говорят:

/private/var/log/system.log(который включает kernel.log начиная с 10.8) показывает случайные записи, такие как:

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

И /private/var/log/samba/не существует в моей системе.

Буду признателен за любую оказанную помощь.

интересует ls -ld /share/MD0_DATA/Multimedia/test/результат команды. Итак, каково разрешение каталога, на который указывает символическая ссылка.
@ jm666 drwxrwxrwx 2 admin administ 4096 Oct 19 21:12 test/.
@ jm666: на самом деле, ln -s /share/MD0_DATA/Multimedia/test/ etc.кажется, это неправильный синтаксис (обратите внимание на косую черту в конце). Однако это ln -s /share/MD0_DATA/Multimedia/test etc.не меняет ситуации.
Последнее, что приходит мне в голову - попробуйте относительный путь символической ссылки. Итак, cd /share/MD0_DATA/Multimedia/folder; ln -s ../test ./symlink. Вероятно, это не помогает, но у меня нет другой идеи, и, возможно, экспорт несколько искажает абсолютные пути в представлении клиента...
Что ж, теперь вы сказали и «Я также могу без проблем mvпередавать файлы туда и обратно », и «Если я попытаюсь записать ( или ) файл в , это не удастся», поэтому я запутался. cpsymlinkmvcpsymlink
@OldPro: первое относится к операциям, выполняемым на NAS; второй к операциям, выполняемым в клиентской среде.
@ jm666: относительные символические ссылки тоже не работали. Я просто сдался и настроил символические ссылки от клиента на смонтированном общем ресурсе. Они работают, когда общий ресурс смонтирован, хотя символические ссылки не распознаются в среде NAS. Хреновый обходной путь…
С точки зрения Windows, это символическая ссылка… или ярлык другого типа? В Super User: какие существуют типы ярлыков?
Комментарий под apple.stackexchange.com/a/41511/8546 может быть полезен.

Ответы (1)

В вашей конфигурации у вас unix extensions = noвсе в порядке, но именно поэтому символические ссылки на сервере отображаются как папки, а не псевдонимы. В этом режиме сервер разрешает символические ссылки, и клиент их никогда не видит. Если клиент пытается создать символическую ссылку, сервер фактически создает файл псевдонима, а не символическую ссылку хост-ОС. Причины этого включают в себя безопасность (предотвращение доступа кого-либо к /etc/passwdсерверу путем создания символической ссылки на него) и совместимость клиентов, поскольку OS X, Windows и Unix имеют несколько разные представления о том, что представляет собой символическая ссылка, но они в значительной степени совпадают. что такое каталог или файл.

Проблемы с разрешениями в SAMBA сложны, поэтому не ясно, что у вас нет проблем с разрешениями. Точно так же символическое разрешение сложно, поэтому неясно, что то, что вы делаете, должно теоретически работать, и всегда есть вероятность ошибки (скорее всего, в сервере SAMBA).

При доступе к серверу SAMBA с Mac используются следующие идентификаторы и разрешения:

  • Пользователь Mac, под которым вы вошли в систему Mac
  • Пользователь SAMBA, под которым вы вошли на сервер SAMBA
  • Пользователь операционной системы хост-сервера SMABA, в которого вы конвертируетесь
  • Права доступа к файлам в стиле Unix
  • Для NTFS и HFS+ связанные ACL файловой системы

Поэтому, несмотря на то, что вы предоставили много информации, все еще не ясно, что у вас нет проблем с разрешениями. Тот факт, что вы можете mvи cpна сервере (используя какую учетную запись?), не означает, что у вас нет проблемы с разрешениями, которая не позволяет вам делать это на клиенте (используя какие учетные записи и с какой действующей учетной записью на сервере?).

Если сервер поддерживает ACL и поскольку у вас есть такие параметры, как inherit permissions = yesи inherit acls = yesset, может возникнуть какая-то проблема ACL, которая разрешает доступ только для чтения к каталогам, доступ к которым осуществляется через символические ссылки. Есть несколько других способов исследования, основанных на конфигурации сервера.

Я действительно ожидаю, что вы сможете найти больше информации в журналах сервера SAMBA, чем вы сообщили. Они должны дать вам гораздо лучшее представление о том, что именно отрицается.

Что бы это ни стоило, я попытался продублировать вашу настройку, используя хост Ubuntu 12.04 в качестве сервера SAMBA, и не смог воспроизвести вашу проблему. Символические ссылки работали для меня, как и ожидалось.

Спасибо за ваше объяснение! Уровни разрешений сложнее, чем я думал. Теперь я понимаю, почему разрешения могут быть проблемой - вообще не думал о ACL. Хотя я «решил» свою проблему обходным путем (создав символические ссылки на стороне клиента), я пойду путем проб и ошибок и изменю настройки, а также проверю различные уровни разрешений, чтобы лучше понять вся архитектура. Вот вам +50 :)
Кстати, я просмотрел журнал сервера SAMBA при воссоздании ошибки, но ничего не регистрируется (может быть, это связано с какой-то настройкой многословия?)…
[~] # 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 Я бы отключил ACL, если они вам действительно не нужны. В Ubuntu для каждого клиента на сервере были отдельные журналы SAMBA, так что ищите их. Возможно, увеличьте уровень журнала отладки вашего сервера, если информации не больше, чем вы опубликовали. Какая ОС у вашего сервера? Какую файловую систему использует сервер?
Интересно, спасибо. «unix extensions = no» в [Global] сделал свое дело под ответом на вопрос в Ask Ubuntu, проблема с разрешениями с символическими ссылками через samba .