Samba - สร้างการแชร์ไดเรกทอรีย่อยด้วยสิทธิ์ของตัวเอง


9

ฉันมีการแบ่งปัน Samba ที่มีหลายโฟลเดอร์เช่นนี้

share
  - folderA
  - folderB
  - folderC
  - folderD

มีผู้ใช้งานประมาณ 20 คนที่เข้าถึงการแชร์เหล่านั้น ผู้ใช้ทุกคนสามารถเข้าถึงไดเรกทอรีบางรายการได้เช่น Ben สามารถเข้าถึง folderA และ folderC แต่ไม่ใช่ folderB และ folderD เจนนี่สามารถเข้าถึงโฟลเดอร์ B และโฟลเดอร์ C และอื่น ๆ

ฉันไม่ต้องการให้ผู้ใช้เมานต์แต่ละโฟลเดอร์ที่ต้องการ ฉันต้องการให้พวกเขาติดตั้งโฟลเดอร์ "share" ซึ่งมีโฟลเดอร์ย่อยทั้งหมด การเข้าถึงถูก จำกัด โดยการตั้งค่าสิทธิ์ linux

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

Samba conf ของฉันดูเหมือนว่า:

guest ok = no

[global]
workgroup = WORKGROUP
security  = user
encrypt passwords = yes

[Share]
path        = /var/samba
valid users = @everybody
read only   = no
writeable   = yes

[folderA]
path        = /var/samba/folderA
valid users = @users_folderA
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderA

[folderB]
path        = /var/samba/folderB
valid users = @users_folderB
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderB

[folderC]
path        = /var/samba/folderC
valid users = @users_folderC
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderC

[folderD]
path        = /var/samba/folderD
valid users = @users_folderD
read only   = no
writeable   = yes

create mask          = 770
directory mask       = 770
force directory mode = 770

force group = users_folderD

เห็นได้ชัดว่าผู้ใช้ทุกคนอยู่ในกลุ่มทุกคนดังนั้นพวกเขาจึงสามารถแบ่งปันการแชร์กับไดเรกทอรีย่อยได้ การเข้าถึงสำหรับแต่ละไดเรกทอรีย่อยทำงานได้อย่างสมบูรณ์แบบ แต่เมื่อใดก็ตามที่เบ็นสร้างไฟล์ในโฟลเดอร์ C ไฟล์จะได้รับอนุญาตให้ใช้ไฟล์ -rwxr - r-- แต่มันควรจะเป็น -rwxrwx ---

ฉันคิดว่าการแชร์สำหรับแต่ละโฟลเดอร์ไม่ทำงานเลยเพราะฉันพยายามตั้งให้เขียนได้ = ไม่ใช่และอ่านอย่างเดียว = ใช่เพื่อทดสอบ รีสตาร์ท smbd และ nmbd และเชื่อมต่อเครือข่ายร่วมกันใหม่ (ใน Windows 10) ผู้ใช้สามารถสร้างไฟล์และแก้ไขของตัวเองได้

สิ่งนี้รันบนราสเบอร์รี่ pi กับราสเบียน ฮาร์ดไดรฟ์ที่มีไฟล์ถูกฟอร์แมตเป็น ext4 และติดตั้งผ่าน fstab


หากต้องการบังคับใช้สิทธิ์การเข้าถึงไฟล์ที่ต้องการให้ใช้force create mode = 770คำสั่งในfolderCส่วนของการกำหนดค่าของคุณ
Oleg Bolden

ขอบคุณที่จริงไม่ได้แก้ปัญหา แต่ฉันสังเกตเห็นว่าฉันมีช่องว่างในเส้นทางของ smb.conf ที่แท้จริงของฉัน: [folderA] path = / var / samba / บางโฟลเดอร์ที่มีช่องว่าง ฉันแก้ไขสิ่งนี้โดยใส่พา ธ ด้วย "(" / var / samba / บางโฟลเดอร์ที่มีช่องว่าง ") การตั้งค่าในวรรค [folderA] ใช้งานได้ก็ต่อเมื่อผู้ใช้เมานต์ [folderA] โดยตรง แต่การตั้งค่าไม่ได้ ใช้เมื่อผู้ใช้เมานต์ [share] และนำทางไปยัง folderA การตั้งค่าของ [share] ถูกใช้สำหรับ folderA ฉันจะข้ามการตั้งค่า [share] สำหรับ folderA ได้อย่างไรโดยไม่ต้องติดตั้ง folderA โดยตรง แต่เข้าถึงจาก [share]
soner

คำตอบ:


5

ลองกำหนดค่านี้ (สำหรับส่วนที่แชร์):

[Share]
path        = /var/samba
valid users = @everybody
force group = +everybody
writeable   = yes
create mask = 0660
force create mode = 0110
directory mask = 0770

[folderA]
path        = /var/samba/folderA
valid users = @users_folderA
force group = +users_folderA
browseable = no

[folderB]
path        = /var/samba/folderB
valid users = @users_folderB
force group = +users_folderB
browseable = no

[folderC]
path        = /var/samba/folderC
valid users = @users_folderC
force group = +users_folderC
browseable = no

[folderD]
path        = /var/samba/folderD
valid users = @users_folderD
force group = +users_folderD
browseable = no

อย่าลืมตรวจสอบการกำหนดค่าและรีสตาร์ทแซมบ้า:

# testparm
# service smbd restart
# service nmbd restart

ตั้งค่าการอนุญาต:

chown root:everybody /var/samba
chmod 770 /var/samba
chown root:users_folderA /var/samba/folderA
chmod 2770 /var/samba/folderA
chown root:users_folderB /var/samba/folderB
chmod 2770 /var/samba/folderB
chown root:users_folderC /var/samba/folderC
chmod 2770 /var/samba/folderC
chown root:users_folderD /var/samba/folderD
chmod 2770 /var/samba/folderD

วิธีนี้ไม่อนุญาตให้เข้าถึงโฟลเดอร์ภายในโดยตรง ยิ่งไปกว่านั้นมันจะไม่ปรากฏให้เห็นเลยและสามารถเข้าถึงได้ผ่านทางโฟลเดอร์หลักเท่านั้น


ขอบคุณสิ่งนี้ใช้ได้ ตอนนี้เรามีปัญหาอื่นที่ Excel 2016 ไม่สามารถบันทึกไฟล์ที่มีขนาดใหญ่กว่า 13 KB ไปยัง Samba ได้ แต่นั่นเป็นหัวข้ออื่น ขอบคุณมากสำหรับความช่วยเหลือ!
soner
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.