ดำเนินการ vs อ่านบิต สิทธิ์ไดเรกทอรีใน Linux ทำงานอย่างไร


380

ใน CMS ของฉันฉันสังเกตเห็นว่าไดเรกทอรีต้องการบิต executable ( +x) ที่กำหนดไว้เพื่อให้ผู้ใช้เปิดได้ เหตุใดจึงต้องใช้สิทธิ์ดำเนินการเพื่ออ่านไดเรกทอรีและสิทธิ์ไดเรกทอรีใน Linux ทำงานอย่างไร


17
... เอ่อเพราะนั่นคือสิ่งที่ "+ x" ธงสำหรับ :)
badp


16
คิดดังนี้: รายการไดเรกทอรีมีชื่อไฟล์ดังนั้น "อ่าน" ไดเรกทอรีจึงแสดงรายการไฟล์ "ใช้" ไดเรกทอรีกำลังเข้าถึงไฟล์
tylerl

7
ด้วยไดเรกทอรีรันชุดบิตคุณจะได้รับอนุญาตให้สำรวจลำดับชั้นของ เนื่องจากคุณเป็นสมาชิกของ "คนอื่น" และมีการเรียกใช้บิตเซ็ต ( chmod 771 dirOne) เท่านั้นคุณไม่สามารถแสดงรายการเนื้อหาของ dirOne ได้ แต่ถ้ามันมีไดเรกทอรีย่อย "dirTwo" ที่มีสิทธิ์ set like ( chmod 774 dirTwo) คุณสามารถแสดงรายการเนื้อหาของมันได้!
Stphane

1
ผู้เข้าชมในอนาคตควรเห็นคำถามที่เกี่ยวข้องใน AskUbuntu: askubuntu.com/q/1106822/295286
Sergiy Kolodyazhnyy

คำตอบ:


351

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

  • บิตอ่าน ( r) ช่วยให้ผู้ใช้รับผลกระทบที่จะแสดงรายการไฟล์ในสารบบ
  • บิตเขียน ( w) ช่วยให้ผู้ใช้รับผลกระทบในการสร้าง, เปลี่ยนชื่อหรือลบไฟล์ในสารบบและปรับเปลี่ยนแอตทริบิวต์ของไดเรกทอรี
  • รันบิต ( x) ช่วยให้ผู้ใช้รับผลกระทบที่จะเข้าสู่ไดเรกทอรีและเข้าถึงไฟล์และไดเรกทอรีภายใน
  • เหนียวเล็กน้อย ( Tหรือtถ้าบิตดำเนินการตั้งค่าสำหรับคนอื่น ๆ ) ระบุว่าไฟล์และไดเรกทอรีภายในไดเรกทอรีที่อาจจะถูกลบหรือเปลี่ยนชื่อโดยเจ้าของของพวกเขา (หรือราก)

25
คำตอบที่ดี แต่ฉันคิดว่าประโยคสุดท้ายทำให้เข้าใจผิด ไม่มีสิทธิ์ใด ๆ เหล่านี้ที่สามารถเขียนทับต่อไฟล์ได้จริง นี่คือ“การเข้าถึง” เป็นบิตคลุมเครือ: +xในการเข้าถึงทุนไดเรกทอรี inodes ไฟล์ผ่านทางนี้เฉพาะไดเรกทอรี (อะไรน้อยไม่มีอะไรมากดี ... อาจจะchdirต้องการ+xมากเกินไป) ในการอ่านหรือเขียนเนื้อหาของไฟล์เดียวผู้ใช้ยังต้องการ+r/ +wบนไฟล์นี้ แต่สิ่งเหล่านั้นเป็นสิทธิ์ที่แตกต่างกัน (พวกเขาไม่ได้แทนที่สิ่งใด ๆ )
Stéphane Gimenez

2
ธงเปลี่ยนรูปเป็นระบบแฟ้มที่เฉพาะเจาะจงและมันจะไม่ได้อย่างแม่นยำแทนสิทธิ์เหล่านั้นที่ว่าทำไมผมคิดว่าประโยคสุดท้ายเป็นความเข้าใจผิด :-)
Stéphane Gimenez

1
ฉันคิดว่ามันอาจจะมีประโยชน์ที่จะกล่าวถึง ACL ในคำตอบนี้และคำตอบอื่น ๆ ทำให้แอปพลิเคชันของพวกเขาสำหรับบางไดเรกทอรีสามารถทำให้เข้าใจผิดถ้าใครจะพิจารณาเฉพาะข้อมูลที่ได้รับจาก Chris Down
user907860

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

