Quels caractères dois-je utiliser ou ne pas utiliser dans les noms d'utilisateur sous Linux?

39

Je veux créer des comptes d'utilisateurs nommés d'après un nom de domaine. adduser se plaint que les noms d'utilisateur doivent correspondre à l' NAME_REGEXexpression régulière.

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.

Je peux ajouter les utilisateurs utilisant useradd sans se plaindre. Y a-t-il une raison pour laquelle je ne devrais pas modifier l'expression régulière afin de permettre ., -et _?

Quels personnages vont causer des problèmes et ne devraient pas être autorisés dans les noms d'utilisateurs?

C'est la valeur par défaut NAME_REGEX.

NAME_REGEX="^[a-z][-a-z0-9]*\$"
Ed Haber
la source
1
Notez que NAME_REGEXaccepte déjà -tant que ce n'est pas le premier caractère.
Bague Ø
Pourquoi ne pas ajouter .? Considérons un utilisateur nommé .ou ... Ensuite, rmcet utilisateur nommé ...
Jon
1
@Jon ce n'est pas un problème car ce rmn'est pas la commande à utiliser lors de la suppression d'un utilisateur. Je conviens que ce ..n'est pas un nom raisonnable pour des raisons similaires, mais rmn'en fait pas partie.
toon81

Réponses:

26

Je vous conseille de suivre la norme recommandée par défaut par NAME_REGEX. Vous pouvez réellement mettre presque n'importe quoi dans un nom d'utilisateur sous * NIX, mais vous pouvez rencontrer des problèmes étranges avec le code de bibliothèque qui pose des hypothèses. Exemple:

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

Ma question est la suivante: avez-vous beaucoup de noms de domaine qui se heurteraient si vous supprimiez la ponctuation inhabituelle? Par exemple, avez-vous les noms de domaine "QUALITY-ASSURANCE" et QUALITYASSURANCE "? Dans le cas contraire, vous pouvez simplement adopter une politique consistant à supprimer les caractères inhabituels et à utiliser ce qui reste en tant que nom d'utilisateur.

Vous pouvez également utiliser la section "nom réel" du champ GECOS dans les informations / etc / passwd pour stocker le nom domaain d'origine non modifié et les scripts peuvent l'extraire assez facilement.

steveha
la source
Je m'inquiète de la présence de bogues aléatoires inattendus. Je peux assez facilement supprimer les points et je n'ai toujours aucune chance de rencontrer des noms, mais cela pourrait causer un problème. C'est quand même assez improbable.
Ed Haber
Donc, le système Debian que j'utilise utilise un utilisateur www-data. Donc, il semble que - devrait être ok pour être utilisé dans les noms d'utilisateur.
Ed Haber
En fait, cette expression rationnelle autorise "-" dans les noms d'utilisateur! La première lettre doit être az, mais les lettres suivantes des noms d'utilisateur peuvent être '-', az ou 0-9.
steveha
Ohh! tu as raison. J'ai manqué le supplément - quand je le regardais.
Ed Haber
22

Plus spécifiquement, la norme POSIX ("Interface de système d'exploitation portable pour Unix") (norme IEEE 1003.1 2008) stipule :


3.431 Nom d'utilisateur

Une chaîne utilisée pour identifier un utilisateur. voir aussi base de données d'utilisateurs. Pour être portable sur des systèmes conformes à POSIX.1-2008, la valeur est composée de caractères du jeu de caractères portable filename. Le <hyphen>caractère ne doit pas être utilisé comme premier caractère d'un nom d'utilisateur portable.


3.278 Jeu de caractères de nom de fichier portable

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

Tout nom d'utilisateur conforme à cette norme est conforme à POSIX et doit être sûr.

HopelessN00b
la source
6
Bien que cela soit vrai, il est généralement désapprouvé d'avoir des caractères majuscules dans les noms d'utilisateur - les gens ont assez de problèmes avec les mots de passe sensibles à la casse, et les obliger à se souvenir que les cas dans leurs noms d'utilisateur leur donnent du fil à retordre lorsqu'ils sont perdus. (Exception: lorsque votre convention de nom d'utilisateur est la même ALL UPPERCASE CHARACTERS.)
voretaq7
1
A partir de POSIX.1-2017, ces définitions ont un peu bougé. 3,431 nom d'utilisateur est maintenant 3,437 nom d'utilisateur et 3.278 jeu de caractères portable du nom de fichier est maintenant 3.282 jeu de caractères portable du nom de fichier
Chuck Wolber
@ voretaq7 Ce que je pense être légitime est de préserver la casse dans un nom d'utilisateur, mais de rendre les inscriptions insensibles à la casse. Donc, un nom d'utilisateur pourrait être CatInTheHat mais connectez-vous en spécifiant catinthehat ou catintheHAT ou autre.
StackOverflowUser le
1

On peut déduire de NAME_REGEX que tout, sauf un à z en majuscules et minuscules et le nombre compris entre 0 et 9, serait mauvais.

wzzrd
la source
Le mot que vous recherchez est "déduit".
wfaulk
Regardez à nouveau l'expression régulière, -est également accepté (mais pas en tant que premier caractère.) Notez également que, par défaut, les majuscules ne sont pas acceptées (il n'y a pas d' gindicateur, ni A-Zinclus dans l' NAME_REGEX expression régulière fournie par l'OP.NAME_REGEX="^[a-z][-a-z0-9]*\$"
SherylHohman