คุณจะหลีกเลี่ยงข้อผิดพลาด -43 ได้อย่างไรเมื่อคัดลอกโฟลเดอร์ symlinked ใน Finder ด้วย SAMBA share


2

บริบท

จาก 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และฉันยังสามารถอ่านไฟล์ในนั้นได้โดยไม่มีปัญหา เช่นเดียวกันใน Finder

ปัญหา

ถ้าฉันพยายามเขียน ( mvหรือcp) ไฟล์ลงsymlinkในฝั่งไคลเอ็นต์มันล้มเหลว:

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

ความพยายามใด ๆ ในการย้ายหรือคัดลอกไฟล์symlinkผ่าน drag-n-drop ใน Finder จะส่งกลับข้อผิดพลาดต่อไปนี้:

ไม่สามารถดำเนินการให้เสร็จสมบูรณ์ได้เนื่องจากไม่พบรายการที่ต้องการอย่างน้อยหนึ่งรายการ (รหัสข้อผิดพลาด = -43)

(ย้าย / คัดลอกไฟล์จาก symlinkไปยังตำแหน่งอื่นบน NAS ทำงานได้ดี.)

นี่คือผลลัพธ์ของการดำเนินการเขียนใน Terminal:

 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 kb ที่เกี่ยวข้องระบุว่า Error -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/ผลลัพธ์คำสั่ง ดังนั้นการอนุญาตของไดเรกทอรีที่จุด symlink คืออะไร
jm666

drwxrwxrwx 2 admin administ 4096 Oct 19 21:12 test/@ jm666
DBK

@ jm666: จริง ๆ แล้วln -s /share/MD0_DATA/Multimedia/test/ etc.ดูเหมือนว่าจะเป็นไวยากรณ์ที่ไม่ถูกต้อง (สังเกตเครื่องหมายทับท้าย) อย่างไรก็ตามln -s /share/MD0_DATA/Multimedia/test etc.ไม่เปลี่ยนสถานการณ์
DBK

สิ่งสุดท้ายที่อยู่ในใจของฉัน - ลองเส้นทาง symlink สัมพัทธ์ ดังนั้นcd /share/MD0_DATA/Multimedia/folder; ln -s ../test ./symlink. อาจไม่ได้ช่วย แต่ยังไม่มีแนวคิดอื่นและอาจมีการส่งออกค่อนข้างยุ่งเหยิงเส้นทางที่แน่นอนโดยมุมมองของลูกค้า ...
jm666

ทีนี้คุณได้พูดว่า "ฉันสามารถmvและcpไฟล์ที่ไม่มีปัญหาไปมาsymlink" และ "ถ้าฉันพยายามเขียน ( mvหรือcp) ไฟล์ลงไปsymlinkมันจะล้มเหลว" ดังนั้นฉันจึงสับสน
โปรเก่า

คำตอบ:


2

ในการกำหนดค่าของคุณคุณมีunix extensions = noสิ่งที่ดี แต่นั่นเป็นเหตุผลว่าทำไมการเชื่อมโยงสัญลักษณ์บนเซิร์ฟเวอร์แสดงเป็นโฟลเดอร์และไม่ใช่นามแฝง ในโหมดนี้เซิร์ฟเวอร์จะแก้ไขลิงก์สัญลักษณ์และลูกค้าจะไม่เห็นลิงก์เหล่านั้น หากไคลเอ็นต์พยายามสร้างลิงก์สัญลักษณ์เซิร์ฟเวอร์จะสร้างไฟล์นามแฝงไม่ใช่ลิงก์สัญลักษณ์โฮสต์ - OS เหตุผลในการนี้รวมถึงการรักษาความปลอดภัย (ป้องกันไม่ให้ใครบางคนเข้าถึง/etc/passwdบนเซิร์ฟเวอร์โดยการสร้างลิงค์สัญลักษณ์ไป) และความเข้ากันได้ของลูกค้าเป็น OS X และ Windows และ Unix มีความคิดแตกต่างกันเล็กน้อยเกี่ยวกับสิ่งที่ถือเป็นการเชื่อมโยงสัญลักษณ์ ไดเร็กทอรีหรือไฟล์คืออะไร

ปัญหาการอนุญาตกับ SAMBA นั้นซับซ้อนดังนั้นจึงไม่ชัดเจนว่าคุณไม่มีปัญหาการอนุญาต ในทำนองเดียวกันสัญลักษณ์เช่นการแก้ไขมีความซับซ้อนดังนั้นจึงไม่ชัดเจนว่าสิ่งที่คุณทำควรในทางทฤษฎีและมีความเป็นไปได้ของข้อผิดพลาด (มักจะอยู่ในเซิร์ฟเวอร์ SAMBA)

