ฉันจะสร้างมุมมองแบบเขียนอย่างเดียวของโฟลเดอร์ได้อย่างไร?


12

ฉันต้องการที่จะมีสถานที่ในระบบแฟ้มที่นำเสนอ "มุมมอง" แบบเขียนอย่างเดียวของโฟลเดอร์อื่นที่ฉันมีสิทธิ์เข้าถึงแบบอ่าน - เขียน

ฉันนึกภาพสิ่งที่คล้ายกับพฤติกรรมของกล่องดร็อป FTP ซึ่งสามารถคัดลอกไฟล์ลงไปได้ แต่ไม่สามารถอ่านออกมาได้เช่น:

$ ls read-write-view/ write-only-view/
read-write-view/:
a  b  c

write-only-view/:

$ cp d write-only-view/
$ ls read-write-view/ write-only-view/
read-write-view/:
a  b  c  d

write-only-view/:

สิ่งสำคัญคือสิ่งนี้ใช้งานได้ในตัวอย่าง - เนื้อหายังคงปรากฏให้เห็นเมื่อเข้าถึงผ่านread-write-view/และ "มุมมอง" ทั้งสองทำงานได้สำหรับผู้ใช้รายเดียว

ฉันจะตั้งค่าสิ่งนี้ได้อย่างไร การจัดเรียงลิงก์สัญลักษณ์อย่างชาญฉลาดบางที หรือการกำหนดค่าที่ผิดปกติของภูเขาผูก?

คำตอบ:


2

ฉันถามคำถามเดียวกันนี้สำหรับนักศึกษาดรอปบ็อกซ์ในรายชื่อผู้รับจดหมายของแซมบ้าเมื่อไม่กี่ปีก่อน คุณต้องเพิ่มคุณสมบัติ acl ในระบบไฟล์ของคุณ (จากแพ็คเกจ acl) นี่คือคำตอบของ Jeremy Allison ...

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

แต่ตราบใดที่คุณไม่รังเกียจที่จะอนุญาตให้นักเรียนเห็นชื่อของไฟล์อื่น ๆ คุณสามารถตั้งค่า DropBox เพื่อให้นักเรียนสามารถเขียนลงไป (และไฟล์ของตนเอง) แต่ไม่สามารถแก้ไขหรือดูไฟล์อื่น ๆ ได้

ประการแรกคุณต้องการตรวจสอบให้แน่ใจว่าไฟล์ที่สร้างในไดเรกทอรี DropBox ไม่ได้เป็นของกลุ่มหลักของนักเรียน แต่โดยกลุ่มเจ้าของของ DropBox direcotry ดังนั้น:

chgrp ครู DropBox

เพื่อให้เป็นเจ้าของโดยกลุ่มครู จากนั้นตั้งบิต setgid ในไดเรกทอรี DropBox เพื่อให้แน่ใจว่าไฟล์ที่สร้างขึ้นภายในนั้นมีกลุ่มครูที่เป็นเจ้าของ

chmod g + s DropBox

จากนั้นตรวจสอบให้แน่ใจว่าไฟล์ใน DropBox สามารถเปลี่ยนชื่อหรือลบโดยเจ้าของไฟล์เท่านั้นหรือโดยเจ้าของไดเรกทอรีหรือโดย root (สิทธิ์เดียวกันกับที่ / tmp มี)

chmod + t DropBox

จากนั้นให้นักเรียนเขียนลงในไดเรกทอรีโดยเพิ่ม ACL

setfacl -mg: นักเรียน: rwx DropBox

ตราบใดที่ defaul acl ถูกตั้งค่าไว้เพื่อให้ "ผู้อื่น" ไม่มีสิทธิ์ไฟล์ที่เขียนโดยนักเรียนลงในไดเรกทอรีนั้นจะเป็นของตัวเอง แต่จะมีกลุ่ม "ครู" เป็นเจ้าของและนักเรียนจะไม่สามารถอ่านแต่ละรายการได้ ไฟล์อื่น ๆ

หากคุณต้องการทำให้ไฟล์เป็นเจ้าของโดยเจ้าของไดเรกทอรีไม่ใช่นักเรียนที่สร้างไฟล์ขึ้นมาคุณจะต้องตั้งค่าการแชร์แยกต่างหากตามที่อธิบายข้างต้น แต่จากนั้นเพิ่มพารามิเตอร์ระดับการแชร์:

เจ้าของสืบทอด = ใช่

ซึ่งจะทำให้ไฟล์ที่สร้างขึ้นภายในไดเรกทอรีในการแบ่งปันนั้นจะเป็นเจ้าของโดยไดเรกทอรีที่มีไม่ใช่เจ้าของสร้าง


1

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

ตัวอย่างเช่นเพื่ออนุญาตให้ทุกคนเขียนไปยังโฟลเดอร์ แต่ไม่แสดงรายการเนื้อหาคุณสามารถทำสิ่งต่อไปนี้:

chmod o=wx folder

หรือเพื่อให้สิทธิ์การเข้าถึงนี้แก่ผู้ใช้กลุ่มใดกลุ่มหนึ่งโดยเฉพาะ:

