ฉันจะใช้ chmod บน Mac เพื่อสร้างไฟล์ใหม่ที่สืบทอดสิทธิ์ไดเรกทอรีแม่ได้อย่างไร


23

ฉันใช้ Mac ฉันต้องการทำให้มันเพื่อให้ไฟล์ / โฟลเดอร์ใหม่ที่สร้างขึ้นภายในโฟลเดอร์เฉพาะมีสิทธิ์แบบเดียวกัน (ไม่ใช่กลุ่มที่ได้รับการดูแลแล้ว) เป็นของไดเรกทอรีหลัก บน Linux ปกติฉันจะใช้ setfacl แต่ดูเหมือนว่า chmod บน Mac อาจสามารถทำสิ่งที่ฉันกำลังมองหาได้ ฉันได้อ่านหน้า man สำหรับ chmod แล้ว แต่ก็ยังหาวิธีจัดรูปแบบคำสั่งไม่ได้เพื่อให้ได้สิ่งที่ฉันต้องการ


ฉันต้องการให้ไฟล์ / โฟลเดอร์ใหม่เป็นกลุ่มที่สามารถอ่านและเขียนได้

คำตอบ:


33

ก่อนอื่นบิตของพื้นหลังเพื่ออธิบายสิ่งที่เกิดขึ้น: ไฟล์ใน OS X สามารถมีการตั้งค่าการอนุญาตที่แตกต่างกันสองแบบ: POSIX และ ACL

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

ไฟล์ยังสามารถใช้ access control list (ACL) นี่คือรายการของรายการควบคุมการเข้าถึง (ACEs) ซึ่งแต่ละรายการใช้กับผู้ใช้หรือกลุ่มระบุประเภทของการเข้าถึง (โดยละเอียด) ไม่ว่าพวกเขาจะได้รับอนุญาตหรือปฏิเสธและควรคัดลอก ACE ด้วยหรือไม่ รายการที่สร้างขึ้นภายในโฟลเดอร์ บิตสุดท้ายนั้นเป็นส่วนที่ทำให้มีประโยชน์สำหรับคุณ คุณต้องสร้าง ACE ในโฟลเดอร์ที่ระบุกลุ่มที่คุณต้องการประเภทการเข้าถึงที่คุณต้องการและการสืบทอดแบบเต็ม

chmod บน OS X สามารถจัดการ ACE ด้วยตัวเลือกการอนุญาต + a, -a, etc หากฉันเข้าใจสิ่งที่คุณต้องการคุณจะใช้สิ่งนี้ (ด้วยชื่อกลุ่มและการแทนที่เส้นทางโฟลเดอร์ของคุณ) เพื่อสร้าง ACE:

chmod +a "group:examplegroup allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" /path/to/folder

โปรดทราบว่าการสืบทอดไม่ใช่ "สด" นั่นคือไม่สามารถใช้กับรายการที่สร้างขึ้นก่อนที่คุณจะกำหนด ACE และจะไม่ใช้กับรายการที่สร้างขึ้นที่อื่นจากนั้นย้ายไปไว้ในโฟลเดอร์ คุณสามารถนำไปใช้กับเนื้อหาที่มีอยู่โดยใช้ -R ( chmod -R +a ...) ฉันไม่รู้วิธีใด (ยกเว้นเครื่องมือผู้ดูแลเซิร์ฟเวอร์ของ Apple) เพื่อบังคับให้สืบทอดรายการที่ย้ายเข้าไปในโฟลเดอร์


ขอบคุณสำหรับคำอธิบายที่ดี ฉันเพิ่งลองมันและมันก็ยังเพิ่งสร้างไฟล์ใหม่ที่มีผู้ใช้อ่าน / เขียนทุกคนอ่านสิทธิ์ โฟลเดอร์พาเรนต์ (กลางแจ้ง) ถูกตั้งค่าเป็น 775 สิทธิ์กับผู้ใช้ของฉัน (jhicks) ในฐานะเจ้าของและ _www เป็นกลุ่ม ฉันได้เพิ่มตัวเองในกลุ่ม _www drwxrwxr-x + 13 jhicks _www 442B 16 พ.ย. 09:47 กลางแจ้งฉันวิ่งตามคำสั่งของคุณดังต่อไปนี้: chmod + a "กลุ่ม: _www อนุญาตรายการ, add_file, ค้นหา, add_subdirectory, delete_child, readattr, wratteextattr, rewradsecherit directory_inherit "กลางแจ้ง
Jeremy Hicks