1
@ StéphaneGimenez " +xในไดเรกทอรีให้สิทธิ์การเข้าถึงไฟล์ inodes" - ดูเหมือนว่าจะเป็นเรื่องที่ดี แต่บางทีก็ไม่ได้บอกเรื่องราวทั้งหมดใช่ไหม หากไม่มีบิตเรียกใช้ที่ตั้งไว้ในไดเรกทอรีคุณจะไม่สามารถเปลี่ยนชื่อไฟล์ของไฟล์ในไดเรกทอรีนั้นได้ ฉันสงสัยว่าทำไมถึงเป็นเช่นนี้เพราะชื่อไฟล์ถูกเก็บไว้ในรายการไดเรกทอรีไม่ใช่ไอโหนด
Kevin Wheeler

259

อันดับแรกคิดว่า: ไดเรกทอรีคืออะไร? มันเป็นเพียงรายการของรายการ (ไฟล์และไดเรกทอรีอื่น ๆ ) ที่อยู่ภายใน ดังนั้น: directory = รายชื่อ

อ่านบิต = หากตั้งไว้คุณสามารถอ่านรายการนี้ ตัวอย่างเช่นหากคุณมีชื่อไดเรกทอรีpoems:

  • คุณสามารถls poemsและคุณจะได้รับรายชื่อของรายการที่อาศัยอยู่ภายใน ( -lจะไม่เปิดเผยรายละเอียดใด ๆ !)
  • touch poems/so <TAB> poems/somefileคุณสามารถใช้บรรทัดคำสั่งเสร็จสิ้นเช่น
  • คุณไม่สามารถสร้างpoemsไดเรกทอรีทำงานของคุณได้ (เช่นทำcdไว้)

เขียนบิต = ถ้าตั้งค่าคุณสามารถแก้ไขรายการนี้ได้เช่นคุณสามารถ {เพิ่มเปลี่ยนชื่อลบ} ชื่อได้ แต่! คุณสามารถทำได้จริง ๆ ก็ต่อเมื่อบิตรันไทม์ถูกตั้งค่าไว้ด้วย

ดำเนินการบิต = ทำให้ไดเรกทอรีนี้ไดเรกทอรีการทำงานของคุณคือcdเป็นมัน คุณต้องได้รับอนุญาตหากคุณต้องการ:

  • เข้าถึง (อ่านเขียนดำเนินการ) รายการที่อยู่ภายใน
  • แก้ไขรายการเองเช่นเพิ่มเปลี่ยนชื่อลบชื่อ (แน่นอนต้องเขียนบิตในไดเรกทอรี)

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

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

สรุป:

อ่านบิต = คุณสามารถอ่านชื่อในรายการ
เขียนบิต = คุณสามารถ {เพิ่มเปลี่ยนชื่อลบ} ชื่อในรายการถ้าบิตเรียกใช้ถูกตั้งค่าไว้ด้วย
ดำเนินการบิต = คุณสามารถทำให้ไดเรกทอรีนี้เป็นไดเรกทอรีทำงานของคุณได้

PS: บทความที่กล่าวถึงโดย Kusalananda เป็นการอ่านที่ดี


17
การคิดเกี่ยวกับไดเรกทอรีเป็นรายการทำให้สิ่งต่าง ๆ ชัดเจนและสมเหตุสมผลมากขึ้น
Trismegistos

20
คำตอบที่ดี แต่มุ่งเน้นไปที่คำว่า "ไดเรกทอรีทำงาน" ฉันต้องการxบิตสำหรับใด ๆเข้าถึงไฟล์นี้: สำหรับcat a/b/c/dผมต้องxบิตในทุกa, bและcแม้ว่าฉันไม่ได้ใช้พวกเขาเป็น CWD
glglgl

1
นี่คือที่ฉันรู้ว่าคุณไม่สามารถเขียนเว้นแต่จะปฏิบัติการเกินไป! กรณีที่ 2 น่าสนใจและเป็นคำตอบที่ยอดเยี่ยม!
Mirko

1
หมายเหตุอีกประการหนึ่งคือแม้ว่าคุณจะได้xรับอนุญาตในไดเรกทอรีหากคุณไม่ได้xรับอนุญาตในไฟล์ภายในคุณจะไม่สามารถ "เรียกใช้" ไฟล์ได้ catตัวอย่างเช่นคุณสามารถทำได้เท่านั้นแต่คุณไม่สามารถเรียกใช้ไฟล์ได้
xji

