ข้อเสียของการมีจุดในชื่อผู้ใช้คืออะไร?


27

นักเรียนเพิ่งถามสิ่งที่อาจเป็นข้อเสียของการมีจุด ( .) ในชื่อของผู้ใช้ ตัวอย่างเช่น:john.doe

สิ่งนี้จะส่งผลกระทบต่อระบบหรือแอพใด ๆ สำหรับเรื่องนั้นอย่างไร

คำตอบ:


38

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ไฟล์ไอคอน Manpageฯ :

   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.confmanpage):

^[a-z][-a-z0-9]*$
  • เริ่มต้นด้วยตัวอักษรตัวเล็กจากนั้นขีดกลางจำนวนใด ๆ ตัวอักษรตัวเล็กหรือตัวเลข ไม่มี_, หรือ@.

ดังนั้น,

ในการสรุปจุด.อาจจะใช้สำหรับชื่อผู้ใช้อูบุนตูที่เพียงแค่มีการเปลี่ยนแปลงได้ในNAME_REGEX /etc/adduser.confเห็นว่ามันสอดคล้องกับ POSIX ไม่ควรมีปัญหาใด ๆ กับการมี.ชื่อผู้ใช้ในโปรแกรมที่สอดคล้องกับ POSIX

เพื่อเปิดใช้งานจุดในชื่อผู้ใช้

  1. รันคำสั่งนี้ในเทอร์มินัล:

    sudo nano /etc/adduser.conf
    
  2. ค้นหาบรรทัดนี้ (ใกล้ถึงจุดสิ้นสุดของไฟล์)

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

    และแทนที่ด้วย

    NAME_REGEX='^[a-z][-.a-z0-9]*$'
    

    โปรดทราบว่า-ต้องอยู่ตัวอักษรตัวแรกในการแสดงออกวงเล็บมิฉะนั้นจะถือว่าเป็นช่วงที่ระบุ[...]a-z

  3. กดCtrl+ XจากYนั้นEnterตามด้วย


อ้างอิง:


@ vasa1 ขอบคุณสำหรับการชี้ว่าแก้ไขแล้ว
kiri

2
สวัสดี minerz029 ก่อนที่จะยอมรับคำตอบซึ่งเท่าที่ฉันเห็นมันยอดเยี่ยมอย่างไม่ต้องสงสัยคุณช่วยกรุณาให้เหตุผลว่าทำไม Ubuntu จึงตัดสินใจ
Luis Alvarado

2
@LuisAlvarado: เป็นไปได้ว่ามันเข้ากันได้กับโปรแกรม [ไม่ใช่ POSIX] ซึ่งคาดว่าชื่อผู้ใช้โดยใช้ชุดอักขระที่ จำกัด มากขึ้น อักขระที่ Ubuntu อนุญาตตามค่าเริ่มต้นนั้นรับประกันได้ว่าเกือบจะสามารถทำงานได้ในเกือบทุกโปรแกรม manuser ของ adduser จะอธิบายค่าเริ่มต้นของ regex ว่าเป็น "อนุรักษ์นิยมมากที่สุด" ซึ่งอยู่ด้านความปลอดภัยของชื่อผู้ใช้
kiri

1
นี้ไม่ได้ทำงานสำหรับฉัน แต่เพิ่มNAME_REGEX="^[a-z][-a-z0-9_.]*\$?$"ใน/etc/adduser.confได้
มาริโอ

1
อย่าเปลี่ยน regex เพียงโทรuseraddแทน: sudo useradd -m my.user. นั่นคือสิ่งที่เราทำใน Userify และเป็นแพลตฟอร์มข้าม
Jamieson Becker

3

แอปพลิเคชันที่อ่านชื่อผู้ใช้อาจใช้ regex ที่ถือว่าชื่อผู้ใช้ของคุณเป็นไปตามกฎและดังนั้นจึงไม่สามารถจัดการชื่อผู้ใช้ของคุณได้


แต่พอ ๆ กันพวกเขาอาจตั้งสมมติฐานที่ชนกับข้อสมมติที่เกิดจาก distro ใช่มั้ย
0xC0000022L

3

Marc Haber อธิบายข้อเสียที่เป็นไปได้ในข้อบกพร่อง Debian # 604242 (อนุญาตให้ใช้จุดในชื่อผู้ใช้เป็นค่าเริ่มต้น):

การมีจุดในชื่อผู้ใช้สร้างปัญหากับ scipts ที่ใช้ chownซึ่งยังคงยอมรับจุดเป็นตัวคั่นระหว่างชื่อผู้ใช้และชื่อกลุ่ม หากchownยังคงยอมรับจุดจะมีสคริปต์ที่ใช้สัญลักษณ์นี้ซึ่งจะแตกถ้าชื่อผู้ใช้มีจุด

ฉันขอแนะนำให้รักษาค่าเริ่มต้นปัจจุบัน (ซึ่งสามารถเขียนทับโดยการกำหนดค่าท้องถิ่น) จนกว่าจะchownหยุดการยอมรับจุดเป็นตัวคั่น

และchownยังคงยอมรับจุดเป็นตัวคั่นแม้ว่าจะไม่ได้รับการบันทึกอีกต่อไป ฉันยอมรับความเข้ากันได้ของ POSIX และฉันใช้ชื่อผู้ใช้ที่มีจุดในหลาย ๆ ระบบโดยไม่มีผลกระทบใด ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.