Tại sao một người dùng mới thừa hưởng các tập tin từ một người dùng đã xóa?


24

Vì vậy, tôi đã phải làm một bài tập trong một cuốn sách như bài tập về nhà. Trước tiên, bạn phải tạo một người dùng như:

useradd -c "Steven Baxter" -s "/bin/sh" sbaxter

Sau đó, bạn phải thêm một số tệp vào /home/sbaxterthư mục:

touch /home/sbaxter/ some.txt new.txt files.txt

Sau đó, bạn phải xóa sbaxterngười dùng và tạo một người dùng mới có tên mjane. Trước sự ngạc nhiên của tôi khi tôi chạy find /home/ -user mjane, người dùng mới mjanehiện sở hữu tất cả các tệp cũ của sbaxter, chuyện gì đã xảy ra?

Câu trả lời:


41

Ma quỷ nằm trong chi tiết, trong useraddtrang người đàn ông (bạn có thể thấy điều đó bằng cách phát hành man 8 useradd):

   -u, --uid UID
       The numerical value of the user's ID. This value must be unique,
       unless the -o option is used. The value must be non-negative. The
       default is to use the smallest ID value greater than or equal to
       UID_MIN and greater than every other user.

Vì vậy, nó sẽ mặc định sử dụng uid nhỏ nhất không sử dụng, lớn hơn những người dùng khác, trong tệp mật khẩu. Xem như xóa sbaxter đã xóa anh ta khỏi tệp passwd, uid của anh ta "miễn phí" và được gán cho mjane (vì các uid useraddpicks giống nhau cho cả người dùng tại thời điểm useraddlệnh được sử dụng).

Các tệp trên đĩa chỉ lưu trữ uid và KHÔNG phải bản dịch tên người dùng (vì bản dịch này được xác định trong tệp mật khẩu). Bạn có thể xác nhận rằng bằng cách phát hành ls -lnđể xem các tập tin sở hữu uid có gì.

Tôi thực sự khuyên bạn nên vô hiệu hóa thay vì xóa tài khoản. Khóa tài khoản trên hầu hết các bản phân phối Linux có thể đạt được usermod -L -e today <username>, khóa mật khẩu và đặt tài khoản hết hạn vào ngày hôm nay (bạn có thể xem ngày hết hạn của tài khoản chage -l).


2
... Đây có vẻ là một lỗ hổng bảo mật khủng khiếp. Có cách nào để làm việc xung quanh nó?
BlueRaja - Daniel Pflughoeft

6
@ BlueRaja-DannyPflughoeft Đây không phải là một lỗi bảo mật: người dùng được xác định bằng ID người dùng của họ, không phải bởi tên người dùng của họ. Khi bạn xóa một tài khoản, bạn phải xóa tất cả các tệp của tài khoản đó (tức là tất cả các tệp thuộc sở hữu của ID người dùng này, không chỉ thư mục chính của người dùng). Đây là một phần của thủ tục thông thường để xóa tài khoản.
Gilles 'SO- ngừng trở nên xấu xa'

2
@OlivierDulac Đó gọi là bản sao lưu. Ngoài ra, khóa nhưng không xóa tài khoản miễn là bạn cần giữ dữ liệu của tài khoản. Rốt cuộc, nếu bạn cần giữ dữ liệu, thì tài khoản vẫn cần thiết.
Gilles 'SO- ngừng trở nên xấu xa'

1
Khóa tài khoản trên hầu hết các bản phân phối Linux có thể đạt được usermod -L -e today <username>, khóa mật khẩu và đặt tài khoản hết hạn vào ngày hôm nay (bạn có thể xem ngày hết hạn của tài khoản chage -l).
Drav Sloan

5
Đó là một lỗ hổng bảo mật, theo tiêu chuẩn ngày nay. Như ví dụ cho thấy, điều này có nghĩa là bạn không thể liên kết con người với các tệp. Chắc chắn, con người có thể được liên kết mạnh mẽ với các tài khoản, nhưng tệp tài khoản <-> tài khoản <-> của con người bị hỏng do tái chế UID. Sau đó, một lần nữa, Unix không bao giờ có bảo mật tuyệt vời về mặt này ( rootcó thể giả mạo hầu hết mọi thứ). Bạn cần những con đường kiểm toán cho điều đó.
MSalters

13

UID của người dùng đã xóa được sử dụng lại bởi người dùng mới và các hệ thống tệp sử dụng UID cho quyền sở hữu, không phải tên người dùng.

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.