2
หากคุณต้องการls -lทำงานกับโฟลเดอร์ต้องใช้ทั้งสิทธิ์rและการxอนุญาต
Eric Wang

44

ฉันได้เตรียมตารางนี้ด้วยสิทธิ์ที่เป็นไปได้ทั้งหมดและผลกระทบในทางปฏิบัติของพวกเขา

สิทธิ์ไดเรกทอรีลินุกซ์

(*) ชื่อไฟล์เท่านั้น : คุณลักษณะอื่น ๆ เช่นขนาดหรือวันที่ไม่สามารถเข้าถึงได้ เช่นคุณสามารถใช้ปุ่มแท็บเพื่อเติมข้อความอัตโนมัติ แต่ไม่ใช่คำสั่ง ls

ความคิดบางอย่าง :

  • ด้วยX unset R และ W ส่วนใหญ่จะไร้ประโยชน์
  • การปิดใช้งานXเพียงอย่างเดียวจะช่วยให้คุณรู้สึกถึงความปลอดภัยที่ผิดพลาดเนื่องจากคุณสามารถอ่านและเขียนเนื้อหาไฟล์และเข้าถึงไดเรกทอรีย่อย คุณควรตรวจสอบให้แน่ใจว่าไดเรกทอรีย่อยทุกรายการมีสิทธิ์ที่ชัดเจน
  • คุณจะใช้ค่าอื่น ๆ น้อยกว่า:
    • 0 : ไม่มีการเข้าถึง
    • 1 : การเข้าถึงขั้นต่ำที่อนุญาตให้มีการสำรวจ
    • 5 : อนุญาตให้อ่าน / เขียน แต่ไม่เปลี่ยนโครงสร้างของแผนผังไดเรกทอรีเอง
    • 7 : การเข้าถึงแบบเต็ม

1
ฉันจะพิจารณา 5 ค่าที่เป็นประโยชน์เมื่อคุณต้องการอนุญาตให้อ่าน / เขียน แต่ไม่เปลี่ยนโครงสร้างของต้นไม้ไดเรกทอรีเอง
hgiesel

คุณพูดถูก Updated!
เดวิด

4
แผนภูมิสรุปที่ดี ทำให้ฉันสงสัยว่าสิ่งที่ใครบางคนกำลังคิด-W-จะทำหน้าที่เทียบเท่า---ไดเรกทอรี ไม่ง่ายมาก แน่นอนบิตประเภทต่ำเหล่านี้มักจะไม่
CivFan

2
ผมทดสอบนี้บน mac ของฉัน แต่-W-ฉันจะเปลี่ยนชื่อไดเรกทอรี (ในไดเรกทอรีกับบิตเหนียว) ---แต่ไม่ได้มี ดูเหมือนจะเป็นความแตกต่าง
cozyconemotel

3
@ David คุณจะหายไปเล็กน้อยเหนียว
Pacerier

42

นี่คือบทความที่ดีเกี่ยวกับเรื่องนี้

สรุป:

ไดเรกทอรีที่มีการxตั้งค่าบิตช่วยให้ผู้ใช้cd(เปลี่ยนไดเรกทอรี) ในไดเรกทอรีนี้และเข้าถึงไฟล์ในนั้น

รายละเอียด:

  • อ่าน ( r)

    ความสามารถในการอ่านชื่อไฟล์ที่จัดเก็บในไดเรกทอรีนี้

  • เขียน ( w)

    ความสามารถในการเปลี่ยนชื่อไฟล์ในไดเรกทอรีสร้างไฟล์ใหม่หรือลบไฟล์ที่มีอยู่หากคุณมีสิทธิ์ดำเนินการ หากคุณไม่มีเอ็กซีคิวต์ perms การเขียน perms ก็ไม่มีความหมาย

  • ดำเนินการ ( x)

    ความสามารถในการcdเข้าสู่ไดเรกทอรีนี้และเข้าถึงไฟล์ในไดเรกทอรีนี้

นี่คือตัวอย่างเล็ก ๆ น้อย ๆ ที่ควรทำให้เข้าใจง่ายขึ้น:

# "Full Access".  Reegen can list, create, delete, rename, delete,
# and stat any files in dir.
# Access to file contents is subject to the permissions
# of the file itself.
# New files can be created, any file can be deleted, regardless of
# file permissions.
drwx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except create,
# delete, or rename files in this directory.
dr-x------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except list the
# filenames in this directory.  If she suspects there is a file
# named "program" she can list it, but cannot do an 'ls'
# of the directory itself.  She can access any file (file
# permissions permitting) if she knows its name.  She can
# create new files, or rename/delete existing ones.
d-wx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen cannot create or delete any files in this directory.
# She can access any file (permissions permitting) if she
# knows its name already.
d--x------  1 reegen    reegen          4096 Jan 01 2003  dir

