Solution 1 :
Plus précisément, la norme POSIX ("Portable Operating System Interface for Unix") (IEEE Standard 1003.1 2008) stipule :
3.437 Nom d'utilisateur
Chaîne utilisée pour identifier un utilisateur ; voir aussi Base de données utilisateur. Pour être portable sur tous les systèmes conformes à POSIX.1-2017, la valeur est composée de caractères du jeu de caractères du nom de fichier portable. Le
<hyphen-minus>
ne doit pas être utilisé comme premier caractère d'un nom d'utilisateur portable.
3.282 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.
Solution 2 :
Mon conseil pour vous est de suivre la norme recommandée par le NAME_REGEX par défaut. Vous pouvez en fait mettre presque n'importe quoi dans un nom d'utilisateur sous *NIX, mais vous pouvez rencontrer des problèmes étranges avec le code de la bibliothèque qui fait des suppositions. Exemple :
http://blog.endpoint.com/2008/08/on-valid-unix-usernames-and-ones-sanity.html
Ma question pour vous :avez-vous beaucoup de noms de domaine qui se heurteraient si vous supprimiez la ponctuation inhabituelle ? Par exemple, avez-vous à la fois "QUALITY-ASSURANCE" et QUALITYASSURANCE" comme noms de domaine ? Si ce n'est pas le cas, vous pouvez simplement adopter une politique consistant à supprimer les caractères inhabituels et à utiliser ce qui reste comme nom d'utilisateur.
De plus, vous pouvez utiliser la section "nom réel" du champ GECOS dans les informations /etc/passwd pour stocker le nom de domaine d'origine non modifié, et les scripts pourraient l'extraire assez facilement.