Câu trả lời:
POSIX chỉ định việc sử dụng một bộ ký tự di động cho tên người dùng và nhóm.
_ - .
được cho phép các ký tự, NAME_REGEX
kiểm tra nếu tên người dùng chỉ chứa các ký tự được chỉ định. Các nhà phát triển phân phối xác định, nếu các ký tự tiếp theo bị từ chối. Ubuntu, ví dụ, cấm sử dụng .
theo mặc định.
Thêm hạn chế này sẽ tránh nhiễu với các công cụ hệ thống khác, có thể diễn giải các ký tự đặc biệt. Hãy nghĩ về biến $PATH
, khi bạn có một người dùng có tên my:user
và thêm thư mục chính của bạn vào $PATH
:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
/home/my:user/bin
Các thư mục /home/my
và user/bin
sẽ (có thể) không tồn tại. Hơn nữa, /etc/passwd
sẽ có hai :
nhiều hơn cần thiết.
Chỉnh sửa:
Debian adduser
(phiên bản 3.110) sử dụng /^[_.A-Za-z0-9][-\@_.A-Za-z0-9]*\$?$/
để kiểm tra tên người dùng, _
được cho phép miễn là NAME_REGEX
không cấm nó.
_
được cho phép theo mặc định, xem chỉnh sửa. Tôi đã đưa ra một ví dụ về nhân vật bị cấm :
để chỉ ra những vấn đề có thể xảy ra với nó.
Một câu hỏi tương tự đã được trả lời ở đây
Về mặt lý thuyết, bạn có thể sử dụng hầu hết mọi ký tự ASCII mà bạn muốn làm tên người dùng, nhưng, để tránh một số loại lỗi, như một lỗi được đề cập trong bài viết trên, bạn có thể đặt biểu thức chính quy đó để tránh một số vấn đề nhất định.
:
, một dòng mới hoặc ký tự null trong tên người dùng ngay cả khi bạn chỉnh sửa /etc/passwd
(hoặc hầu hết các cơ sở dữ liệu người dùng khác) bằng tay.
Tôi đang sử dụng Debian Squeeze và tôi đã quản lý để tạo một người dùng có dấu gạch dưới , adduser user_1
. Tại sao bạn nói họ không được phép?
NAME_REGEX
là regex tên được phép , không phải là regex tên không được phép ... tức là nếu một tên trùng khớp NAME_REGEX
thì nó hợp lệ.
NAME_REGEX
trong /etc/adduser.conf
, và được xây dựng trong cấm mặc định _
.
_
không phải là:
...