Tại sao người dùng không root có thể xóa các tệp được tạo bởi root?


24

Với một người dùng không phải là "joshua", vì root tôi đã tạo một tệp có tên là "foo" tại thư mục chính của joshua (/ home / johsua /); nó trông như thế này:

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

và sau đó xóa nó như joshua, tôi có thể xóa nó thành công.

Tôi hy vọng rằng joshua không có đủ quyền để xóa nó. Đây có phải là một loại 'Quyền thừa kế' không? Nền tảng của tôi là Debian 5.0.7.


1) Đây là ngoài chủ đề. 2) Tôi rất nghi ngờ rằng bạn có thể xóa người dùng không phải là người dùng root mà không có sudosự leo thang đặc quyền khác. Bạn có thể bỏ qua một cái gì đó.
DarkDust

16
@DarkDust Một tập tin là một mục trong thư mục mẹ của nó. Nếu bạn có quyền ghi trong một thư mục, bạn có thể xóa các tệp trong đó bất kể ai sở hữu các tệp đó (trừ khi bit dính cũng được đặt trên thư mục)
nos 19/12/11

@nos: Ngớ ngẩn với tôi, bạn nói đúng.
DarkDust

1
Một mục trong thư mục mẹ của nó là một tham chiếu đến một tệp. Nó không phải là tập tin chính nó. (Nếu không, làm thế nào một tập tin có thể được liên kết cứng với nhiều hơn một thư mục?)
David Schwartz

@DavidSchwartz điều đó đúng, nhưng xóa tệp khỏi thư mục là về việc xóa tham chiếu trong cấu trúc thư mục.
mc0e

Câu trả lời:


43

Người dùng đã không xóa các tập tin, hệ thống đã làm. Người dùng chỉ cần xóa tệp khỏi thư mục của riêng mình. Hệ thống đã xóa tệp vì số tham chiếu của nó giảm xuống không. Tình cờ người dùng xóa tệp khỏi thư mục đã giảm số tham chiếu của nó xuống 0. (Nếu tệp được liên kết cứng với thư mục khác hoặc tay cầm đã được mở vào tệp, nó sẽ không bị xóa.)

Hệ thống tự động xóa các tệp khi số tham chiếu của chúng giảm xuống không. Chủ sở hữu của tập tin không quan trọng. Có nhiều cách mà ai đó không phải là chủ sở hữu của tệp có thể giảm số tham chiếu của tệp xuống 0.

Xóa tệp khỏi thư mục (được gọi là 'hủy liên kết') là một thao tác trên thư mục. Hủy liên kết một tập tin làm giảm số lượng tham chiếu của nó.

Tương tự, người dùng không phải là chủ sở hữu có thể đóng tay cầm cuối cùng vào một tệp không được liên kết với bất kỳ thư mục nào. Đóng xử lý đó cũng sẽ xóa tệp, vì một lần nữa số tham chiếu sẽ giảm về không.


1
Và dĩ nhiên, rmlệnh này làm vấy bẩn vùng biển một chút, bởi vì đó rmlà tên viết tắt của "remove" và người dùng được đào tạo để nghĩ về rmhoạt động "xóa". Nhiều người dùng sử dụng rmhàng ngày trong khi không biết rằng thao tác mà nó thực sự thực hiện là "hủy liên kết", không phải là "xóa". Do đó, thực sự không có gì đáng ngạc nhiên khi nhiều người dùng thấy hành vi này đáng ngạc nhiên khi lần đầu tiên bắt gặp nó.
Daniel Pryden

Nó chắc chắn là đáng ngạc nhiên với nhiều người. Ít nhất là rmlệnh thực tế loại bỏ một tập tin hoặc thư mục từ một thư mục. Nó tệ hơn trên Windows nơi lệnh được gọi del, bởi vì nó được sử dụng để xóa một tệp nhưng trên các máy Windows hiện đại (kể từ NT4), đó cũng là một hoạt động hủy liên kết.
David Schwartz

"Người dùng không xóa tệp, hệ thống đã làm" Điều này vô nghĩa. "Hệ thống" không thể thực hiện các thay đổi yêu cầu quyền truy cập đặc quyền thay mặt cho người dùng không có đặc quyền. Như vậy, câu trả lời này sẽ không giải thích được tại sao cùng một người dùng không thể làm như vậy nếu thư mục hiện tại được sở hữu + chỉ có thể ghi bằng root. Câu trả lời dưới đây của @kerrek là chính xác và súc tích.
FractalSpace

@FractalSpace Huh? Hệ thống có thể thực hiện các thay đổi yêu cầu quyền truy cập đặc quyền thay mặt cho người dùng không có đặc quyền và luôn luôn làm như vậy. Ví dụ, thay đổi byte trên đĩa đòi hỏi quyền truy cập đặc quyền. Tuy nhiên, nếu người dùng có thể sửa đổi một tệp, hệ thống sẽ quyết định sửa đổi một số byte trên đĩa mặc dù người dùng không có quyền tự sửa đổi các byte đó. Người dùng không thể sửa đổi bộ nhớ kernel, nhưng kernel có thể khi thực hiện thay mặt người dùng. Các hệ thống hoạt động bằng cách quyết định thực hiện các hoạt động mà người dùng của họ không thể ủy quyền trực tiếp.
David Schwartz

Vâng. Và cuối cùng mọi thứ được thực hiện bởi "hệ thống". Nhưng không phải trước khi trải qua các quy tắc phân tách đặc quyền nghiêm ngặt được đặt cho "không gian người dùng" cụ thể đó. Trong kịch bản này, ví dụ: "hệ thống" không thực hiện hành động như một quy tắc chung, nhưng nó tuân theo các quyền được đặt trên "thư mục mẹ". Phần chính của vấn đề này trong câu hỏi OP.
FractalSpace

0

Đoán đầu tiên: Để xóa một tập tin, bạn cần có quyền ghi trên thư mục chứa. Vì vậy, hãy thử / home / johsua / foo / bar, đưa 755 cho foo và 644 cho thanh.

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.