ทำไมผู้ใช้รายหนึ่งถึงสามารถลบไฟล์ 755 ของผู้ใช้รายอื่นได้?


35

ฉันมีการอัปโหลดสคริปต์สำรองข้อมูลที่ไฟล์ SCP uploadของไปยังเซิร์ฟเวอร์อื่นโดยใช้ผู้ใช้ สคริปต์บนเซิร์ฟเวอร์เป้าหมายอีกแล้ว chown 755เหล่านี้ให้กับผู้อื่นและการตั้งค่าโหมดไฟล์ไปยัง

หากฉันใช้ SSH ไปยังเซิร์ฟเวอร์เป้าหมายโดยใช้uploadผู้ใช้ฉันสามารถลบไฟล์ที่ถูกลบ พวกเขาไม่ควรอ่านอย่างเดียวเหรอ?

นี่คือลักษณะของไฟล์บนเซิร์ฟเวอร์เป้าหมายและผู้ใช้uploadสามารถลบได้

-rwxr-xr-x 1 maciekish maciekish 650M Nov  1 01:07 2014-11-01-data.tar.bz2

มีการuploadเพิ่มผู้ใช้โดยใช้useraddและไม่ได้เป็นส่วนหนึ่งของmaciekishกลุ่ม

เมื่อพยายามที่จะลบไฟล์uploadผ่านทาง ssh ฉันได้รับคำถามว่าฉันต้องการที่จะลบ“ เขียนไฟล์ปกติป้องกัน” และฉันสามารถที่จะพูดYและลบ


คำตอบ:


64

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

คุณสามารถตั้งค่าstickyบิต - aka“ การ จำกัด การลบ” ซึ่งจะป้องกันไม่ให้ใครนอกจากเจ้าของเปลี่ยนชื่อหรือลบไฟล์ในไดเรกทอรีนั้น (เช่นใน/tmp) หากต้องการทำสิ่งนี้ให้เรียกใช้chmod o+t *directory*ในฐานะเจ้าของไดเรกทอรี


12

ในระบบไฟล์ Unix ทั่วไปไฟล์ใด ๆ ที่สามารถระบุด้วยจำนวนรายการไดเรกทอรีโดยพลการซึ่งแต่ละคนมี "ฮาร์ดลิงก์"

จากมุมมองการนำไปใช้งานมีความแตกต่างระหว่างการลบรายการไดเร็กทอรีสุดท้าย (ฮาร์ดลิงก์) สำหรับไฟล์และเพียงแค่ลบการอ้างอิงเดียวจากหลาย ๆ อย่างไรก็ตามจากมุมมองทางความหมายไม่มีความแตกต่าง

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


3
รู้จักกันในชื่อฮาร์ดลิงก์
บ๊อบ

1
@Bob: ฉันรู้ว่าคำว่า "ฮาร์ดลิงก์" ใช้เพื่ออธิบายการอ้างอิงที่สร้างขึ้นเพื่อไฟล์ที่มีอยู่แล้ว; ในกรณีที่ไฟล์ไม่เคยมีการอ้างอิงมากกว่าหนึ่งไฟล์การอ้างอิงโดด ๆ นั้นยังคงเรียกว่า "ฮาร์ดลิงก์" หรือไม่?
supercat

3
ไม่มีความแตกต่างระหว่างลิงค์ สร้างไฟล์ A สร้างฮาร์ดลิงก์ B ลบไฟล์ A ตอนนี้ B เป็นไฟล์หรือฮาร์ดลิงก์หรือไม่ เพื่อความเข้าใจว่ามันทำงานอย่างไรดีกว่าที่จะเห็นว่าเป็นฮาร์ดลิงก์ N และไม่ใช่ไฟล์ 1 และฮาร์ดลิงก์ (N-1) นอกจากนี้ยังมีลิงก์ที่มีอยู่เมื่อเปิดไฟล์
gnasher729

@ gnasher729: ฉันยอมรับว่าในกรณีที่มีหลายลิงก์หรือมีไฟล์อยู่มันทำให้รู้สึกถึงการอ้างถึงพวกเขาทั้งหมดว่า "ฮาร์ดลิงก์" หากไม่มีความแตกต่างทางความหมายระหว่างพวกเขา ในทางกลับกันฉันคิดว่าจากทั้งความหมายและประสิทธิภาพการทำงานอาจมีข้อได้เปรียบในการแยกความแตกต่างระหว่างรายการไดเรกทอรีที่มีการอ้างอิงเพียงไฟล์เดียวเสมอเทียบกับลิงค์ที่อาจมีการสร้างฮาร์ดลิงก์อื่น ไม่ว่าในกรณีใดฉันไม่รู้ว่าการอ้างอิงรายการไดเรกทอรีนั้นถูกต้องหรือไม่ "แต่ละอันเรียกว่า" ฮาร์ดลิงก์ "
supercat

2
@supercat มันไม่ธรรมดาอย่างไม่น่าเชื่อ แต่มันถูกต้อง พิจารณาst_nlink( "จำนวนการเชื่อมโยงอย่างหนัก") struct statในสนาม ใส่ไว้ในไดเรกทอรีเก็บลิงค์ยากไปยังไฟล์
hobbs
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.