เหตุใดผู้ใช้ที่ไม่ใช่รูทสามารถลบไฟล์ที่สร้างโดยรูทได้


24

ให้ผู้ใช้ที่ไม่ใช่ผู้ใช้ "joshua" ในฐานะ root ฉันสร้างไฟล์ชื่อ "foo" ที่โฮมไดเร็กตอรี่ของ joshua (/ home / johsua /); ดูเหมือนว่านี้:

-rw-r--r--  1 root   root       0 12-19 21:00 foo

แล้วลบมันออกเป็นโจชัวฉันสามารถลบมันได้สำเร็จ

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


1) นี่คือนอกหัวข้อ 2) ฉันสงสัยอย่างมากว่าคุณสามารถลบมันในฐานะผู้ใช้ที่ไม่ใช่รูทโดยไม่มีการsudoเพิ่มระดับสิทธิ์หรืออื่น ๆ คุณอาจมองข้ามบางสิ่งบางอย่าง
DarkDust

16
@DarkDust ไฟล์เป็นรายการในไดเรกทอรีหลัก หากคุณมีสิทธิ์เขียนในไดเรกทอรีคุณสามารถลบไฟล์ในนั้นโดยไม่คำนึงถึงผู้ที่เป็นเจ้าของไฟล์ (เว้นแต่ bit เหนียวมีการตั้งค่ายังอยู่ในไดเรกทอรี)
เลขที่

@nos: โง่ฉันคุณพูดถูก
DarkDust

1
รายการในไดเร็กทอรีพาเรนต์เป็นการอ้างอิงไปยังไฟล์ มันไม่ใช่ไฟล์นั้นเอง (มิฉะนั้นไฟล์จะเชื่อมโยงอย่างหนักกับไดเรกทอรีมากกว่าหนึ่งไดเรกทอรีได้อย่างไร)
David Schwartz

@DavidSchwartz นั่นเป็นจริง แต่การลบไฟล์ออกจากไดเรกทอรีนั้นเกี่ยวกับการลบการอ้างอิงในโครงสร้างไดเรกทอรี
mc0e

คำตอบ:


43

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

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

การลบไฟล์ออกจากไดเรกทอรี (เรียกว่า 'unlinking') เป็นการดำเนินการในไดเรกทอรี การยกเลิกการเชื่อมโยงไฟล์จะลดจำนวนการอ้างอิง

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


1
และแน่นอนrmคำสั่ง muddies น้ำเล็กน้อยเพราะrmเป็นตัวย่อของ "ลบ" และผู้ใช้จะได้รับการฝึกฝนให้คิดว่าrmเป็นการดำเนินการ "ลบ" ผู้ใช้จำนวนมากใช้rmทุกวันในขณะที่ไม่ทราบว่าการดำเนินการที่ใช้งานจริงนั้นเป็น "ยกเลิกการเชื่อมโยง" ไม่ใช่ "ลบ" ดังนั้นจึงไม่น่าแปลกใจที่ผู้ใช้หลายคนพบว่าพฤติกรรมนี้น่าแปลกใจเมื่อพวกเขาพบมันครั้งแรก
Daniel Pryden

เป็นเรื่องที่น่าแปลกใจสำหรับหลาย ๆ คน อย่างน้อยrmคำสั่งจะลบไฟล์หรือไดเรกทอรีออกจากไดเรกทอรี มันแย่กว่าบน Windows ที่มีคำสั่งเรียกใช้delเนื่องจากมันใช้ในการลบไฟล์ แต่ใช้กับเครื่อง Windows รุ่นใหม่ (ตั้งแต่ NT4) มันเป็นการยกเลิกการเชื่อมโยง
David Schwartz

"ผู้ใช้ไม่ได้ลบไฟล์ระบบทำ" สิ่งนี้ไม่สมเหตุสมผล "ระบบ" ไม่สามารถทำการเปลี่ยนแปลงที่ต้องการการเข้าถึงแบบพิเศษในนามของผู้ใช้ที่ไม่มีสิทธิพิเศษ ดังนั้นคำตอบนี้จะไม่สามารถอธิบายได้ว่าเหตุใดผู้ใช้รายเดียวกันจึงไม่สามารถทำสิ่งเดียวกันได้หากไดเรกทอรีปัจจุบันเป็นเจ้าของ + เขียนได้โดย root เท่านั้น คำตอบด้านล่างโดย @kerrek นั้นถูกต้องและรัดกุม
FractalSpace

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

ใช่. และในที่สุดทุกอย่างก็ทำโดย "ระบบ" แต่ไม่ก่อนที่จะผ่านกฎการแยกสิทธิพิเศษที่กำหนดไว้สำหรับ "พื้นที่ผู้ใช้" ในสถานการณ์นี้เช่น "ระบบ" ไม่ได้ทำการกระทำตามกฎทั่วไป แต่จะทำตามการอนุญาตที่กำหนดไว้ใน "ไดเรกทอรีหลัก" ส่วนสำคัญของปัญหานี้ในคำถาม OP
FractalSpace

0

ขั้นแรกให้เดา: สำหรับการลบไฟล์คุณต้องมีสิทธิ์เขียนในโฟลเดอร์ที่มีอยู่ ดังนั้นลอง / home / johsua / foo / bar ให้ 755 to foo และ 644 to bar

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