Voir le code source, en particulier libmisc/chkname.c. Shadow est assez conservateur: les noms doivent correspondre à l'expression rationnelle [_a-z][-0-9_a-z]*\$?et peuvent contenir au maximum des GROUP_NAME_MAX_LENGTHcaractères (option de configuration, 16 par défaut; les noms d'utilisateur peuvent généralement aller jusqu'à 32 caractères, sous réserve de la détermination au moment de la compilation).
Debian assouplit beaucoup le contrôle. À compter de la compression, tout sauf les espaces et :est autorisé. Voir bug # 264879 et bug # 377844 .
POSIX nécessite d'autoriser les lettres des deux cas, des chiffres et ._-( comme dans les noms de fichiers ). POSIX ne définit aucune restriction si vous ne vous souciez pas de la portabilité. Un certain nombre de restrictions recommandées proviennent de l'utilisation:
Les deux-points, les retours à la ligne et les valeurs nulles sont tout de suite sortis; vous ne pouvez tout simplement pas les utiliser dans /etc/passwdou /etc/group.
Un nom composé uniquement de chiffres est une mauvaise idée - chownet chgrpsont censés traiter une séquence de chiffres comme un nom si elle se trouve dans la base de données d'utilisateurs / groupes, mais d'autres applications peuvent traiter n'importe quel nombre comme un identifiant numérique.
Une initiale -ou un .dans un nom d'utilisateur est fortement déconseillé, car de nombreuses applications s'attendent à pouvoir passer $user.$groupà un utilitaire externe (par exemple chown $user.$group /path/to/file) ¹. Un .nom de groupe devrait causer moins de problèmes, mais je le déconseille toujours.
/ est également susceptible de causer des problèmes, car certains programmes s'attendent à pouvoir utiliser des noms d'utilisateur dans les noms de fichiers.
Tout personnage que le shell élargirait est probablement risqué.
Les caractères non ASCII devraient être corrects si vous ne vous souciez pas du partage avec des systèmes qui peuvent utiliser différents encodages.
¹ Toutes les implémentations modernes attendent chown $user:$group, mais prennent en charge la chown $user.$groupcompatibilité descendante, et il y a trop d'applications qui passent un point pour supprimer cette prise en charge de compatibilité.
Re chownargument: la syntaxe actuelle, au moins dans les coreutils GNU, est user:group, avec un point accepté uniquement pour des raisons de compatibilité. On peut utiliser j.smith:j.smith.
user1686
1
@grawity: Ce n'est pas seulement GNU coreutils, mais le problème n'est pas chownlui-même, ce sont les scripts existants et d'autres programmes qui appellent à la chown $user.$groupplace de chown $user:$group- même si l' chownimplémentation essaie de faire la bonne chose, certains cas sont intrinsèquement ambigus.
Gilles 'SO- arrête d'être méchant'
1
Si vous vous sentez aventureux, vous pouvez modifier /etc/groupdirectement et saisir le nom de groupe que vous souhaitez. De plus, cela a l'avantage supplémentaire que lorsque vous rencontrez l'un des problèmes mentionnés par @ Gilles, vous ne pourrez peut-être pas charger un éditeur pour résoudre le problème, ou même vous connecter du tout - vous donnant une expérience précieuse dans la récupération d'un système cassé!
chown
argument: la syntaxe actuelle, au moins dans les coreutils GNU, estuser:group
, avec un point accepté uniquement pour des raisons de compatibilité. On peut utiliserj.smith:j.smith
.chown
lui-même, ce sont les scripts existants et d'autres programmes qui appellent à lachown $user.$group
place dechown $user:$group
- même si l'chown
implémentation essaie de faire la bonne chose, certains cas sont intrinsèquement ambigus.Si vous vous sentez aventureux, vous pouvez modifier
/etc/group
directement et saisir le nom de groupe que vous souhaitez. De plus, cela a l'avantage supplémentaire que lorsque vous rencontrez l'un des problèmes mentionnés par @ Gilles, vous ne pourrez peut-être pas charger un éditeur pour résoudre le problème, ou même vous connecter du tout - vous donnant une expérience précieuse dans la récupération d'un système cassé!la source
/etc/gshadow
lors de l'ajout de groupes. Aussi, utilisezvigr(8)
plutôt que de modifier directement les fichiers.