ฉันควรใช้อักขระใดในชื่อผู้ใช้บน Linux


39

ฉันต้องการสร้างบัญชีผู้ใช้ที่ตั้งชื่อตามชื่อโดเมน ผู้ใช้บ่นว่าชื่อผู้ใช้จะต้องตรงกับการNAME_REGEXแสดงออกปกติ

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.

ฉันสามารถเพิ่มผู้ใช้โดยใช้ useradd โดยไม่มีการร้องเรียน มีเหตุผลที่ฉันไม่ควรปรับเปลี่ยนการแสดงออกปกติเพื่อให้., -และ_?

อักขระใดบ้างที่จะทำให้เกิดปัญหาและไม่ควรอนุญาตในชื่อผู้ใช้

NAME_REGEXนี้จะเริ่มต้น

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

1
โปรดทราบว่าNAME_REGEXยอมรับแล้ว-ตราบใดที่ไม่ใช่อักขระตัวแรก
แหวนØ

ทำไมไม่เพิ่ม.? พิจารณาผู้ใช้ที่ชื่อหรือ. ..จากนั้นrmชื่อผู้ใช้..นั้น
Jon

1
@ จอนนั่นไม่ใช่ปัญหาเนื่องจากrmไม่ใช่คำสั่งที่ใช้เมื่อลบผู้ใช้ ฉันเห็นด้วย..ไม่ใช่ชื่อที่สมเหตุสมผลด้วยเหตุผลที่คล้ายกัน แต่rmไม่ใช่หนึ่งในนั้น
toon81

คำตอบ:


26

คำแนะนำของฉันสำหรับคุณคือการปฏิบัติตามมาตรฐานที่แนะนำโดยค่าเริ่มต้น NAME_REGEX คุณสามารถใส่เกือบทุกอย่างในชื่อผู้ใช้ภายใต้ * NIX แต่คุณอาจพบปัญหาแปลก ๆ กับรหัสห้องสมุดที่ทำให้สมมติฐาน กรณีในจุด:

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

คำถามของฉันกับคุณ: คุณมีชื่อโดเมนจำนวนมากที่จะชนกันถ้าคุณใช้เครื่องหมายวรรคตอนผิดปกติหรือไม่? ตัวอย่างเช่นคุณมีทั้งชื่อ "QUALITY-ASSURANCE" และ QUALITYASSURANCE "หรือไม่ถ้าไม่คุณสามารถใช้นโยบายในการแยกอักขระผิดปกติและใช้สิ่งที่เหลือเป็นชื่อผู้ใช้

นอกจากนี้คุณสามารถใช้ส่วน "ชื่อจริง" ของฟิลด์ GECOSในข้อมูล / etc / passwd เพื่อจัดเก็บชื่อ domaain ดั้งเดิมที่ไม่ได้แก้ไขและสคริปต์สามารถแตกไฟล์ได้ง่าย


มันเป็นส่วนหนึ่งของข้อผิดพลาดแบบสุ่มที่ฉันกังวล ฉันสามารถลบจุดได้อย่างง่ายดายและยังไม่มีโอกาสปะทะกันของชื่อ แต่ - อาจทำให้เกิดปัญหาได้ แต่ถึงกระนั้นก็ไม่น่าจะสวย
Ed Haber

ดังนั้นระบบเดเบียนที่ฉันใช้คือการใช้ผู้ใช้ www-data ดังนั้นจึงดูเหมือนว่า - ควรจะใช้ในชื่อผู้ใช้
Ed Haber

ที่จริงแล้วนิพจน์ปกตินั้นอนุญาตให้ '-' ในชื่อผู้ใช้! ตัวอักษรตัวแรกต้องเป็น az แต่ตัวอักษรที่ตามมาของชื่อผู้ใช้สามารถเป็น '-', az หรือ 0-9
steveha

Ohh! คุณถูก. ฉันคิดถึงสิ่งที่เกินไป - ตอนที่ฉันมองมัน
Ed Haber

22

โดยเฉพาะอย่างยิ่งสถานะPOSIX ("ส่วนต่อประสานระบบปฏิบัติการพกพาสำหรับ Unix") (มาตรฐาน IEEE 1003.1 2008) :


3.431 ชื่อผู้ใช้

สตริงที่ใช้เพื่อระบุผู้ใช้ ดูฐานข้อมูลผู้ใช้ ในการพกพาข้ามระบบที่สอดคล้องกับ POSIX.1-2008 ค่าจะประกอบด้วยอักขระจากชุดอักขระชื่อไฟล์แบบพกพา <hyphen>ตัวละครที่ไม่ควรนำมาใช้เป็นตัวอักษรตัวแรกของชื่อผู้ใช้พกพา


3.278 ชุดตัวอักษรชื่อไฟล์พกพา

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 . _ -

ชื่อผู้ใช้ใด ๆ ที่เป็นไปตามมาตรฐานนี้เป็นไปตาม POSIX และควรจะปลอดภัย


6
แม้ว่านี่จะเป็นความจริง แต่โดยทั่วไปแล้วขมวดคิ้วที่จะมีตัวอักษรตัวพิมพ์ใหญ่ในชื่อผู้ใช้ - คนมีปัญหาในการใช้รหัสผ่านที่เป็นตัวพิมพ์ใหญ่และตัวพิมพ์ใหญ่ (ข้อยกเว้น: เมื่อแบบแผนชื่อผู้ใช้ของคุณคือALL UPPERCASE CHARACTERS)
voretaq7

1
ในฐานะของ POSIX.1-2017 คำจำกัดความเหล่านั้นได้ย้ายไปเล็กน้อย 3.431 ชื่อผู้ใช้งานอยู่ในขณะนี้3.437 ชื่อผู้ใช้งานและพกพา 3.278 ชื่อไฟล์ที่กำหนดตัวอักษรในขณะนี้คือ3.282 พกพาชื่อไฟล์ตัวอักษรชุด
ชัค Wolber

@ voretaq7 สิ่งที่ฉันคิดว่าเป็นเรื่องถูกต้องคือการรักษาชื่อไว้ในชื่อผู้ใช้ แต่สร้างชื่อให้เล็กและใหญ่ ดังนั้นชื่อผู้ใช้อาจเป็น CatInTheHat แต่ลงชื่อเข้าใช้เพื่อระบุ catinthehat หรือ catintheHAT หรืออะไรก็ตาม
StackOverflowUser

1

จาก NAME_REGEX สามารถอนุมานได้ว่าทุกอย่างยกเว้น a ถึง z ในตัวบนและตัวพิมพ์เล็กและหมายเลข 0 ถึง 9 จะไม่ดี


คำที่คุณต้องการคือ "อนุมาน"
wfaulk

ดู regex อีกครั้ง-ได้รับการยอมรับด้วย (ไม่ใช่ตัวอักษรตัวแรก) นอกจากนี้โปรดทราบว่าโดยค่าเริ่มต้นจะไม่ได้รับการยอมรับ (ไม่มีgธงและไม่A-Zรวมอยู่ในNAME_REGEX regex ที่ให้บริการโดย OPNAME_REGEX="^[a-z][-a-z0-9]*\$"
SherylHohman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.