ทำไม chmod (1) ในกลุ่มส่งผลต่อหน้ากาก ACL?


17

ฉันพยายามที่จะเข้าใจพฤติกรรม Unix นี้ (ซึ่งฉันกำลังทดสอบกับ Ubuntu 11.10):

$ touch foo
$ setfacl -m u:nobody:rwx foo
$ getfacl foo
# file: foo
# owner: michael
# group: michael
user::rw-
user:nobody:rwx
group::rw-
mask::rwx
other::r--

$ chmod g-rw foo
$ getfacl foo
# file: foo
# owner: michael
# group: michael
user::rw-
user:nobody:rwx         #effective:--x
group::rw-          #effective:---
mask::--x
other::r--

ขอให้สังเกตว่าคำสั่ง chmod (1) ได้อัปเดตมาสก์ ACL แล้ว ทำไมสิ่งนี้ถึงเกิดขึ้น

SunOS manpageมีดังต่อไปนี้จะพูดว่า:

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

ฉันถามเพราะมันจะสะดวกสำหรับฉันถ้า chmod (1) ไม่มีพฤติกรรมนี้ ฉันหวังว่าด้วยการเข้าใจว่าทำไมมันถึงทำในสิ่งที่มันทำฉันก็สามารถออกแบบวิธีตั้งค่าการอนุญาตระบบไฟล์ได้ดีขึ้น


2
ตอนนี้ฉันสงสัยว่าฉันควรถามเรื่องนี้กับ unix.stackexchange.com หรือไม่ การพยายามเลือกเว็บไซต์ที่เหมาะสมเป็นสิ่งที่ท้าทายเสมอ
Michael Kropat

คำตอบ:


24

มันจะไม่สะดวกสำหรับคุณถ้าchmod()ไม่มีพฤติกรรมนี้

มันจะไม่สะดวกอย่างมากเพราะสิ่งที่ผู้คนคาดหวังในการทำงานกับ Unixes จะแตกหัก พฤติกรรมนี้ให้บริการคุณได้ดีคุณรู้หรือไม่

มันเป็นความอัปยศที่ IEEE 1003.1e ไม่เคยเป็นมาตรฐานและถูกถอนออกในปี 1998 ในทางปฏิบัติสิบสี่ปีที่ผ่านมามันเป็นมาตรฐานที่หลากหลายของระบบปฏิบัติการ - จากลินุกซ์ผ่านFreeBSDเพื่อSolaris - จริงใช้

