นักเรียนเพิ่งถามสิ่งที่อาจเป็นข้อเสียของการมีจุด ( .
) ในชื่อของผู้ใช้ ตัวอย่างเช่น:john.doe
สิ่งนี้จะส่งผลกระทบต่อระบบหรือแอพใด ๆ สำหรับเรื่องนั้นอย่างไร
นักเรียนเพิ่งถามสิ่งที่อาจเป็นข้อเสียของการมีจุด ( .
) ในชื่อของผู้ใช้ ตัวอย่างเช่น:john.doe
สิ่งนี้จะส่งผลกระทบต่อระบบหรือแอพใด ๆ สำหรับเรื่องนั้นอย่างไร
คำตอบ:
POSIX ระบุสิ่งนี้เกี่ยวกับชื่อผู้ใช้:
[... ] ในการพกพาข้ามระบบที่สอดคล้องกับมาตรฐาน IEEE Std 1003.1-2001 ค่าจะประกอบด้วยอักขระจากชุดอักขระชื่อไฟล์แบบพกพา ไม่ควรใช้ยัติภังค์เป็นอักขระตัวแรกของชื่อผู้ใช้แบบพกพา
... โดยที่ชุดอักขระชื่อไฟล์แบบพกพาคือ:
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 . _ -
นอกจากนี้manpage สำหรับ/etc/adduser.conf
ไฟล์ฯ :
VALID NAMES
adduser and addgroup enforce conformity to IEEE Std 1003.1-2001,
which allows only the following characters to appear in group
and user names: letters, digits, underscores, periods, at signs
(@) and dashes. The name may not start with a dash. The "$" sign
is allowed at the end of usernames (to conform to samba).
An additional check can be adjusted via the configuration
parameter NAME_REGEX to enforce a local policy.
ในขณะที่สเปคทั้งสองดูเหมือนจะรวมถึงจุด, Ubuntu (อย่างน้อย 13.04 ของฉัน) ดูเหมือนจะไม่อนุญาต:
⊳ sudo adduser as.df
adduser: Please enter a username matching the regular expression configured
via the NAME_REGEX[_SYSTEM] configuration variable. Use the `--force-badname'
option to relax this check or reconfigure NAME_REGEX.
ค่าเริ่มต้นNAME_REGEX
ใน Ubuntu คือ (จาก/etc/adduser.conf
manpage):
^[a-z][-a-z0-9]*$
_
, หรือ@
.
ในการสรุปจุด.
อาจจะใช้สำหรับชื่อผู้ใช้อูบุนตูที่เพียงแค่มีการเปลี่ยนแปลงได้ในNAME_REGEX
/etc/adduser.conf
เห็นว่ามันสอดคล้องกับ POSIX ไม่ควรมีปัญหาใด ๆ กับการมี.
ชื่อผู้ใช้ในโปรแกรมที่สอดคล้องกับ POSIX
รันคำสั่งนี้ในเทอร์มินัล:
sudo nano /etc/adduser.conf
ค้นหาบรรทัดนี้ (ใกล้ถึงจุดสิ้นสุดของไฟล์)
#NAME_REGEX="^[a-z][-a-z0-9]*$"
และแทนที่ด้วย
NAME_REGEX='^[a-z][-.a-z0-9]*$'
โปรดทราบว่า-
ต้องอยู่ตัวอักษรตัวแรกในการแสดงออกวงเล็บมิฉะนั้นจะถือว่าเป็นช่วงที่ระบุ[...]
a-z
กดCtrl+ XจากYนั้นEnterตามด้วย
อ้างอิง:
NAME_REGEX="^[a-z][-a-z0-9_.]*\$?$"
ใน/etc/adduser.conf
ได้
useradd
แทน: sudo useradd -m my.user
. นั่นคือสิ่งที่เราทำใน Userify และเป็นแพลตฟอร์มข้าม
แอปพลิเคชันที่อ่านชื่อผู้ใช้อาจใช้ regex ที่ถือว่าชื่อผู้ใช้ของคุณเป็นไปตามกฎและดังนั้นจึงไม่สามารถจัดการชื่อผู้ใช้ของคุณได้
Marc Haber อธิบายข้อเสียที่เป็นไปได้ในข้อบกพร่อง Debian # 604242 (อนุญาตให้ใช้จุดในชื่อผู้ใช้เป็นค่าเริ่มต้น):
การมีจุดในชื่อผู้ใช้สร้างปัญหากับ scipts ที่ใช้
chown
ซึ่งยังคงยอมรับจุดเป็นตัวคั่นระหว่างชื่อผู้ใช้และชื่อกลุ่ม หากchown
ยังคงยอมรับจุดจะมีสคริปต์ที่ใช้สัญลักษณ์นี้ซึ่งจะแตกถ้าชื่อผู้ใช้มีจุดฉันขอแนะนำให้รักษาค่าเริ่มต้นปัจจุบัน (ซึ่งสามารถเขียนทับโดยการกำหนดค่าท้องถิ่น) จนกว่าจะ
chown
หยุดการยอมรับจุดเป็นตัวคั่น
และchown
ยังคงยอมรับจุดเป็นตัวคั่นแม้ว่าจะไม่ได้รับการบันทึกอีกต่อไป ฉันยอมรับความเข้ากันได้ของ POSIX และฉันใช้ชื่อผู้ใช้ที่มีจุดในหลาย ๆ ระบบโดยไม่มีผลกระทบใด ๆ