ทำไมฉันถึงสามารถลบไฟล์ที่ root เป็นเจ้าของในโฮมไดเร็กตอรี่ของฉันโดยไม่ต้องรูท?


40

ดังนั้นฉันจึงทำการบำรุงรักษาบนเซิร์ฟเวอร์ของฉันก่อนหน้านี้ในวันนี้และสังเกตเห็นว่าฉันสามารถลบไฟล์ที่ root เป็นเจ้าของในโฮมไดเร็กตอรี่ของฉันได้

ฉันสามารถทำซ้ำตัวอย่าง:

[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 20:59 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ sudo touch file-owned-by-root
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-r--r--.  1 root     root        0 Oct  5 21:00 file-owned-by-root
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ rm file-owned-by-root
rm: remove write-protected regular empty file ‘file-owned-by-root’? y
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$

คำถามของฉันคือฉันจะลบไฟล์ที่เป็นของ root และมีสิทธิ์ได้-rw-r--r--อย่างไรในขณะที่ฉันไม่ได้รูท


6
คุณสามารถลบรายการในไดเรกทอรีที่ชี้ไปที่ไฟล์เนื่องจากคุณมีสิทธิ์ในการเขียนไปยังไดเรกทอรี คุณไม่สามารถลบไฟล์ได้อย่างแน่นอน ไฟล์อาจมีฮาร์ดลิงก์อื่นที่อื่น
253751

2
นามสกุลตลก: คุณยังสามารถเปลี่ยนชื่อไฟล์หรือสร้างลิงก์ได้ยาก
peterh กล่าวคืนสถานะโมนิก้า

11
โปรดพิจารณาทางเลือกของคุณสำหรับคำตอบที่ได้รับการยอมรับเพราะปัจจุบันหนึ่งอย่างจริงจังทำให้เข้าใจผิด: คุณไม่ได้รับอนุญาตให้ทำอะไรกับมันมดเนื้อหาภายในนั้นขึ้นอยู่กับการอนุญาตของไดเรกทอรี
คธูลู

@Cthulhu เรียบร้อยแล้ว! ขอบคุณทุกคนสำหรับความคิดเห็นทั้งหมดที่มีต่อคำถามและคำตอบนี้มีข้อมูลที่เป็นประโยชน์มากมายที่นี่!
Carl Bennett

คำตอบ:


34

สิทธิ์เนื้อหาและแอตทริบิวต์ทั้งหมดเป็นส่วนหนึ่งของ inode ชื่ออยู่ในรายการไดเรกทอรี สิทธิ์ไม่ได้รับการสืบทอดซ้ำ (ยกเว้นเมื่อคุณใช้ค่าเริ่มต้นใน Posix ACLs)

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

เมื่อคุณลบโฟลเดอร์ที่ไม่ว่างคุณต้องมีสิทธิ์เขียนในโฟลเดอร์ที่คุณลบและพาเรนต์


1
ดังนั้นการอนุญาตอยู่ใน inode หรือการอนุญาตอยู่ในการเชื่อมโยงไปยัง inode และฉันเพิ่งลบลิงค์นั้น (และทำให้การเชื่อมโยงเท่านั้นที่จะถูกลบออกดังนั้น inode สิ้นสุดอยู่)?
Carl Bennett

3
สิทธิ์อยู่ใน inode สิ่งนี้สามารถตรวจสอบได้อย่างง่ายดายโดยการสร้างฮาร์ดลิงก์ไปยังไฟล์การเปลี่ยนแปลงการอนุญาตในสิ่งนั้นจากนั้นตรวจสอบการอนุญาตบนต้นฉบับ
Wouter Verhelst

แต่สมมติว่ามีไดเรกทอรีและไฟล์อยู่ในนั้นทั้งสองเป็นของ root ไดเรกทอรีอยู่ในไดเรกทอรีที่ผู้ใช้เป็นเจ้าของ คุณจะไม่สามารถลบออกได้ใช่ไหม
njzk2

1
เป็นคุณลักษณะเฉพาะสำหรับ ext2, ext3 และ ext4 ตัวอย่าง: sudo touch test_file;sudo chattr +i test_file;rm -f test_fileดู:man chattr
Mircea Vutcovici

1
แอตทริบิวต์ที่ไม่เปลี่ยนรูปปกป้องไฟล์สำหรับการเปลี่ยนแปลงใด ๆ แม้จากราก
Mircea Vutcovici

19

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


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

1
@Cthulhu คุณสามารถลบไฟล์ที่เป็นเจ้าของรูทและสร้างไฟล์ใหม่ที่แก้ไขด้วยชื่อเดียวกันหลังจากได้หรือไม่?
KDEx

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

@inetknght สิ่งนี้ควรมีความชัดเจน ฉันเข้าใจว่าคุณกำลังพยายามอ้างถึงการจัดการไฟล์ด้วยตัวเองในฐานะเอนทิตี แต่ยังไม่ชัดเจน ตัวอย่างเช่นคุณไม่สามารถแก้ไขเนื้อหาได้ และคุณไม่ต้องพูดถึงคุณลักษณะที่อาจมีสิทธิ์ของไดเรกทอรีทรัมป์
Mike S

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