เมื่อเข้าถึงเซิร์ฟเวอร์ SAMBA จาก Mac ข้อมูลประจำตัวและสิทธิ์เหล่านี้เกี่ยวข้อง:

  • ผู้ใช้ Mac ที่คุณลงชื่อเข้าใช้ Mac เป็น
  • ผู้ใช้ SAMBA ที่คุณลงชื่อเข้าใช้เซิร์ฟเวอร์ SAMBA เป็น
  • ผู้ใช้โฮสต์เซิร์ฟเวอร์ OS SMABA ที่คุณได้รับการแปลงเป็น
  • สิทธิ์ไฟล์สไตล์ Unix
  • สำหรับ NTFS และ HFS + ที่เกี่ยวข้อง ACL ระบบไฟล์

ดังนั้นแม้ว่าคุณจะให้ข้อมูลจำนวนมาก แต่ก็ยังไม่ชัดเจนว่าคุณไม่มีปัญหาการอนุญาต ความจริงที่ว่าคุณสามารถmvและcpบนเซิร์ฟเวอร์ (ใช้บัญชีใด?) ไม่ได้หมายความว่าคุณไม่มีปัญหาสิทธิ์ที่ป้องกันไม่ให้คุณทำกับลูกค้า (ใช้บัญชีใดและมีบัญชีใดที่มีประสิทธิภาพบนเซิร์ฟเวอร์)

หากเซิร์ฟเวอร์รองรับ ACL และเนื่องจากคุณมีตัวเลือกเช่นinherit permissions = yesและinherit acls = yesตั้งค่าอาจมีปัญหา ACL บางชนิดที่อนุญาตให้เข้าถึงการเข้าถึงไดเรกทอรีที่เข้าถึงได้ผ่านลิงก์สัญลักษณ์เท่านั้น มีช่องทางอื่น ๆ ของการตรวจสอบตามการกำหนดค่าเซิร์ฟเวอร์

ฉันคาดหวังว่าคุณควรจะสามารถค้นหาข้อมูลเพิ่มเติมในบันทึกเซิร์ฟเวอร์ SAMBA ได้มากกว่าที่คุณสื่อสาร พวกเขาควรให้ความรู้สึกที่ดีกว่ากับสิ่งที่ถูกปฏิเสธ

สำหรับสิ่งที่คุ้มค่าฉันพยายามทำซ้ำการตั้งค่าของคุณโดยใช้โฮสต์ Ubuntu 12.04 เป็นเซิร์ฟเวอร์ SAMBA และไม่สามารถสร้างปัญหาของคุณได้ ลิงก์สัญลักษณ์ทำงานให้ฉันตามที่คาดไว้


ขอบคุณสำหรับคำอธิบาย! ระดับการอนุญาตนั้นซับซ้อนกว่าที่ฉันคิดไว้ ฉันเข้าใจแล้วว่าทำไมสิทธิ์อาจเป็นปัญหา - ไม่ได้คิดถึง ACL เลย ในขณะที่ฉัน "แก้ไข" ปัญหาของฉันด้วยวิธีแก้ปัญหา (การสร้าง symlink บนฝั่งไคลเอ็นต์) ฉันจะไปเส้นทางของการทดลองและข้อผิดพลาดและแก้ไขการตั้งค่ารวมถึงการตรวจสอบระดับสิทธิ์ที่แตกต่างกันเพื่อให้เข้าใจ สถาปัตยกรรมทั้งหมด นี่คือ +50 :) ของคุณ
DBK

BTW ฉันดูที่บันทึกเซิร์ฟเวอร์ SAMBA ในขณะที่สร้างข้อผิดพลาดใหม่ แต่ไม่มีอะไรได้รับการบันทึก (ซึ่งอาจเกี่ยวข้องกับการตั้งค่าคำฟุ่มเฟื่อยบางอย่าง?) ...
DBK

[~] # 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

@DBK ฉันจะปิดการใช้งาน ACL เว้นแต่ว่าคุณต้องการมันจริงๆ ใต้ Ubuntu มีบันทึก SAMBA แยกกันสำหรับไคลเอนต์แต่ละตัวบนเซิร์ฟเวอร์ดังนั้นให้ค้นหา อาจเพิ่มระดับการบันทึกการดีบักของเซิร์ฟเวอร์ของคุณหากไม่มีข้อมูลมากกว่าสิ่งที่คุณโพสต์ ระบบปฏิบัติการของเซิร์ฟเวอร์ของคุณคืออะไร? เซิร์ฟเวอร์ใช้ระบบไฟล์ใด
โปรเก่า

น่าสนใจขอบคุณ "ส่วนขยายยูนิกซ์ = ไม่" ใน [โลก] ได้เคล็ดลับภายใต้คำตอบสำหรับคำถามในการถามอูบุนตูเป็นสิทธิ์ปัญหากับ symlinks กว่า samba
Graham Perrin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.