Tại sao một người dùng có thể xóa các tệp 755 của người dùng khác?


35

Tôi có một tập lệnh tải lên sao lưu mà tập tin của scp đến một máy chủ khác bằng cách sử dụng người dùng upload. Sau đó, một tập lệnh khác trên máy chủ đích sẽ chuyển chúng cho người dùng khác và đặt chế độ tệp thành 755.

Nếu sau đó tôi SSH vào máy chủ đích bằng cách sử dụng uploadngười dùng, tôi có thể xóa các tệp đã được chỉnh sửa. Không nên đọc chúng?

Đây là những gì một tập tin trông giống như trên máy chủ mục tiêu và người dùng uploadcó thể xóa nó.

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

Người dùng uploadchỉ được thêm bằng cách sử dụng useraddvà không phải là một phần của maciekishnhóm.

Khi cố gắng xóa tập tin như uploadqua ssh, tôi nhận được câu hỏi liệu tôi có muốn xóa tập tin thường xuyên được bảo vệ bằng văn bản hay không và tôi có thể nói Yvà xóa nó không.


Câu trả lời:


64

Các tập tin chỉ đọc; tuy nhiên, xóa một tệp không sửa đổi nó mà chỉ thư mục mẹ (về cơ bản nó sẽ xóa tệp khỏi danh sách thư mục) - và có vẻ như bạn có quyền ghi đầy đủ vào thư mục.

Bạn có thể thiết lập stickybit bit aka aka bị hạn chế xóa cờ Flag sẽ ngăn bất kỳ ai ngoại trừ chủ sở hữu đổi tên hoặc xóa các tệp trong thư mục đó (như trong /tmp). Để làm điều này, chạy chmod o+t *directory*như là chủ sở hữu của thư mục.


12

Trong một hệ thống tệp Unix điển hình, bất kỳ tệp nào cũng có thể được xác định bởi một số lượng mục nhập thư mục tùy ý, mỗi tệp chứa một "liên kết cứng".

Từ quan điểm thực hiện, có một sự khác biệt giữa việc xóa mục nhập thư mục cuối cùng (liên kết cứng) cho một tệp và chỉ cần xóa một tham chiếu trong số nhiều tham chiếu. Tuy nhiên, từ quan điểm ngữ nghĩa không có sự khác biệt.

Nếu có nhiều liên kết cứng tồn tại vào một tệp, ghi vào tệp bằng cách sử dụng bất kỳ liên kết nào làm thay đổi tệp mà tất cả chúng nhìn thấy. rmTuy nhiên, việc sử dụng trên một liên kết chỉ khiến tệp không thể truy cập được thông qua liên kết đó. Các liên kết khác đến tệp tiếp tục thấy cùng một tệp.


3
Thường được gọi là liên kết cứng.
Bob

1
@Bob: Tôi biết thuật ngữ "liên kết cứng" được sử dụng để mô tả các tham chiếu được tạo cho một tệp đã tồn tại; trong trường hợp một tệp chưa bao giờ có nhiều hơn một tham chiếu đến nó, thì tham chiếu đơn độc đó có còn được gọi là "liên kết cứng" không?
supercat

3
Không có sự khác biệt giữa các liên kết. Tạo tập tin A, tạo liên kết cứng B, xóa tập tin A. Bây giờ B là tập tin hay liên kết cứng? Để hiểu cách thức hoạt động của nó, tốt hơn nên xem nó là N liên kết cứng chứ không phải là 1 tệp và (N-1) liên kết cứng. Ngoài ra còn có các liên kết tồn tại khi một tập tin được mở.
gnasher729

@ gnasher729: Tôi đồng ý rằng trong trường hợp có nhiều liên kết tồn tại hoặc tồn tại trong một tệp, sẽ có ý nghĩa khi gọi tất cả chúng là "liên kết cứng" nếu không có sự khác biệt về ngữ nghĩa giữa chúng. Mặt khác, tôi nghĩ rằng từ quan điểm hiệu suất và ngữ nghĩa có thể có những lợi thế để phân biệt giữa một mục nhập thư mục luôn là tham chiếu duy nhất đến một tệp, so với một liên kết cứng khác có thể được tạo. Trong mọi trường hợp, tôi không biết liệu có đúng hay không khi nói về các mục trong thư mục, "mỗi mục được gọi là" liên kết cứng ".
supercat

2
@supercat nó không phổ biến lắm, nhưng nó là chính xác. Xem xét trường st_nlink("số lượng liên kết cứng") trong struct stat. Nói một cách đơn giản, các thư mục giữ các liên kết cứng đến các tập tin.
hobbs
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.