ls -lแสดงเฉพาะการอนุญาต POSIX (แม้ว่า "+" หลังจากการอนุญาตระบุว่ามี ACL อยู่) ใช้ls -leเพื่อแสดง ACL เช่นกัน
Gordon Davisson

หากชื่อกลุ่มมีช่องว่างคุณสามารถใช้: เป็นตัวคั่น ตัวอย่างเช่น "กลุ่ม: กลุ่มของฉันพร้อมช่องว่าง: อนุญาต"
Doug Richardson

ปฏิบัติตามchmod +a ...คำสั่งแล้วฉันสร้างabc.txtในโฟลเดอร์ เปลี่ยนเป็นผู้ใช้รายอื่นและแก้ไขด้วย TextEdit ไฟล์ดังกล่าวจะถูกระบุว่าล็อคและไม่สามารถแก้ไขได้
ohho

ฉันเคยเล่นกับเรื่องนี้ฉันคิดว่าคุณบังคับมรดกกับ + ai
Robin

4

ลองเพิ่ม-Rคำสั่ง @ gordon เช่น:

chmod -R +a "group:_www allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" outdoors

-Rตัวเลือกประสงค์ (ตามที่ระบุไว้ที่นี่ ):

Recurse: เปลี่ยนโหมดของลำดับชั้นของไฟล์ที่รูทในไฟล์แทนที่จะเป็นไฟล์เอง

การเปลี่ยนลำดับชั้นไฟล์ดูเหมือนจะเป็นสิ่งที่คุณกำลังมองหา (สำหรับไฟล์ใหม่ไดเรกทอรี ฯลฯ )

คุณสามารถตรวจสอบโพสต์ Apple.SEนี้ซึ่งครอบคลุมสถานการณ์ที่ค่อนข้างคล้ายกับของคุณ (ยกเว้นที่เกี่ยวข้องกับไดเรกทอรีที่ใช้ร่วมกัน) ซึ่งจำเป็นต้องsudoติดอยู่ด้านหน้า


4

นี่ (-R) ไม่ใช่สิ่งที่คนส่วนใหญ่พยายามทำ เวลาส่วนใหญ่ที่พวกเขาต้องการเปลี่ยน ACL ในไดเรกทอรีระดับบนสุดและทำสิ่งมหัศจรรย์เพื่อบังคับให้วัตถุที่มีอยู่ทั้งหมดเพื่อสืบทอดค่าสถานะตาม ACL ที่ระบุไว้ในรากของต้นไม้ย่อยนั้น นี่เป็นสิ่งที่สวยงามกว่ามากเพราะ ACLs บนวัตถุจะเรียงลำดับ ACE ที่สืบทอดเหล่านี้ตามนโยบาย

และใช่ฉันต้องเขียนสคริปต์ไพ ธ อนเพื่อทำสิ่งนี้ฉันไม่พบสิ่งใดที่เหมาะสม


2
คุณสนใจที่จะใช้ร่วมกัน (เช่นในส่วนสำคัญหากคุณไม่ทราบผมคิดว่าเป็นสิ่งที่ดีท่าทาง?.
myhd


0

สำหรับ Mac ลองใช้PathFinderทำให้การตั้งค่า ACL และ POSIX เป็นเรื่องง่าย หากคุณกำลังโฮสต์ WordPress บน Mac Server คุณจะต้องตั้งค่าdefine('FS_METHOD', 'direct');ใน wp-config.php เพื่อที่การติดตั้งปลั๊กอินและการอัพเกรดจะไม่ถามรายละเอียด FTP ของคุณ

ดังนั้นโดยทั่วไปคุณจะต้องให้สิทธิ์ POSIX เริ่มต้นและเพิ่มผู้ใช้ _www (ไม่ใช่กลุ่ม) ลงใน ACL จากนั้นคลิก Propagate Permission ในหน้าต่าง ACL

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