Apa kerugian memiliki titik dalam nama pengguna?

27

Seorang siswa hanya bertanya apa yang bisa menjadi kelemahan memiliki titik ( .) atas nama pengguna. Sebagai contoh:john.doe

Bagaimana ini akan mempengaruhi sistem atau aplikasi apa pun dalam hal ini?

Luis Alvarado
sumber

Jawaban:

38

POSIX menyatakan ini tentang nama pengguna:

[...] Untuk menjadi portabel di seluruh sistem yang sesuai dengan IEEE Std 1003.1-2001, nilainya terdiri dari karakter dari set karakter nama file portabel. Tanda hubung tidak boleh digunakan sebagai karakter pertama dari nama pengguna portabel.

... di mana set karakter nama file portabel adalah:

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

Juga, halaman manual untuk /etc/adduser.conffileIkon halaman manual menyatakan:

   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.

Namun,

Sementara kedua spesifikasi tampaknya termasuk titik, Ubuntu (setidaknya pada 13,04 saya) tampaknya tidak mengizinkannya:

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

Default NAME_REGEXdi Ubuntu adalah (dari /etc/adduser.confmanual):

^[a-z][-a-z0-9]*$
  • Dimulai dengan huruf kecil kemudian sejumlah tanda hubung, huruf kecil atau digit. Tidak _, @atau ..

Begitu,

Kesimpulannya, sebuah titik .dapat digunakan untuk nama pengguna Ubuntu, yang NAME_REGEXharus diubah adalah /etc/adduser.conf. Karena sesuai dengan POSIX, seharusnya tidak ada masalah dengan memiliki .nama pengguna di dalam dengan program yang sesuai dengan POSIX.

Untuk mengaktifkan titik di nama pengguna

  1. Jalankan perintah ini di terminal:

    sudo nano /etc/adduser.conf
    
  2. Temukan baris ini (dekat akhir file)

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

    dan ganti dengan

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

    Perhatikan bahwa -harus tetap menjadi karakter pertama dalam ekspresi braket [...], jika tidak maka akan dianggap sebagai menentukan rentang a-z.

  3. Tekan Ctrl+ X, lalu Y, lalu Enter.


Referensi:

kiri
sumber
@ vasa1 Terima kasih telah menunjukkannya, diperbaiki.
kiri
2
Hai minerz029, sebelum menerima jawaban yang sejauh yang saya bisa lihat, ini adalah jawaban yang sangat bagus, bisakah Anda memberikan alasan mengapa Ubuntu akan membuat keputusan ini.
Luis Alvarado
2
@LuisAlvarado: Mungkin saja untuk kompatibilitas dengan program [non POSIX] yang mengharapkan nama pengguna menggunakan rangkaian karakter yang lebih terbatas. Karakter Ubuntu memungkinkan secara default hampir dijamin untuk bekerja di hampir semua program. Halaman adduser menggambarkan regex default sebagai "paling konservatif", berada di sisi yang lebih aman dari nama pengguna.
kiri
1
Ini tidak berhasil untuk saya, tetapi menambahkan NAME_REGEX="^[a-z][-a-z0-9_.]*\$?$"masuk /etc/adduser.conf.
Mario
1
Jangan mengubah regex. Panggil saja useraddsebagai gantinya: sudo useradd -m my.user. Itu yang kami lakukan di Userify dan juga lintas platform.
Jamieson Becker
3

Aplikasi yang bertuliskan nama pengguna mungkin menggunakan regex yang mengasumsikan nama pengguna Anda mengikuti aturan dan karenanya tidak dapat menangani nama pengguna Anda.

Jo-Erlend Schinstad
sumber
Tetapi sama-sama mereka kemudian dapat membuat asumsi yang bertabrakan dengan asumsi yang dibuat oleh distro, kan?
0xC0000022L
3

Marc Haber menjelaskan kemungkinan penurunan dalam bug Debian # 604242 (Izinkan titik dalam nama pengguna secara default):

Memiliki titik-titik dalam nama pengguna menciptakan beberapa masalah dengan skrip menggunakan chown, yang masih menerima titik-titik sebagai pemisah antara nama pengguna dan nama grup. Jika chownmasih menerima titik, akan ada skrip yang menggunakan notasi ini, yang akan pecah jika nama pengguna berisi titik.

Saya akan merekomendasikan menjaga default saat ini (yang dapat ditimpa oleh konfigurasi lokal) sampai chownberhenti menerima titik sebagai pemisah.

Dan chownmasih menerima titik sebagai pemisah, meskipun tidak didokumentasikan lagi. Saya setuju kompatibilitas POSIX harus menang, dan saya memang menggunakan nama pengguna yang mengandung titik pada beberapa sistem tanpa efek buruk.

Ferenc Wágner
sumber