ความสำคัญของผู้ใช้และเจ้าของกลุ่มในการอนุญาตให้ใช้ไฟล์


20

ฉันเพิ่งพบสิ่งที่ไม่คาดคิด (สำหรับฉัน) เกี่ยวกับการอนุญาตไฟล์บน Linux (Arch Linux) โดยทั่วไปฉันมี:

  • userX ใน groupX
  • fileX userX:groupX ---rwx----

สิ่งที่ฉันปริศนา: ฉันไม่สามารถดำเนินการใด ๆ ( rwx) fileXบน ถูกต้องหรือไม่ ใครช่วยได้โปรดยืนยันว่านี่เป็นพฤติกรรมที่คาดหวัง

การกระทำเดียวที่ฉันสามารถดำเนินการอยู่mvและrmเพราะฉันมีสิทธิ์ในการเขียนในไดเรกทอรีแม่

สิ่งคือฉันคิดเสมอว่าการอนุญาตเหล่านี้ล้มเหลวซึ่งกันและกันโดยเริ่มจากการใช้งานทั่วไปมากที่สุด (อื่น ๆ -> กลุ่ม -> ผู้ใช้) กล่าวอีกนัยหนึ่งว่าo=rwxใครสนใจว่ากลุ่มและผู้ใช้มีความตั้งใจอย่างไร เห็นได้ชัดว่านี่ไม่ใช่กรณี แต่มันก็ไม่สมเหตุสมผลสำหรับฉัน ดูเหมือนว่าใช้ง่าย สิ่งเดียวที่วิธีนี้ดูเหมือนจะมีประโยชน์คือการแยกบุคคล / กลุ่มที่เฉพาะเจาะจงออกไปได้อย่างง่ายดายซึ่งดูเหมือนจะไม่เป็นวิธีที่ชาญฉลาดที่จะใช้มัน นอกจากนี้เจ้าของ (และกลุ่ม?) ควรจะchmodใช่ไหมล่ะ? มีความคิดในเรื่องนี้ไหม?


คุณอยู่ใน groupX หรือไม่
exussum

แน่นอน ตรวจสอบ gid ที่มีประสิทธิภาพด้วยid
alex

คำตอบ:


24

สิ่งคือฉันคิดเสมอว่าการอนุญาตเหล่านี้ล้มเหลวซึ่งกันและกันโดยเริ่มจากการใช้งานทั่วไปมากที่สุด (อื่น ๆ -> กลุ่ม -> ผู้ใช้)

หากเป็นกรณีนั้นสิทธิ์“ อื่น ๆ ” จะมีผลกับทุกคน

กล่าวอีกนัยหนึ่งถ้า o = rwx ใครสนใจสิ่งที่ persmissions สำหรับกลุ่มและผู้ใช้คืออะไร

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

ครั้งแรกมันไม่สำคัญว่ากลุ่มผู้ใช้เป็นของโดยตรง เคอร์เนลไม่มีความเห็นของผู้ใช้ที่อยู่ในกลุ่ม สิ่งที่เคอร์เนลดูแลคือทุก ID ผู้ใช้ ( UID ที่มีผลบังคับใช้ ) และรายการของID กลุ่ม (GID ที่มีประสิทธิภาพและ GID เสริม) กลุ่มจะถูกกำหนดในเวลาเข้าสู่ระบบโดยกระบวนการเข้าสู่ระบบ - เป็นกระบวนการเข้าสู่ระบบที่อ่านฐานข้อมูลกลุ่ม (เช่น/etc/group) ID ผู้ใช้และกลุ่มได้รับการสืบทอดโดยกระบวนการลูก¹

เมื่อกระบวนการพยายามเปิดไฟล์ด้วยสิทธิ์ Unix แบบดั้งเดิม:

  • หากผู้ใช้ที่เป็นเจ้าของไฟล์เป็น UID ที่มีประสิทธิภาพของกระบวนการดังนั้นจะมีการใช้บิตสิทธิ์ผู้ใช้
  • มิฉะนั้นหากกลุ่มที่เป็นเจ้าของไฟล์เป็น GID ที่มีประสิทธิภาพของกระบวนการหรือหนึ่งใน ID กลุ่มเสริมของกระบวนการแล้วจะมีการใช้บิตสิทธิ์ของกลุ่ม
  • มิฉะนั้นจะใช้บิตสิทธิ์อื่น ๆ

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

  • หากมี ACL ในไฟล์สำหรับ UID ที่มีประสิทธิภาพของกระบวนการจะมีการใช้เพื่อกำหนดว่าจะให้สิทธิ์การเข้าถึงหรือไม่
  • มิฉะนั้นหากมี ACL ในไฟล์สำหรับ GID ที่มีประสิทธิภาพของกระบวนการหรือหนึ่งใน ID กลุ่มเสริมของกระบวนการกระบวนการนั้นจะใช้บิตสิทธิ์ของกลุ่ม
  • มิฉะนั้นจะใช้บิตสิทธิ์อื่น ๆ

ดูเพิ่มเติมที่ลำดับความสำคัญของ ACLS เมื่อผู้ใช้อยู่ในหลายกลุ่มสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการใช้รายการ ACL รวมถึงผลกระทบของมาสก์

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

