Karakter apa yang harus saya gunakan atau tidak gunakan dalam nama pengguna di Linux?

39

Saya ingin membuat akun pengguna dengan nama domain. adduser mengeluh bahwa nama pengguna harus cocok dengan NAME_REGEXekspresi reguler.

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.

Saya dapat menambahkan pengguna menggunakan useradd tanpa keluhan. Apakah ada alasan mengapa saya tidak boleh mengubah ekspresi reguler untuk mengizinkan ., -dan _?

Karakter apa yang akan menyebabkan masalah dan tidak boleh diizinkan dalam nama pengguna?

Ini standarnya NAME_REGEX.

NAME_REGEX="^[a-z][-a-z0-9]*\$"
Ed Haber
sumber
1
Perhatikan bahwa NAME_REGEXsudah menerima -selama itu bukan karakter pertama.
Dering Ø
Kenapa tidak menambahkan .? Pertimbangkan pengguna bernama .atau ... Kemudian, rmpengguna itu bernama ...
Jon
1
@ Jon Itu bukan masalah karena rmbukan perintah untuk digunakan ketika menghapus pengguna. Saya setuju ..bukan nama yang masuk akal untuk alasan yang sama, tetapi rmbukan salah satu dari itu.
toon81

Jawaban:

26

Saran saya kepada Anda adalah mengikuti standar yang direkomendasikan oleh NAME_REGEX default. Anda benar-benar dapat memasukkan hampir segala sesuatu dalam nama pengguna di bawah * NIX tetapi Anda mungkin mengalami masalah aneh dengan kode perpustakaan yang membuat asumsi. Inti masalah:

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

Pertanyaan saya kepada Anda: apakah Anda memiliki banyak nama domain yang akan saling bertabrakan jika Anda menghapus tanda baca yang tidak biasa? Misalnya, apakah Anda memiliki "QUALITY-ASSURANCE" dan QUALITYASSURANCE "sebagai nama domain? Jika tidak, Anda cukup mengadopsi kebijakan menghapus karakter yang tidak biasa dan menggunakan yang tersisa sebagai nama pengguna.

Juga, Anda dapat menggunakan bagian "nama asli" dari bidang GECOS di informasi / etc / passwd untuk menyimpan nama domaain asli yang tidak dimodifikasi, dan skrip dapat mengekstraknya dengan mudah.

steveha
sumber
Ini adalah bagian bug acak tak terduga yang saya khawatirkan. Saya dapat dengan mudah menghapus periode dan masih tidak memiliki kemungkinan bentrokan nama, tetapi - dapat menyebabkan masalah. Tetap saja sangat tidak mungkin.
Ed Haber
Jadi sistem debian yang saya gunakan menggunakan data pengguna www. Jadi sepertinya - harus ok untuk digunakan dalam nama pengguna.
Ed Haber
Sebenarnya, ekspresi reguler itu mengizinkan '-' dalam nama pengguna! Huruf pertama harus az, tetapi huruf berikutnya dari nama pengguna bisa '-', az, atau 0-9.
steveha
Ohh! kamu benar. Saya melewatkan ekstra - ketika saya melihatnya.
Ed Haber
22

Lebih khusus lagi, standar POSIX ("Portable Operating System Interface for Unix") (Standar IEEE 1003.1 2008) menyatakan :


3.431 Nama Pengguna

String yang digunakan untuk mengidentifikasi pengguna; lihat juga Basis Data Pengguna. Untuk menjadi portabel di seluruh sistem yang sesuai dengan POSIX.1-2008, nilainya terdiri dari karakter dari set karakter nama file portabel. The <hyphen>karakter sebaiknya tidak digunakan sebagai karakter pertama dari nama pengguna portabel.


3.278 Set Karakter Nama File Portabel

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

Setiap nama pengguna yang memenuhi standar ini adalah POSIX-compliant, dan harus aman.

HopelessN00b
sumber
6
Meskipun ini benar, umumnya tidak disukai karena memiliki karakter huruf besar di nama pengguna - orang memiliki cukup banyak masalah dengan kata sandi yang peka terhadap huruf besar-kecil, dan membuat mereka harus mengingat huruf besar-kecil di nama pengguna mereka hanya menendang mereka ketika sedang turun. (Pengecualian: Saat konvensi nama pengguna Anda ALL UPPERCASE CHARACTERS.)
voretaq7
1
Pada POSIX.1-2017, definisi tersebut telah bergerak sedikit. 3.431 Nama Pengguna sekarang 3.437 Nama Pengguna dan 3.278 Portable Filename Character Set sekarang 3.282 Portable Filename Character Set
Chuck Wolber
@ voretaq7 Apa yang saya anggap sah adalah untuk menjaga case dalam nama pengguna, tetapi membuat sign-in case-insensitive. Jadi nama pengguna bisa berupa CatInTheHat tetapi masuk dengan menentukan catinthehat atau catintheHAT atau apa pun.
StackOverflowUser
1

Dari NAME_REGEX dapat disimpulkan bahwa semuanya kecuali z melalui huruf besar dan kecil dan angka 0 hingga 9 akan buruk.

wzzrd
sumber
Kata yang Anda cari "disimpulkan".
wfaulk
lihat regex lagi, -juga diterima (tidak hanya sebagai karakter pertama.) Juga perhatikan bahwa huruf besar default tidak diterima (tidak ada gbendera, juga tidak A-Ztermasuk dalam NAME_REGEX regex yang disediakan oleh OP.NAME_REGEX="^[a-z][-a-z0-9]*\$"
SherylHohman