Những ký tự nào tôi nên sử dụng hoặc không sử dụng trong tên người dùng trên Linux?


39

Tôi muốn tạo tài khoản người dùng được đặt tên theo một tên miền. adduser phàn nàn rằng tên người dùng cần khớp với NAME_REGEXbiểu thức thông thường.

adduser: Please enter a username matching the regular expression configured
via the NAME_REGEX configuration variable.  Use the `--force-badname'
option to relax this check or reconfigure NAME_REGEX.

Tôi có thể thêm người dùng bằng useradd mà không cần phàn nàn. Có một lý do mà tôi không nên sửa đổi biểu thức chính quy để cho phép ., -_?

Những ký tự nào sẽ gây ra vấn đề và không được phép trong tên người dùng?

Đây là mặc định NAME_REGEX.

NAME_REGEX="^[a-z][-a-z0-9]*\$"

1
Lưu ý rằng NAME_REGEXđã chấp nhận -miễn là nó không phải là ký tự đầu tiên.
Đổ chuông Ø

Tại sao không thêm .? Hãy xem xét một người dùng có tên .hoặc ... Sau đó, rmngười dùng đó có tên ...
Jon

1
@Jon đó không phải là vấn đề vì rmkhông phải là lệnh để sử dụng khi xóa người dùng. Tôi đồng ý ..không phải là một cái tên hợp lý vì những lý do tương tự, nhưng rmkhông phải là một trong số đó.
toon81

Câu trả lời:


26

Lời khuyên của tôi cho bạn là tuân theo tiêu chuẩn được đề xuất bởi NAME_REGEX mặc định. Bạn thực sự có thể đặt gần như mọi thứ trong tên người dùng trong * NIX nhưng bạn có thể gặp phải các vấn đề kỳ lạ với mã thư viện tạo ra các giả định. Trường hợp tại điểm:

http://blog.endpoint.com/2008/08/on-valid-unix-usernames-and-ones-sanity.html

Câu hỏi của tôi cho bạn: bạn có rất nhiều tên miền sẽ va chạm với nhau nếu bạn loại bỏ các dấu câu bất thường? Ví dụ: bạn có cả "ĐẢM BẢO CHẤT LƯỢNG" và CHẤT LƯỢNG "làm tên miền không? Nếu không, bạn có thể chỉ cần áp dụng chính sách loại bỏ các ký tự bất thường và sử dụng tên còn lại làm tên người dùng.

Ngoài ra, bạn có thể sử dụng phần "tên thật" của trường GECOS trong thông tin / etc / passwd để lưu trữ tên domaain gốc, chưa sửa đổi và các tập lệnh có thể trích xuất nó khá dễ dàng.


Đây là phần lỗi bất ngờ ngẫu nhiên mà tôi lo lắng. Tôi có thể dễ dàng loại bỏ các giai đoạn và vẫn không có cơ hội đụng độ tên, nhưng - có thể gây ra vấn đề. Tuy nhiên, điều đó là không thể.
Ed Haber

Vì vậy, hệ thống debian tôi đang sử dụng đang sử dụng dữ liệu www của người dùng. Vì vậy, nó trông giống như - nên được sử dụng trong tên người dùng.
Ed Haber

Trên thực tế, biểu thức chính quy đó cho phép '-' trong tên người dùng! Chữ cái đầu tiên cần phải là az, nhưng các chữ cái tiếp theo của tên người dùng có thể là '-', az hoặc 0-9.
steveha

Ồ! bạn đúng. Tôi đã bỏ lỡ thêm - khi tôi đang nhìn vào nó.
Ed Haber

22

Cụ thể hơn, tiêu chuẩn POSIX ("Giao diện hệ điều hành di động cho Unix") (Tiêu chuẩn IEEE 1003.1 2008) nêu rõ :


3.431 Tên người dùng

Một chuỗi được sử dụng để xác định người dùng; xem thêm Cơ sở dữ liệu người dùng. Để có thể di động trên các hệ thống tuân theo POSIX.1-2008, giá trị này bao gồm các ký tự từ bộ ký tự tên tệp di động. Không <hyphen>nên sử dụng ký tự này làm ký tự đầu tiên của tên người dùng di động.


3.278 Bộ ký tự tên tệp di động

The set of characters from which portable filenames are constructed.

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 . _ -

Bất kỳ tên người dùng nào tuân thủ tiêu chuẩn này đều tuân thủ POSIX và phải an toàn.


6
Mặc dù đây là sự thật, nhưng nhìn chung, người ta thường cau mày khi có các ký tự chữ hoa trong tên người dùng - mọi người có đủ rắc rối với mật khẩu phân biệt chữ hoa chữ thường và khiến họ phải nhớ trường hợp trong tên người dùng của họ chỉ là đá họ khi họ xuống. (Ngoại lệ: Khi quy ước tên người dùng của bạn là ALL UPPERCASE CHARACTERS.)
voretaq7

1
Kể từ POSIX.1-2017, những định nghĩa đó đã thay đổi một chút. 3.431 Tên người dùng hiện là 3.437 Tên người dùng3.278 Bộ ký tự tên tệp di động
Chuck Wolber

@ voretaq7 Điều tôi nghĩ là hợp pháp là giữ nguyên trường hợp trong tên người dùng, nhưng hãy đăng nhập không phân biệt chữ hoa chữ thường. Vì vậy, tên người dùng có thể là CatInTheHat nhưng đăng nhập chỉ định catinthehat hoặc catintheHAT hoặc bất cứ điều gì.
StackOverflowUser

1

Từ NAME_REGEX có thể được suy ra rằng tất cả mọi thứ trừ a qua z ở chữ hoa và chữ thường và số 0 đến 9 sẽ xấu.


Từ bạn đang tìm kiếm là "suy diễn".
wfaulk

nhìn vào biểu thức một lần nữa, -cũng được chấp nhận (không phải là ký tự đầu tiên.) Cũng lưu ý rằng theo mặc định chữ hoa không được chấp nhận (không có gcờ, cũng không được A-Zbao gồm trong biểu thức NAME_REGEX do OP cung cấpNAME_REGEX="^[a-z][-a-z0-9]*\$"
SherylHohman
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.