คุณจะทำให้แซมบ้าติดตาม symlink นอกเส้นทางที่แชร์ได้อย่างไร


61

นี่คือเซิร์ฟเวอร์ Ubuntu 10.04 64 และ samba 3.4.7

ฉันมีไดเรกทอรีที่ใช้ร่วมกัน/home/mit/shareและอีกไดเรกทอรีหนึ่ง/home/tempที่ฉันเชื่อมโยงไปยังไดเรกทอรีที่แบ่งปัน:

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

แต่บน windows หลังจากใช้อินเทอร์เน็ตฉันไม่สามารถเปิดได้S:/tempแต่บน Linux มันเป็นไปได้ที่จะเข้าถึง/home/mit/share/tempอย่างที่คาดไว้

วิธีนี้ใช้งานได้หากฉันลิงก์ไดเรกทอรีภายใน/home/mit/share/tempดังนั้นฉันคิดว่า samba กำลัง จำกัด การข้ามไปยังลิงก์ภายนอก / เหนือไดเรกทอรีที่ใช้ร่วมกัน

แก้ไข:

ดูคำถามนี้ที่ชื่อUbuntu + เวอร์ชันล่าสุดของ samba, symlink ไม่สามารถใช้งานร่วมกับเมานต์ Windowsได้อีกต่อไป

ดูเหมือนว่าจะเป็นการดีที่สุดที่จะนำunix extensions = noเข้าสู่ส่วนสากลfollow symlinks = yesและwide links = yesเฉพาะในส่วนของการแบ่งปันที่คุณต้องการจริงๆ

การunix extensionตั้งค่าสถานะต้องอยู่ในส่วนสากลและไม่อยู่ในส่วนการแชร์แต่ละรายการ แต่เพื่อความปลอดภัยจะดีกว่าถ้าใช้ตัวเลือกอื่นในที่ที่คุณต้องการเท่านั้นไม่ใช่ทั่วโลก


คุณลอง hardlink แทน symlink ได้ไหม?
Falmarri

คำตอบ:


92

แก้ไข smb.conf

[global]
unix extensions = no

[share]
follow symlinks = yes
wide links = yes

หมายเหตุ: หากคุณใช้แซมบ้าเวอร์ชั่นใหม่กว่านี้อาจทำงานให้คุณแทน:

[global]
allow insecure wide links = yes

[share]
follow symlinks = yes
wide links = yes

เอกสารเกี่ยวกับfollow symlinksและwide linksธง: https://www.samba.org/samba/docs/using_samba/ch08.html#samba2-CHP-8-TABLE-1


ดูคำอธิบายในตอนท้ายของคำถามข้างต้นว่าทำไมนี่จึงเป็นทางออกที่ดี
mit

ในกรณีที่มีคนอื่นต่อสู้กับความเห็นที่ทำให้สับสนไฟล์นี้ค่อนข้างสั้น: คัดลอกไปที่การสำรองข้อมูลและสร้างตัวกรองใหม่อีกครั้ง: 1: cp /etc/samba/smb.conf /etc/samba/smb.conf.bak2:grep -o '^[^#;]*' smb.conf.bak >smb.conf
Frank Nocke

ไม่[share]ได้หมายความว่า[<share_name>]?
Necktwi

@neckTwi - นั่นคือสิ่งที่ฉันคิดและมันก็ใช้ได้กับฉัน
Geoff

@Geoff นั่นไม่ได้ผลสำหรับฉัน! เปลี่ยนเป็นsshfs
Necktwi

11

สวัสดีฉันได้ลองใส่สิ่งนี้ลงในการกำหนดค่าเพื่อแก้ไข symlink สำหรับ windows สำหรับการตั้งค่าของฉัน แต่ฉันไม่แน่ใจว่ามันจะส่งผลกระทบต่อไคลเอนต์ windows หรือไม่หรือจะเป็นไปตาม symlinks เมื่อฉันเชื่อมต่อกับกล่องนี้

[global]                                                                        
unix extensions = no

คำตอบของ Qiqi เห็นด้วยกับสิ่งนี้: superuser.com/questions/128716/ …
Janus

ใช่สิ่งนี้จะแก้ไขปัญหาในสภาพแวดล้อมของฉันได้อย่างแน่นอน
TML

10

อีกทางเลือกหนึ่งสำหรับคำตอบอื่น ๆ เพื่อเปิดใช้งานส่วนขยาย unix คุณสามารถใช้:

[global]
allow insecure wide links = yes

[share]
follow symlinks = yes
wide links = yes

ไม่[share]ได้หมายความว่า[<share_name>]?
Necktwi

ใช่มันอาจเป็นส่วนใด ๆ ของ smb.conf ที่ 'อธิบายถึงทรัพยากรที่ใช้ร่วมกัน (รู้จักกันในชื่อ“ แบ่งปัน”)' (อ้างอิงจากเอกสาร) มันอาจจะเป็นในส่วนพิเศษ[homes]ที่ฉันใช้มัน ดูเอกสารประกอบสำหรับรายละเอียด
user1182474

4

ในการอนุญาตให้ไคลเอนต์ Samba ติดตาม symlink นอกพา ธ ที่แชร์สิ่งที่คุณต้องมีในการกำหนดค่า Samba คือ:

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

[myShare]
wide links = yes

(นอกจาก Samba จะใช้คำจำกัดความร่วมกันแน่นอน) นี่คือ - ตามหลักวิชา - เพียงพอสำหรับไคลเอนต์ * ระวัง

หมายเหตุ: ไม่จำเป็นต้องมีคำสั่ง "follow symlinks" เนื่องจากเป็นค่าเริ่มต้นที่ "ใช่"

สำหรับไคลเอนต์ Windows การตั้งค่า 1 ยังคงหายไปเพื่อให้พวกเขาติดตามลิงก์ดังกล่าว โดยทำดังนี้

  1. เปิดเชลล์ Windows ที่มีสิทธิ์ผู้ดูแลระบบ
  2. วิ่ง :

    fsutil behavior set SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1
    
  3. รีบูตเครื่องเพื่อรีโหลดการตั้งค่า

หมายเหตุ: ผลลัพธ์เดียวกันสามารถขอรับได้โดยแก้ไขรีจิสทรีของ Windows ดูลิงค์ด้านล่าง

แหล่งที่มา:


0

คุณอาจต้องระบุมากกว่าไฟล์กำหนดค่า Samba หากคุณใช้งาน AppArmor

คุณต้องการคำสั่งต่อไปนี้ใน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 บล็อกการเข้าถึงส่วนต่าง ๆ ของระบบไฟล์ตามซีแมนทิกส์ของชุดกฎ ดังนั้นหาก symlink ของคุณใน Samba ชี้ไปยังตำแหน่งที่ AppArmor จะบล็อก Samba จะปฏิเสธการเข้าถึง

ในระบบของฉัน Samba อัพเดทโปรไฟล์ AppArmor ในบริการเริ่ม / หยุดดังนั้นฉันสามารถเปลี่ยนโปรไฟล์ AppArmor ได้ แต่เสี่ยง Samba หรือโปรแกรมอื่นเขียนทับมัน แต่ฉันตัดสินใจที่จะสร้างการแชร์ที่ไม่สามารถเข้าถึงได้ในแซมบ้าโดยอ้างอิงตำแหน่งที่มีเป้าหมาย symlink ที่ฉันต้องการเข้าถึง (ยังอยู่ใน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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.