2009-09-11 20 views
7

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.

Trả lời

4

Đó là tất cả ASCII. Nhưng bản thân mật khẩu không bao giờ được lưu trữ - chỉ các kết quả của băm một chiều. Nếu bạn đang tự hỏi những gì các nhân vật có thể được trong mật khẩu chính nó, nó phụ thuộc vào miền địa phương, mà sẽ hạn chế các ký tự thiết bị đầu cuối của bạn có thể đối phó với. Xem "người đàn ông địa phương"

From the BSD man page:

"/ etc/passwd tập tin mật khẩu ASCII ..."

Đối với tên người dùng, tôi có thể nói với bạn rằng Solaris chỉ hỗ trợ ASCII. Tôi không thể nói cho Unix-en khác.

"Không phải mọi đối tượng trong Solaris 2 và Solaris 7can đã tên gồm ký tự tùy ý. The names of the following objects must be composed of ASCII characters:

* User names, group name, and passwords 
* System name ... 

"

+0

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? –

+1

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ờ? –

+0

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

Các vấn đề liên quan