Trên hệ thống UNIX hoặc Linux hiện đại, làm cách nào bạn có thể cho biết mã nào đặt tệp /etc/passwd
lưu trữ tên người dùng? Tên người dùng có được phép chứa các ký tự có dấu trọng âm (từ phạm vi 0x80..0xFF trong, ví dụ: ISO 8859-1 hoặc 8859-15) không? Tệp /etc/passwd
có chứa UTF-8 không? Bạn có thể nói rằng nó có chứa UTF-8 không? Điều gì về văn bản thuần túy của mật khẩu trước khi chúng được mã hóa hoặc băm?Bộ mã nào được lưu trữ trong/etc/passwd? Nó có thể là UTF-8 không? Giới hạn nào được đặt trên tên người dùng?
Rõ ràng, nếu tên người dùng và dữ liệu khác được giới hạn trong phạm vi 0x00..0x7F (và loại trừ 0x00), thì không có sự khác biệt giữa UTF-8, 8859-1 hoặc 8859-15; các ký tự hiện diện đều được mã hóa giống nhau.
Ngoài ra, tôi đang sử dụng /etc/passwd
làm chữ viết tắt cho dòng "cơ sở dữ liệu xác thực và xác thực người dùng (đôi khi được gọi là dịch vụ thư mục) trên máy dựa trên Unix, thường được truy cập qua PAM và đôi khi được lưu trữ trên máy hoàn toàn từ máy cục bộ, nhưng đôi khi vẫn thực sự là một tệp trên đĩa cứng cục bộ, thường được gọi là /etc/passwd
, thường được hỗ trợ bởi /etc/shadow
". Tôi cũng giả định rằng các câu hỏi tương đương về cơ sở dữ liệu nhóm (thường là tệp /etc/group
) có cùng một câu trả lời.
Bạn có thể cung cấp bằng chứng tài liệu (URL) cho sự khẳng định? Và điều gì sẽ xảy ra nếu các byte không phải ASCII được nhập vào tệp/etc/passwd? –
Cảm ơn bạn đã thêm thông tin. Giả sử bạn có một máy được truy cập bởi những người đến từ Hoa Kỳ (thiết bị đầu cuối ở 8859-1), Đức (8859-15) và Đài Loan (UTF-8). Bộ mã nào được lưu trữ ngay bây giờ? –
Nó vẫn là tất cả ASCII. Những gì bạn có thể nhập sẽ thay đổi theo ngôn ngữ của thiết bị đầu cuối. Nhưng đầu ra của hàm băm sẽ luôn là ASCII. Ví dụ, bạn có thể tạo một tệp chứa bất kỳ ký tự nào bạn thích và chạy md5 trên đó - và ký tự của tệp gốc không có gì liên quan đến ký tự của kết quả băm. (theo truyền thống, hash passwd được tạo ra bởi crypt, mặc dù không có md5) – nont