IEEE 1003.1e ทำงานร่าง # 17 ทำให้การอ่านน่าสนใจและฉันแนะนำ ในภาคผนวก B § 23.3 คณะทำงานจัดทำรายละเอียดหน้าแปดเหตุผลสำหรับวิธีที่ค่อนข้างซับซ้อนที่ POSIX ACLs ทำงานเกี่ยวกับการS_IRWXGอนุญาตสถานะกลุ่มเก่า (น่าสังเกตว่าคน TRUSIX ให้การวิเคราะห์เท่ากันเมื่อสิบปีก่อน) ฉันจะไม่คัดลอกทั้งหมดที่นี่ อ่านเหตุผลในร่างมาตรฐานเพื่อดูรายละเอียด นี่คือprécisสั้น ๆ :

  • คู่มือ SunOS ไม่ถูกต้อง มันควรอ่าน

    ถ้าคุณใช้chmod(1)คำสั่งเพื่อเปลี่ยนสิทธิ์เจ้าของกลุ่มไฟล์บนไฟล์ที่มีรายการ ACL, ทั้งสิทธิ์เจ้าของกลุ่มไฟล์หรือหน้ากาก ACL จะถูกเปลี่ยนเป็นสิทธิ์ใหม่

    นี่คือพฤติกรรมที่คุณสามารถเห็นได้ว่าเกิดขึ้นแม้ในหน้าคำถามปัจจุบันของคุณ นอกจากนี้ยังเป็นพฤติกรรมที่ระบุโดยร่างมาตรฐาน POSIX หากมีรายการคำสั่งควบคุมการเข้าถึงCLASS_OBJ(ของ Sun และ TRUSIX ACL_MASKอยู่) บิตกลุ่มของchmod()ชุดจะถูกตั้งค่ามิฉะนั้นพวกเขาจะตั้งค่าGROUP_OBJรายการควบคุมการเข้าถึง

  • หากไม่เป็นเช่นนั้นแอปพลิเคชันที่ทำสิ่งต่าง ๆ ที่เป็นมาตรฐานด้วย `chmod ()` คาดว่ามันจะทำงานเป็น `chmod ()` ได้ทำงานแบบดั้งเดิมบน Unixes ที่ไม่ใช่ ACL แบบเก่าจะปล่อยช่องโหว่ด้านความปลอดภัยหรือดูว่าอะไร พวกเขาคิดว่าช่องโหว่ด้านความปลอดภัย:

    • การใช้งานแบบ Unix chmod(…,000)คาดว่าจะสามารถที่จะปฏิเสธการเข้าถึงทั้งหมดไปยังแฟ้มชื่อท่ออุปกรณ์หรือไดเรกทอรีกับ ในการปรากฏตัวของ ACL ของที่นี้จะเปิดเพียงปิดทุกสิทธิ์ของผู้ใช้และกลุ่มถ้าเก่าแผนที่S_IRWXG CLASS_OBJหากไม่มีสิ่งนี้การตั้งค่าการอนุญาตไฟล์เก่า000จะไม่ส่งผลกระทบใด ๆUSERหรือGROUPรายการและผู้ใช้รายอื่นจะยังคงสามารถเข้าถึงวัตถุได้อย่างน่าประหลาดใจ

      ชั่วคราวเปลี่ยนไฟล์บิตได้รับอนุญาตให้เข้าถึงไม่มีchmod 000แล้วเปลี่ยนพวกเขากลับมาอีกครั้งเป็นกลไกการล็อคแฟ้มเก่าใช้ก่อนที่จะได้รับ Unixes กลไกล็อคที่ปรึกษาที่- ที่คุณสามารถดู - คนยังคงใช้วันนี้

    • สคริปต์ Unix แบบดั้งเดิมคาดว่าจะสามารถเรียกใช้chmod go-rwxและจบลงได้โดยมีเพียงเจ้าของวัตถุเท่านั้นที่สามารถเข้าถึงวัตถุได้ อีกครั้ง- อย่างที่คุณเห็น - นี่คือภูมิปัญญาที่ได้รับในอีกสิบสองปีต่อมา และอีกครั้งนี้ไม่ได้ทำงานจนกว่าเก่าS_IRWXGแผนที่ไปCLASS_OBJถ้ามันมีอยู่เพราะมิฉะนั้นว่าchmodคำสั่งจะไม่ปิดการใด ๆUSERหรือGROUPรายการควบคุมการเข้าถึงที่นำไปสู่ผู้ใช้งานอื่นที่ไม่ใช่เจ้าของและไม่ใช่เจ้าของกลุ่มรักษาเข้าถึงสิ่งที่เป็น คาดว่าจะสามารถเข้าถึงได้เฉพาะกับเจ้าของ

    • ระบบที่บิตการอนุญาตแตกต่างจากและanded ด้วย ACLs จะต้องใช้แฟล็กการอนุญาตไฟล์rwxrwxrwxในกรณีส่วนใหญ่ซึ่งจะสร้างความสับสนให้กับ heck จากแอพพลิเคชั่น Unix จำนวนมากที่บ่นเมื่อพวกเขาเห็นว่าพวกเขาคิดว่าอะไร สิ่ง

      ระบบที่บิตการอนุญาตแตกต่างจากและ ored ด้วย ACLs จะมีchmod(…,000)ปัญหาดังกล่าวมาก่อน

อ่านเพิ่มเติม


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

@hopeseekr คุณสามารถแยกลินุกซ์ยูทิลิตี้ GNU 100s และซอฟต์แวร์อื่น ๆS_IRWXGอีก1,000 ชิ้นเพื่อให้พวกเขาไม่ใช้สิทธิ์อีกต่อไป โทรหาฉันเมื่อคุณทำเสร็จแล้ว
เบีย

0

พฤติกรรมนี้ใช้กับรายการ POSIX ACL เท่านั้น เหตุผลที่นี่คือถ้าคุณมีโฟลเดอร์และภายในโฟลเดอร์นั้นมีไฟล์อยู่คุณสามารถ acl เป็น rwx (ตัวอย่าง) โฟลเดอร์และไฟล์ หากสิทธิ์กลุ่มของไฟล์ rw- (ซึ่งอาจเป็นสถานการณ์ทั่วไป) มาสก์จะให้สิทธิ์ที่มีประสิทธิภาพของ rw- ถึงแม้ว่า ACL จะระบุถึง ACL อย่างชัดเจน

ในทางกลับกันไดเรกทอรีที่เกือบจะเป็น + x จะมีสิทธิ์ ACL mask ที่มีประสิทธิภาพเช่นกันและอนุญาตให้ x

โดยสรุปมาสก์นี้ใช้เพื่อแยกความแตกต่างระหว่างการอนุญาตไฟล์และโฟลเดอร์สำหรับชุด POSIX ACL เพื่อให้ไฟล์ไม่สามารถเรียกใช้งานได้เมื่อไม่ควรเป็นปกติ


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