Tại sao tôi có thể xóa một tập tin thuộc sở hữu của root trong thư mục nhà của tôi mà không phải là root?


40

Vì vậy, tôi đã thực hiện một số bảo trì trên máy chủ của mình vào hôm nay và nhận thấy rằng tôi có thể xóa một tập tin thuộc sở hữu của root trong thư mục nhà của tôi.

Tôi đã có thể sao chép một mẫu:

[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]$

Câu hỏi của tôi là làm thế nào tôi có thể xóa một tập tin thuộc sở hữu của root và có quyền -rw-r--r--, trong khi tôi không root?


6
Bạn có thể xóa mục nhập trong thư mục trỏ đến tệp vì bạn có quyền ghi vào thư mục. Bạn không nhất thiết phải xóa tệp; các tập tin có thể có một liên kết cứng khác ở một nơi khác.
dùng253751

2
Tiện ích mở rộng hài hước: bạn cũng có thể đổi tên tệp hoặc tạo liên kết cứng của tệp.
peterh nói rằng phục hồi Monica

11
Vui lòng xem xét lại lựa chọn của bạn cho câu trả lời được chấp nhận, bởi vì câu trả lời hiện tại hoàn toàn sai lệch: bạn không được phép làm bất cứ điều gì để chống lại nội dung trong đó dựa trên quyền của thư mục .
Cthulhu

@Cthulhu Xong rồi! Cảm ơn tất cả mọi người cho tất cả các ý kiến ​​cho Q & A này, chắc chắn rất nhiều thông tin hữu ích ở đây!
Carl Bennett

Câu trả lời:


34

Các quyền, nội dung và tất cả các thuộc tính là một phần của inode. Tên là trong mục thư mục. Các quyền không được kế thừa theo cách đệ quy (trừ khi bạn sử dụng mặc định trong Posix ACL).

Khi bạn xóa một tập tin, bên trong bạn chỉ cần xóa một liên kết cứng từ mục nhập thư mục đến nút. Khi tất cả các liên kết cứng được loại bỏ và inode không được sử dụng, hệ thống tập tin sẽ lấy lại không gian. Bạn chỉ cần ghi quyền trên thư mục bất kể quyền nào được đặt trên tệp (ngoại trừ quyền mở rộng không thay đổi). Tương tự cho một thư mục trống.

Khi bạn xóa một thư mục không trống, bạn cần có quyền ghi vào thư mục bạn đang xóa và cha mẹ của nó.


1
Vì vậy, các quyền nằm trong inode hoặc các quyền nằm trên liên kết đến inode và tôi chỉ xóa liên kết đó (và do đó liên kết duy nhất với nó bị xóa, vì vậy inode không còn tồn tại)?
Carl Bennett

3
Quyền là trên inode. Điều này có thể dễ dàng xác minh bằng cách tạo một liên kết cứng đến một tệp, thay đổi các quyền trên đó và sau đó kiểm tra các quyền trên bản gốc.
Wouter Verhelst

nhưng hãy nói rằng có một thư mục và một tệp trong đó đều thuộc về root, thư mục nằm trong một thư mục thuộc sở hữu của người dùng. Bạn sẽ không thể loại bỏ chúng sau đó, phải không?
njzk2

1
Nó là một thuộc tính đặc trưng cho ext2, ext3 và ext4. Ví dụ: sudo touch test_file;sudo chattr +i test_file;rm -f test_fileXem:man chattr
Mircea Vutcovici 7/10/2015

1
Thuộc tính bất biến bảo vệ một tập tin cho bất kỳ thay đổi nào ngay cả từ root.
Mircea Vutcovici

19

Khi bạn sở hữu thư mục, bạn được phép làm bất cứ điều gì với nó và nội dung trong đó dựa trên quyền của thư mục. Do đó, mặc dù không sở hữu tệp, bạn vẫn có thể xóa tệp vì bạn đã có quyền đọc / ghi vào thư mục chứa tệp.


46
Không chính xác. Ví dụ: OP sẽ không thể sửa đổi tệp thuộc sở hữu gốc đó. Vấn đề là, xóa một tập tin không được coi là một hoạt động trên tập tin mà là trên thư mục (loại bỏ con trỏ đến một tập tin) và đó là lý do tại sao quyền trên thư mục quan trọng.
Cthulhu

1
@Cthulhu vì vậy bạn có thể xóa một tệp sở hữu gốc và tạo một tệp sửa đổi mới có cùng tên sau không?
KDEx 7/10/2015

3
@Morgoroth có bạn có thể, nhưng đó sẽ không còn là cùng một tệp nữa. Đối với một ví dụ khác (có lẽ rõ ràng hơn), bạn sẽ không thể đọc tệp trong thư mục của mình nếu nó thuộc về root và chỉ chủ sở hữu của nó mới có thể đọc được.
Cthulhu

@inetknght Điều này cần được làm rõ. Tôi hiểu rằng bạn đang cố gắng tự xử lý các tệp, như các thực thể, nhưng điều đó không rõ ràng. Bạn không thể sửa đổi nội dung của nó, ví dụ. Và bạn không đề cập đến các thuộc tính có thể chiếm quyền điều khiển thư mục.
Mike S

1
@captcha Đó là vì vilưu tệp trước trong bản sao tạm thời, sau đó xóa tệp gốc và đổi tên bản sao thành bản gốc (hoặc đại loại như thế).
Cthulhu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.