การใช้บิตชุดเดียวแทนที่จะเป็นบิตทั้งหมดสำหรับแต่ละการกระทำ (อ่านเขียนดำเนินการ) มีข้อดีหลายประการ:

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

¹ พวกเขาสามารถเปลี่ยนแปลงได้เมื่อดำเนินการตามกระบวนการsetuidหรือ setgid สิ่งนี้ไม่เกี่ยวข้องกับปัญหาที่เกิดขึ้น


ดี ... โดย "ยุบ" ผมหมายถึงชนิดของสิ่งเดียวกันการหรือการดำเนินงาน :)
อเล็กซ์

ขอบคุณที่สละเวลา; +1 สำหรับคำตอบทางเทคนิคที่ละเอียดและสวยมาก
alex

คำตอบที่ดี แต่ฉันมีคำถามเกี่ยวกับสัญลักษณ์แสดงหัวข้อย่อยสุดท้ายของคุณ: มันง่ายกว่าที่จะใช้และวิเคราะห์? จะไม่ตรวจสอบการอนุญาตเพียงแค่ลงไปที่ ORing การอนุญาตด้วยกันอย่าง OP คิดว่าเป็นกรณีหรือไม่
gardenhead

เคสขอบนี้ดูโง่สำหรับฉัน: (userX ใน groupX) + (userZ ใน groupX) คุณมี fileX userX: groupX --- rwx ---- ตอนนี้ผู้สร้างโฟลเดอร์ดั้งเดิม userX ไม่สามารถเข้าถึง fileX .. แต่ userZ สามารถทำได้ และพวกเขาทั้งสองส่วนในกลุ่มเดียวกัน ใช้งานง่ายจริงๆ
alexfvolk

4

สิทธิ์ที่เฉพาะเจาะจงมากขึ้นจะมีความสำคัญเหนือกว่าที่เฉพาะเจาะจงน้อยลง

userX ใน groupX

fileX userX: groupX --- rwx ----

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

โปรดอ่านส่วนนี้ของหน้า wiki

https://en.wikipedia.org/wiki/File_system_permissions#Classes


2

-rwxrw---- หมายถึงเจ้าของมีสิทธิ์อ่านเขียนและดำเนินการกลุ่มมีสิทธิ์อ่านและเขียนและอื่น ๆ ไม่มีสิทธิ์

การอนุญาตที่คุณให้ไว้จะให้สิทธิ์กลุ่ม 'groupX' ในการอ่านเขียนและเรียกใช้ไฟล์ หากคุณเป็นสมาชิกของกลุ่ม "groupX" แต่ไม่ใช่เจ้าของไฟล์สิทธิ์เหล่านี้จะมีผลกับคุณ

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

ฉันมักจะอ่านสิทธิ์จากซ้ายไปขวา ฉันเป็นเจ้าของหรือไม่ ถ้าใช่การอนุญาตของเจ้าของจะมีผล ถ้าไม่; ฉันเป็นสมาชิกของกลุ่มหรือไม่ ถ้าใช่จะใช้การอนุญาตกลุ่ม ถ้าไม่เช่นนั้นสิทธิ์สำหรับ "อื่น ๆ " จะมีผลกับฉัน

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


1
ฉันเชื่อว่าคุณเข้าใจผิดคำถาม เมื่อ OP กล่าวว่าการอนุญาต "ยุบ" เป็นอื่น ๆ -> กลุ่ม -> ผู้ใช้ฉันคิดว่าพวกเขาหมายถึงว่าเมื่อพิจารณาว่าการกระทำของคุณได้รับอนุญาตหรือไม่ก่อนอื่นจะมีการตรวจสอบการอนุญาตจากนั้นจึงเป็นกลุ่ม ล้มเหลว) รายการ "ผู้ใช้"
โจเซฟอาร์.

@JosephR yeap ว่าเป็นสิ่งที่ฉันหมายถึง :)
อเล็กซ์

โอ้ขอโทษนะ ฉันจะลบส่วนนั้น มีประโยชน์อะไรในคำตอบ?
arnefm

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

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

0

ฉันสามารถเพิ่มผู้ใช้ในกลุ่มให้สิทธิ์กลุ่มกับไดเรกทอรี (070) จากนั้นหลังจากการรีสตาร์ทสามารถเข้าถึงโฟลเดอร์ได้

สร้างกลุ่ม: sudo groupadd groupname

เพิ่มผู้ใช้ไปยังกลุ่ม: sudo gpasswd -a ชื่อผู้ใช้ groupname

ตรวจสอบให้แน่ใจว่าไดเรกทอรีทั้งหมดอยู่ภายใต้การเป็นเจ้าของกลุ่มที่ถูกต้อง (ต้องเป็นสมาชิกปัจจุบันของ groupname เพื่อดำเนินการ): sudo chgrp -R groupname directory_path /

ให้เฉพาะกลุ่ม rwx สำหรับโฟลเดอร์ (อาจเป็น rw ปรับได้ตามต้องการ): sudo chmod -R 070 directory_path

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

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