chgrp groupname folder
chmod o=,g=wx folder

ขณะนี้ผู้ใช้เหล่านั้นจะไม่สามารถแสดงรายการเนื้อหาของโฟลเดอร์ แต่จะสามารถวางไฟล์ในโฟลเดอร์:

$ ls folder
ls: cannot open directory folder: Permission denied
$ touch folder/filename

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


1

คุณสามารถสร้างโฟลเดอร์ดร็อป "write-only-view" ที่มีการเข้าถึง rw และใช้การแจ้งเตือน cronjob หรือ inode เพื่อย้ายเนื้อหาไปยัง "read-write-view" อื่น ๆ


1

ฉันเชื่อว่าคุณสามารถใช้อุบายหลอกลวงใน/etc/fstab:

/path/to/read-write-view /path/to/write-only-view none bind 0 0

ดังนั้นคุณอาจจะ:

chmod a=wx /path/to/write-only-view
chmod a=rwx /path/to/read-write-view

1

ใช้bindfsซึ่งถูกออกแบบมาเพื่อ "ติดตั้งไดเรกทอรีไปยังตำแหน่งอื่นและเปลี่ยนบิตสิทธิ์"

เริ่มต้นด้วยโฟลเดอร์ปกติที่มีทั้งการเข้าถึงแบบอ่านและเขียน:

$ mkdir read-write-view && touch read-write-view/{a,b,c}
$ ls read-write-view
a  b  c

ใช้ bindfs เพื่อติดตั้งโฟลเดอร์โดยไม่ต้องอ่าน:

$ mkdir write-only-view
$ sudo bindfs --perms=a-r read-write-view write-only-view

ตรวจสอบว่าเฉพาะเนื้อหาของโฟลเดอร์ต้นฉบับเท่านั้นที่สามารถแสดงรายการได้:

$ ls read-write-view write-only-view
read-write-view:
a  b  c
ls: cannot open directory write-only-view: Permission denied

ตรวจสอบว่าสามารถเขียนโฟลเดอร์ดั้งเดิมผ่านทางเมาท์:

$ echo 'Can you read this?' > write-only-view/d
$ cat read-write-view/d
Can you read this?

ตรวจสอบว่าไฟล์ไม่สามารถอ่านผ่านเมานต์:

$ cat write-only-view/d
cat: write-only-view/d: Permission denied

0

ก่อนอื่นให้คิดย้อนกลับง่ายกว่า คุณมีโฟลเดอร์ที่ rw สำหรับผู้ที่ต้องการเข้าถึงการเขียนและ "ดู" ของโฟลเดอร์นี้แบบอ่านอย่างเดียวสำหรับผู้ที่ต้องการการเข้าถึงแบบอ่านอย่างเดียว

ฉันไม่เคยได้รับเมานต์ - ผูก -o ตัวเลือกในการทำงานอย่างถูกต้องวิธีที่น่าเชื่อถือที่สุดในการทำเช่นนี้คือการใช้ nfs เพิ่มสิ่งต่อไปนี้ใน / etc / exports

/path-to-folder/folder 127.0.0.1(secure,ro,no_root_squash)

จากนั้นติดตั้ง "มุมมอง" แบบอ่านอย่างเดียวด้วย

mount -o ro 127.0.0.1:/path-to-folder/folder /read-only-folder

ตอนนี้คุณควรมีมุมมองแบบอ่านอย่างเดียวของโฟลเดอร์ต้นฉบับของคุณ

ฉันคิดว่าคุณสามารถทำสิ่งเดียวกันกับ samba / cifs แต่นี่จะสมเหตุสมผลสำหรับการเข้าถึงเครือข่ายเท่านั้น

วิธีแก้ปัญหานี้ได้รับแรงบันดาลใจจาก ( ถูกขโมย ) Howtoนี้ ฉันหวังว่ามันจะช่วย


ฉันไม่ได้ถามเกี่ยวกับมุมมองแบบอ่านอย่างเดียวเพียงอ่านเขียนและเขียนอย่างเดียว
ændrük

0

ฉันไม่คิดว่ามันเป็นไปได้เนื่องจากคุณต้องอ่านดิสก์ "เขียนเท่านั้น" เพื่อแสดงเนื้อหา

ถ้าฉันจะขายอุปกรณ์ดังกล่าวใครจะสามารถตรวจสอบว่ามันทำงานอย่างไร บางทีนี่อาจเป็นจุดเริ่มต้นสำหรับ kickstarter


0

นี่ไม่ใช่คำตอบ แต่เป็นความคิดและคำถามอื่นอีก สำหรับฉันมันฟังดูราวกับว่ามันสามารถนำมาใช้ผ่านประเภทของเบ็ดหรือไก

บางโปรแกรมในพื้นหลังอาจดูโฟลเดอร์แบบเขียนอย่างเดียว (ไม่ใช่โดยการโพลมันสามารถแจ้งเตือนด้วยFAMหรืออะไรทำนองนั้น) จากนั้นย้ายแต่ละไฟล์ออกจากมันไปยังโฟลเดอร์แบบอ่านอย่างเดียวทันทีที่ปรากฏ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.