มีข้อมูลมากยิ่งขึ้นในบทความการแฮ็กลินุกซ์แดง



2

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

ใช้เส้นทาง/a/b/c.txtเป็นตัวอย่างสมมติว่าผู้ใช้มี 1) ดำเนินการอนุญาต/และ/a; 2) ได้อ่านการอนุญาตบน/a/b; 3) /a/b/c.txtการอ่านและเขียนได้รับอนุญาตบน

  • ผู้ใช้จะล้มเหลวในการอ่าน (รายการ) /aเนื่องจากไม่มีสิทธิ์อ่าน แต่การแก้ปัญหาเส้นทางไม่ได้ล้มเหลว

  • ผู้ใช้จะสามารถอ่าน (รายชื่อ) /a/bเพราะผู้ใช้มีผู้ได้รับอนุญาตบน/, และอ่านได้รับอนุญาต/a /a/bโปรดทราบว่าเมื่ออ่าน/a/bชื่อไฟล์c.txtจะสามารถมองเห็นได้ แต่เมตาดาต้า (เช่นขนาดไฟล์) และเนื้อหาไม่ได้เพราะชื่อไฟล์นั้นถูกเก็บไว้ในไดเรกทอรีไม่ใช่ไฟล์ แต่เมตาดาต้าจะถูกเก็บไว้ในไอโหนดของไฟล์

  • ผู้ใช้จะไม่สามารถอ่าน/a/b/c.txtได้เนื่องจากเมื่อแก้ไขเส้นทางจาก/ไป/aยัง/a/bจะล้มเหลว/a/bเนื่องจากผู้ใช้ไม่มีสิทธิ์ดำเนินการ

ดูเพิ่มเติมว่าชื่อพา ธ ถูกแก้ไขเป็นไฟล์อย่างไร


0

การเปรียบเทียบที่มีประโยชน์คือการคิดว่าแต่ละไฟล์เป็นหนังสือและแต่ละไดเรกทอรีเป็นห้องที่เก็บหนังสือ

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

กฎเหล่านั้นแยกและแตกต่างจากกฎของหนังสือแต่ละเล่ม มีกฎที่อนุญาตให้บางคนเปิดหนังสือและอ่านเนื้อหา: บิตอ่านสำหรับแต่ละไฟล์ มีกฎในการแก้ไขเนื้อหาของหนังสือ: บิตการเขียนสำหรับแต่ละไฟล์ และเพื่อเรียกใช้ไฟล์: บิต execute (s) สำหรับแต่ละไฟล์

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

ดังนั้นผู้ใช้สามารถได้รับอนุญาตให้เข้าห้องและลบหนังสือออกจากห้องสมุด แต่ไม่อนุญาตให้อ่านเนื้อหาของหนังสือเล่มเดียวกัน

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

และเอ็กซีคิวต์บิตใช้สำหรับควบคุมว่าใครสามารถเข้าไปในห้องหนังสือ


-1

ความหมายของ Execute สำหรับไดเรกทอรีค่อนข้างชัดเจน เนื่องจากไม่มีการอนุญาตการใช้งานข้ามซึ่งแตกต่างจาก Windows คุณต้องโหลดบางอย่างมากเกินไป ผู้ออกแบบเลือกดำเนินการซึ่งทำให้เกิดความสับสนไม่รู้จบ ในฐานะที่เป็นคนที่รักษาความปลอดภัยคอมพิวเตอร์กำหนดสิทธิ์ Execute ให้กับสิ่งที่คุณไม่ได้ตั้งใจที่จะดำเนินการจริง ๆ แล้วดูหลบ


1
การประดิษฐ์บิตสิทธิการใช้งานจะมีการกำหนดแนวคิดการอนุญาตการสำรวจที่แตกต่างกันไว้ล่วงหน้าก่อนวันที่ประมาณสองทศวรรษ ตรรกะของคำตอบนี้ขึ้นอยู่กับช่วงเวลาในประวัติศาสตร์ที่ไม่เหมือนโลกแห่งความเป็นจริงและยังไม่สามารถสังเกตการมีอยู่ของGENERIC_EXECUTEมันและสิ่งที่มันเป็น
JdeBP
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.